获取arc svg上

时间:2016-05-12 06:51:11

标签: javascript jquery css svg

假设我有svg,如下所示:

var myArc = d3.svg.arc()
    .innerRadius(width / 5)
    .outerRadius(width / 2);

myArc.startAngle(function(d, i) {
    return radians * i
});

myArc.endAngle(function(d, i) {
    return radians * (i + 1)

...后来填充了一些颜色等等。它看起来像这样:

svg circle

现在,我希望svg点击获取角度。示例:当我点击红色时,我希望在~310°和50°之间,当我点击黄色等时,我想要达到70°左右。

我该怎么做?提前谢谢。

1 个答案:

答案 0 :(得分:2)

我做了一些研究,没有找到任何更简单的解决方案。 我使用你提到的方式:得到圆心和点击位置,然后根据这两个计算角度。我不认为这太复杂了。

注意:因为圆圈实际上不是圆形,所以存在一些数值误差。

希望这很有用。

(function($){
  var center = {};
  
  var calculateAngle = function(x, y){
    var k = Math.abs(y) / Math.abs(x);
    var angle = Math.atan(k) * 180 / Math.PI;
    if(y * x > 0){
    	angle = 90 - angle + (y < 0 ? 180 : 0);
    } else {
      angle = angle + (y < 0 ? 90 : 270);
    }
    
    return angle;
  }
  
  $(document).ready(function(){
    var $container = $('#container');
    var $selector = $('#selector');
    var $result = $('#result');
    
    center = {
      x: $container.width() / 2,
      y: $container.height() / 2
    }    
    $selector.css({left:center.x, top:center.y});
    
    $container.on('click', function(e){
    	var x = e.offsetX;
      var y = e.offsetY;
      $selector.css({left:x, top:y});
      var angle = calculateAngle(x - center.x, center.y - y);
      
      $result.text(angle);
    });
  });
})(jQuery)
#container{
  display: inline-block;
  border: 1px solid red;
  width: auto;
  position: relative;
  
}

#selector{
  position: absolute;
  border:1px solid black;
  width: 5px;
  height: 5px;
  border-radius: 50%;
  transform: translate(-50%, -50%);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

<div id="container">
  <span id="selector"></span>
  <img src="http://i.stack.imgur.com/4X8A7.png">
</div>
<div>
  <span>Result: </span>
  <span id="result"></span>
</div>