我有一个 3D 轮子,我正在使用 javascriptrequestAnimationFrame()
函数制作动画。
轮子看起来像:
有 4 个主要变量需要考虑:
items
轮子上的段数。
spinSpeed
旋转速度修改器。将每帧的角度增加/减少乘以该值。
spinDuration
减速停止前全速旋转动画的长度。
spinDirection
轮子应该旋转的方向。接受up
或down
。
现在我想使用轮子停止的角度从 DOM 中获取线段(红线相交的地方)。轮段的弧起点和终点角度存储在数据属性中。例如:
<div class="wheel__inner">
<div class="wheel_segment" ... data-start-angle="0" data-end-angle="12.85">Item 1</div>
<div class="wheel_segment" ... data-start-angle="12.85" data-end-angle="25.71">Item 2</div>
<div class="wheel_segment" ... data-start-angle="25.71" data-end-angle="38.58">Item 3</div>
...
</div>
我通过在每个刻度上存储修改后的角度来跟踪当前的车轮旋转。例如:
let wheelAngle = 0;
window.requestAnimationFrame( function tick() {
if ( spinDirection === 'up' ) {
wheelAngle += speedModifier;
} else {
wheelAngle -= speedModifier;
}
window.requestAnimationFrame( tick );
} );
当动画停止时,我尝试通过使用开始和结束角度对旋转和过滤片段进行归一化来获取片段。
我将旋转归一化,因为它可以在上方360°和下方移动0°,我使用以下函数执行此操作:
function normaliseAngle( angle ) {
angle = Math.abs( angle ) % 360;
angle = 360 - angle; // Invert
return angle;
}
并像这样使用 jQuery 过滤元素:
const $found = $wheel.find( '.wheel__segment' ).filter( function() {
const startAngle = parseFloat( $( this ).data( 'start-angle' ) );
const endAngle = parseFloat( $( this ).data( 'end-angle' ) );
return angle >= startAngle && angle < endAngle;
} );
然而,尽管我尽了最大的努力,我还是无法让它发挥作用。请在此处查看我的 JSFiddle:https ://jsfiddle.net/thelevicole/ps04fnxm/2/
开心每一天1111
函数式编程
相关分类