如何停止有弹性的 JQuery 动画
How do I stop a bouncy JQuery animation?
在我正在处理的Web应用程序中,我想创建一些滑块div
,这些滑块将分别随着鼠标悬停和鼠标退出而上下移动。我目前使用 JQuery 的 hover()
函数实现了它,通过使用 animate()
并根据需要减少/增加它的 css 值top
。实际上,这相当有效。
问题是它往往会卡住。如果您将鼠标移到它上面(尤其是在底部附近),并快速将其移除,它将连续上下滑动,并且在完成 3-5 个周期之前不会停止。对我来说,这个问题似乎与一个动画在另一个动画完成之前开始有关(例如,两个正在尝试运行,所以它们来回滑动。
好的,现在开始代码。这是我正在使用的基本 JQuery:
$('.slider').hover(
/* mouseover */
function(){
$(this).animate({
top : '-=120'
}, 300);
},
/* mouseout*/
function(){
$(this).animate({
top : '+=120'
}, 300);
}
);
我还在 JSFiddle 中重新创建了该行为。
对正在发生的事情有什么想法吗?:)
==编辑== 更新的 JSFiddle
它并不完美,但添加.stop(true,true)
会阻止你看到的大部分内容。
http://jsfiddle.net/W5EsJ/18/
如果您从下到上快速悬停,它仍然会闪烁,因为您正在将鼠标移出div,从而导致 mouseout 事件触发,从而将div 动画化回去。
您可以通过减少延迟来减少闪烁,但是在延迟为 0 之前它仍然存在(无动画)
更新
我想了想,意识到有一个明显的解决方案。类似悬停意图的功能!
http://jsfiddle.net/W5EsJ/20/
$(document).ready(function() {
var timer;
$('.slider').hover(
/* mouseover */
function(){
var self = this;
timer = setTimeout(function(){
$(self).stop(true,true).animate({
top : '-=120'
}, 300).addClass('visible');
},150)
},
/* mouseout*/
function(){
clearTimeout(timer);
$(this).filter(".visible").stop(true,true).animate({
top : '+=120'
}, 300).removeClass("visible");
}
);
});
.stop() 也可以使用外部容器位置
$(document).ready(function() {
$('.slider').hover(
/* mouseover */
function(){
$(this).stop().animate({
top : $('.outer').position().top
}, 300);
},
/* mouseout*/
function(){
$(this).stop().animate({
top : $('.outer').position().top + 120
}, 300);
}
);
});
演示
希望这有帮助
无法重现您的问题,但我相信hover
被多次调用。要解决此问题,您可以检查div 是否已在动画中。如果是,则不要再次运行其他动画。
添加以下代码段以检查div 是否已经"动画化":
if ($(this).is(':animated')) {
return;
}
代码:http://jsfiddle.net/W5EsJ/2/
参考:http://api.jquery.com/animated-selector/
我理解问题并重现了它,它发生在自下而上悬停时。鼠标悬停是导致问题的原因,因为当鼠标悬停在图像上时将调用动画函数。您需要通过使用鼠标输入和鼠标离开来控制这里发生的情况,请查看一个类似的例子:Jquery Animate on Hover
是因为悬停正在排队,导致它多次上下滑动。 有一个名为hoverIntent的插件可以解决此问题。 http://cherne.net/brian/resources/jquery.hoverIntent.html
如果您决定使用 hoverIntent,则在代码中唯一需要更改的是 .hover> .hoverIntent
- 剑道网格jQuery动画()问题
- jquery动画可以通过编程链接吗
- JQuery动画延长容器不起作用
- 如何正确编程jQuery动画与平滑(导航栏)
- jQuery动画-边框宽度和颜色
- 如何抽象JQuery动画方法
- jQuery动画标题滚动
- JQuery - 为什么 JQuery 动画是同时进行的
- 如何用jquery动画改变背景颜色,就像一个过渡
- 正在等待jQuery动画完成
- 如何优化jquery动画代码
- jQuery动画的持续时间就像一个延迟
- 创建一个类似Jquery动画的Flipboard弹出窗口
- 应用jQuery动画时出现意外的抖动效果
- 如何设置'auto'JQuery动画中的高度
- jQuery动画缩放需要我点击主体
- 如何将jquery动画应用于单个项目
- 如何简化jquery动画函数代码
- 使用 jquery 动画幻灯片使用角度中继器切换
- Jquery动画和when函数