2014-10-17 118 views
0

我有一些HTML與內它嵌入SVG如下絕對定位元素一圈

<section id="deck-head"> 

    <svg xmlns="http://www.w3.org/2000/svg" width="250" height="250"> 

     <g> 
      <title>Marker</title> 
      <g id="marker-frame"> 
       <path fill="white" d="m133.300003,64.800003l0,-33.500004l-16.100006,0l0,33.299999c-30.799995,3.700005 -53.499996,29.599998 -53.499996,60.800003c0,33.900002 27.600002,61.299995 61.299999,61.299995s61.300003,-27.399994 61.300003,-61.299995c0,-30.900002 -23.600006,-56.599998 -53,-60.599998zm-53.5,60.699997c0,-24.900002 20.299995,-45.199997 45.199997,-45.199997s45.199997,20.299995 45.199997,45.199997s-20.199997,45.300003 -45.199997,45.300003s-45.199997,-20.400009 -45.199997,-45.300003z"/> 
      </g> 
     </g> 

    </svg> 

    <mark>90&deg;</mark> 

</section> 

我需要能夠複製下面的佈局,而無需使用任何外部JavaScript庫

Desired Layout

忽略紅色

我已經成功地旋轉次e SVG就足以面對正確的方向 - 但是我遇到的麻煩是通過粉紅色圓圈的刻度/尖端將元素置於絕對位置,具體取決於它旋轉到的位置。

在我的頭上,我被後面的邏輯是沿着線的東西: 獲取圓心 獲取旋轉 找出左&頂部位置將基於關閉以上。

但是我完全失去了計算的結果,要讓頂部和左側座標能夠將標記絕對定位在應該出現的位置。

+0

「不過我有麻煩越來越標誌由尖端顯示」 - 這是什麼意思? – Brennan 2014-10-17 17:40:56

+0

爲什麼這次被拒絕了? – Owen 2014-10-22 20:07:30

+0

這個問題並不完全清楚 – Brennan 2014-10-22 20:08:32

回答

1

這些只是簡單的極座標。 jQuery不是必需的,只是爲了更簡單的操作。

var angle = 0, center = 125, radius = 110, pi = Math.PI; 
 
setInterval(function(){ 
 
angle += 1; 
 
$('#c').attr('transform', 'rotate(' + angle + ', 125, 125)'); 
 
// calculate new coordinates for mark 
 
var x = center + radius * Math.cos(angle * pi/180 - pi/2); 
 
var y = center + radius * Math.sin(angle * pi/180 - pi/2); 
 
$('#m').css({top: y + 'px', left: x + 'px'}); 
 
}, 100);
body {background-color:black;} 
 
#m {position:absolute;} 
 
section {poisition:relative;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> 
 
<section id="deck-head"> 
 

 
    <svg xmlns="http://www.w3.org/2000/svg" width="250" height="250"> 
 

 
     <g> 
 
      <title>Marker</title> 
 
      <g id="marker-frame"> 
 
       <path fill="white" id="c" d="m133.300003,64.800003l0,-33.500004l-16.100006,0l0,33.299999c-30.799995,3.700005 -53.499996,29.599998 -53.499996,60.800003c0,33.900002 27.600002,61.299995 61.299999,61.299995s61.300003,-27.399994 61.300003,-61.299995c0,-30.900002 -23.600006,-56.599998 -53,-60.599998zm-53.5,60.699997c0,-24.900002 20.299995,-45.199997 45.199997,-45.199997s45.199997,20.299995 45.199997,45.199997s-20.199997,45.300003 -45.199997,45.300003s-45.199997,-20.400009 -45.199997,-45.300003z"/> 
 
      </g> 
 
     </g> 
 

 
    </svg> 
 

 
    <mark id='m'>90&deg;</mark> 
 

 
</section>