2014-09-05 29 views
1

我試圖做一個與kinetic.js的旋鈕 我設法旋轉並獲得價值,但我不能認爲 的邏輯保持以前的位置每當在旋鈕新的事件被稱爲試圖做一個與kinetic.js的旋鈕

這裏是例子,

這裏是我的dragBoundFunc,

dragBoundFunc: function(pos) { 
    knobLine.setRotationDeg(pos.x); 
    return { 
     x: this.getAbsolutePosition().x, 
     y: this.getAbsolutePosition().y,    
    }    
} 

我已經試過

knobLine.setRotationDeg(knobLine.rotation() + pos.x); 

然而,它似乎像它的工作起初,但增量值不是恆定的

請幫助!謝謝!

回答

2

下面是使用三角一種方法:

  • 聽在旋鈕圈子的點擊。
  • 計算點擊與旋鈕中心點的角度。
  • 使用三角重置旋鈕線端點。

實施例的代碼和一個演示:http://jsfiddle.net/m1erickson/h1vpupkd/

<!DOCTYPE html> 
<html> 
    <head> 
    <meta charset="utf-8"> 
    <title>Prototype</title> 
    <script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script> 
    <script src="http://d3lp1msu2r81bx.cloudfront.net/kjs/js/lib/kinetic-v5.1.0.min.js"></script> 
<style> 
body{padding:20px;} 
#container{ 
    border:solid 1px #ccc; 
    margin-top: 10px; 
    width:350px; 
    height:350px; 
} 
</style>   
<script> 
$(function(){ 

    var stage = new Kinetic.Stage({ 
     container: 'container', 
     width: 350, 
     height: 350 
    }); 
    var layer = new Kinetic.Layer(); 
    stage.add(layer); 

    var knob=new Kinetic.Circle({ 
     x:100, 
     y:100, 
     radius:18, 
     stroke:'red', 
    }); 
    knob.on('click',function(){ 
     var cx=this.x(); 
     var cy=this.y(); 
     var radius=this.radius(); 
     var pos=stage.getPointerPosition(); 
     var mouseX=parseInt(pos.x); 
     var mouseY=parseInt(pos.y); 
     var dx=mouseX-cx; 
     var dy=mouseY-cy; 
     var angle=Math.atan2(dy,dx); 
     var lineX=cx+radius*Math.cos(angle); 
     var lineY=cy+radius*Math.sin(angle); 
     line.points([cx,cy,lineX,lineY]); 
     layer.draw(); 
    }); 
    layer.add(knob); 

    var line=new Kinetic.Line({ 
     points:[100,100,100,85], 
     stroke:"red" 
    }); 
    layer.add(line); 

    layer.draw(); 


}); // end $(function(){}); 

</script>  
</head> 
<body> 
    <h4>Click in knob to reset line.</h4> 
    <div id="container"></div> 
</body> 
</html> 
+0

非常感謝您的回答,但我正在嘗試製作一個可拖動的旋鈕 – user1420929 2014-09-05 05:19:51

1

通過使用Math.atan2(y,x)獲取弧度值和弧度轉換爲radian/Math.PI*180程度。

dragBoundFunc: function(pos) { 
    var theta = Math.atan2(pos.y,pos.x); 
    knobLine.rotation(theta/Math.PI*180+45); 
    return { 
     x: this.getAbsolutePosition().x, 
     y: this.getAbsolutePosition().y, 
    } 
}