如何在执行新动画之前停止Jquery中所有以前的动画?
我只是在用JQuery做一些实验 我有一个图像,当出现如何在执行新动画之前停止Jquery中所有以前的动画?,jquery,javascript-events,Jquery,Javascript Events,我只是在用JQuery做一些实验 我有一个图像,当出现mouseOver()并在mouseOut() 它工作得很好,除非你一次又一次地在链接上移动鼠标,比如说5次,图像会反复淡入淡出,5次,而你只是坐在那里等待它结束这种疯狂的行为 为了停止这种行为,我尝试使用一个标志,仅当它还没有动画时才启动动画,但是,猜猜看,会发生什么?如果,比如说,我有4个这样的按钮,并且我在不同的图像中淡入的每个按钮鼠标上,该动画将被忽略,因为该标志为false 那么,在执行新动画之前,有没有办法停止所有以前的动画? 我
mouseOver()
并在mouseOut()
它工作得很好,除非你一次又一次地在链接上移动鼠标,比如说5次,图像会反复淡入淡出,5次,而你只是坐在那里等待它结束这种疯狂的行为
为了停止这种行为,我尝试使用一个标志,仅当它还没有动画时才启动动画,但是,猜猜看,会发生什么?如果,比如说,我有4个这样的按钮,并且我在不同的图像中淡入的每个按钮鼠标上,该动画将被忽略,因为该标志为false
那么,在执行新动画之前,有没有办法停止所有以前的动画?
我说的是JQuery中正常的fadeIn()
和slideDown()
函数
编辑:从链接添加代码 你已经试过了吗 说明:停止匹配元素上当前运行的动画。使用
使用.Stop()
和fadeIn/Out
可导致不透明度卡在部分状态
一种解决方案是使用.fadeTo()
,这为不透明度提供了一个绝对目标
function mouseOverOut(t) {
if(t) {
$('.img1').stop().fadeTo(400, 1);
$('.img2').stop().fadeTo(400, 0);
}
else {
$('.img1').stop().fadeTo(400, 0);
$('.img2').stop().fadeTo(400, 1);
}
}
这里有一个简短的写作方法
function mouseOverOut(t) {
$('.img1').stop().fadeTo(400, t ? 1 : 0);
$('.img2').stop().fadeTo(400, t ? 0 : 1);
}
或者这可能有用。不过,先测试一下
function mouseOverOut(t) {
$('.img1').stop().fadeTo(400, t);
$('.img2').stop().fadeTo(400, !t);
}
编辑:最后一个似乎有效。真/假转换为1/0。您也可以直接使用.animate()
@patrick Grrrrrrrr你暴露了我幼稚的函数命名习惯!不,我没有尝试停止,它是一个独立的函数吗?我应该像stop()
那样称呼它吗?我现在就试试这个,然后再报告,谢谢使用stop()的goToEnd参数应该可以避免这个问题。@Dr.Molle-是的,这是一个选项,但在我看来效果更刺耳。当然,如果动画可以像你建议的那样顺利结束,它看起来应该会更好:)在你给出答案2年后,仍然有人(嗯..我)使用它!干杯
function mouseOverOut(t) {
$('.img1').stop().fadeTo(400, t ? 1 : 0);
$('.img2').stop().fadeTo(400, t ? 0 : 1);
}
function mouseOverOut(t) {
$('.img1').stop().fadeTo(400, t);
$('.img2').stop().fadeTo(400, !t);
}
function mouseOverOut(t) {
$('.img1').stop().animate({opacity: t});
$('.img2').stop().animate({opacity: !t});
}