1 回答

TA貢獻(xiàn)1864條經(jīng)驗(yàn) 獲得超2個(gè)贊
在任何時(shí)間點(diǎn)趕上緩動(dòng)動(dòng)畫旋轉(zhuǎn)
動(dòng)畫直線
t
從0
到1
,或從0.N
以1.0
(0.6如果在第六第二出最大值10的加入了一個(gè)播放器)$({t: t}).animate({t: 1},
舒適!在任何給定的“現(xiàn)在”時(shí)間點(diǎn),使用自定義緩動(dòng)函數(shù)將當(dāng)前 0.0-1.0 時(shí)間范圍(
t_now
值)轉(zhuǎn)換為相應(yīng)的緩動(dòng)e_now
值將緩動(dòng)
e_now
結(jié)果乘以所需的結(jié)束度數(shù)
而不是使用的"swing"
利用"linear"
和讓我們控制了寬松和時(shí)間與自定義緩動(dòng)功能(你可以找到許多寬松的片段在網(wǎng)上)。說我們喜歡easeInOutSine
:
const easeInOutSine = t => -(Math.cos(Math.PI * t) - 1) / 2;
例子
示例 4 人,一個(gè)人在旋轉(zhuǎn)輪子,其他人在初始旋轉(zhuǎn)開始后2、4.5 和 8.7 秒加入表演:
const easeInOutSine = t => -(Math.cos(Math.PI * t) - 1) / 2;
function spinRoulette(sel, deg, duration = 10000) {
const $el = $(sel);
const maxDuration = 10000;
const deg_end = 720 + Math.round(deg); // 2 revolutions + server-generated degrees
const time = maxDuration - duration; // Start time in ms
const t = time / maxDuration; // Start time to 0.0-1.0 range
$({t: t}).animate({t: 1}, { // Custom jQuery anim. from 0.N to 1.0
duration: duration,
easing: "linear", // We need a linear 0.0 to 1.0
step: function(t_now) {
const e_now = easeInOutSine(t_now); // Current easing
const deg_now = e_now * deg_end; // Current degrees
$el.css({transform: `rotate(${ deg_now }deg)`});
}
});
}
// Person 1 spins!
spinRoulette("#r1", 45);
// Person 2 joins the room after 2s
setTimeout(() => spinRoulette('#r2', 45, 10000 - 2000), 2000);
// Person 3 joins the room after 4.5s
setTimeout(() => spinRoulette('#r3', 45, 10000 - 4500), 4500);
// Person 4 joins the room after 8.7s
setTimeout(() => spinRoulette('#r4', 45, 10000 - 8700), 8700);
img {height: 120px; display: inline-block;}
<img id="r1" src="https://i.stack.imgur.com/bScK3.png">
<img id="r2" src="https://i.stack.imgur.com/bScK3.png">
<img id="r3" src="https://i.stack.imgur.com/bScK3.png">
<img id="r4" src="https://i.stack.imgur.com/bScK3.png">
<script src="//code.jquery.com/jquery-3.4.1.min.js"></script>
在上面的例子中,最后,你可以注意到(除了一些奇怪的視錯(cuò)覺)輪子在任何時(shí)間點(diǎn)以正確的旋轉(zhuǎn)狀態(tài)追趕,速度,并且所有的都以相同的緩動(dòng)同時(shí)完成,在確切的預(yù)定義deg_end學(xué)位。
添加回答
舉報(bào)