前后滚动 jQuery 动画

Posted

技术标签:

【中文标题】前后滚动 jQuery 动画【英文标题】:Scrolling a jQuery animation backwards and forwards 【发布时间】:2010-10-14 11:20:30 【问题描述】:

我正在制作一个五人制足球(室内足球)教练应用程序,它允许教练在屏幕上添加球员,设置他们的移动方向(通过使用 html5 画布绘制箭头),然后按“播放”以移动所有球员屏幕。播放器由带有播放器背景图像的 div 组成。

动画正在使用jquery .animate() 函数完成。

我所做的只是更改播放器 div's lefttop css 位置属性。

我想做两件事,但不确定如何做:

    我想创建一个 jQuery 滑块,并在动画发生时逐步移动它。我猜我会通过在开始之前计算动画的总长度来做到这一点?

    我想来回移动上面的 jQuery 滑块 - 以反转动画并在需要时暂停它。考虑到我们正在为动画移动 div,而不是进行逐帧序列动画,这有可能吗?

【问题讨论】:

这个应用怎么样了?我认为同样的技术可以用来创建一个简单的舞台拦截应用。 【参考方案1】:

在动画开始之前,保存开始位置怎么样?

startpostion = $(playerdiv).position(); //Or offset, I keep forgetting which
$(playerdiv).data("startTop",startposition.top);
$(playerdiv).data("startLeft",startposition.left);

稍后您可以使用检索它

left = $(playerdiv).data("startTop")

等等

您始终可以使用 step 选项为动画提供回调,这样您就可以相应地更新滑块。

$(playerdiv).animate( 
    top : targetTop,
    left : targetLeft, 
    step, function() magic happens here
)

【讨论】:

【参考方案2】:

我会这样做:

    如果用户点击“播放”,则开始将 div 从其当前位置动画化到目的地。您可以根据滑块的位置轻松计算剩余时间和 div 位置:

    startingDivTop = initialDivTop + (finalDivTop - initialDivTop) * sliderPosition; startingDivLeft = initialDivLeft + (finalDivLeft - initialDivLeft) * sliderPosition; startingTime = totalDuration * sliderPosition;

    (或类似的东西,sliderPosition 介于 0 和 1 之间)

    如果用户再次单击滑块,则在所有 div 上调用 .stop() 方法:这样它们将停止动画并且您将能够静态设置它们:计算 div 应位于的位置at 并将它们静态移动到该点。

    如果用户“放下”滑块并且“播放”仍处于激活状态,则动画应从滑块被放下的点继续向前。

听起来你正在做一个不错的项目:)

【讨论】:

以上是关于前后滚动 jQuery 动画的主要内容,如果未能解决你的问题,请参考以下文章

aos.js超赞页面滚动元素动画jQuery动画库

使用 jQuery 滚动动画

动画 jQuery 滚动顶部

JQuery 动画运行不流畅,滚动条闪烁很多,DIV 动画化

如何让jquery动画效果在屏幕滚动到指定位置才执行

一个简单的滚动动画jQuery插件