2017-08-09 63 views
0

我希望能夠在半圈動畫,然後只有當我處於確切的div時動畫纔會觸發,因此在其他部分查看時不會動畫。圓形路徑已經在CSS中定義了,我無法改變它,我可以把一個覆蓋圓放在圓弧頂部?所以有了這個參數,我認爲jquery會是一個好方法,或者你認爲如何?我是新來的動畫與路邊,所以我希望你能幫助我。下面是我嘗試過的插圖和代碼。如何僅在半圈動畫

enter image description here

function moveit() { 
t += 0.05; 

var r = 100;   // radius 
var xcenter = 100; // center X position 
var ycenter = 100; // center Y position 

var newLeft = Math.floor(xcenter + (r * Math.cos(t))); 
var newTop = Math.floor(ycenter + (r * Math.sin(t))); 

$('#circgreen').animate({ 
    top: newTop, 
    left: newLeft, 
}, 1, function() { 
    moveit();// 
}) 

}

$(document).ready(function() { 
    moveit(); 
}) 

回答

1

嗯。我不認爲我會嘗試使用JavaScript來計算圓的弧線並沿着它進行動畫處理。

由於外圓是在CSS中定義的,因此我將綠色覆蓋圓定義爲內部元素,其絕對位置是相對於外部圓的。然後,只需旋轉外圈:

$('button').click(() => { 
 
\t $('#circle').toggleClass('rotated') 
 
})
body { 
 
\t overflow: hidden; // just to make the example cleaner 
 
} 
 

 
#circle { 
 
\t border: 1px solid #999; 
 
\t border-radius: 200px; 
 
\t position: relative; 
 
\t height: 400px; 
 
\t width: 400px; 
 
\t transform: rotate(45deg); 
 
\t transition: transform 0.5s; 
 
} 
 

 
#circle.rotated { 
 
\t transform: rotate(135deg); 
 
} 
 

 
#circle::after { 
 
\t background: green; 
 
\t border-radius: 5px; 
 
\t content: ''; 
 
\t height: 10px; 
 
\t position: absolute; 
 
\t top: 50%; 
 
\t left: 10px; 
 
\t transform: translateY(-50%); 
 
\t width: 10px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<button>Click to Rotate</button> 
 
<div id="circle"></div>

+0

謝謝你一個完美的答案! – propaganja

+0

我可以對此有一個跟進問題嗎?我想問一下如何做到這一點是響應式設計?因爲在其他屏幕尺寸上這個尺寸會中斷。謝謝 – propaganja

+0

@propaganja這取決於,但你需要增長/縮小的所有東西都是很大的外部圓圈。將'#circle'的高度/寬度設置爲動態值(例如'%'或'vw'),並給它們一個固定的最大高度/寬度以及可能的固定的最小高度/寬度將使這個響應成爲可能。以下是一個JSFiddle示例:https://jsfiddle.net/87rt9j32/ – bowheart