即使使用stop()也可以创建JQuery动画

即使使用stop()也可以创建JQuery动画,jquery,jquery-animate,Jquery,Jquery Animate,我正在整合一个特色内容滑块元素,虽然技术上一切正常,但当快速单击导航按钮时,我仍在体验动画的生成。这是我的密码: this.LRSliderScrollVert = function(j) { var viewOutside = GetObject(this.sliderObjectId); if (parseInt(viewOutside.style.top) == 1 && j == 1){ //do nothing } else if

我正在整合一个特色内容滑块元素,虽然技术上一切正常,但当快速单击导航按钮时,我仍在体验动画的生成。这是我的密码:

this.LRSliderScrollVert = function(j) {
    var viewOutside = GetObject(this.sliderObjectId);
    if (parseInt(viewOutside.style.top) == 1 && j == 1){
        //do nothing
    } else if (parseInt(viewOutside.style.top) == this.sliderBottomLimit && j == -1) {

    } else {
        //viewOutside.style.top = parseInt(viewOutside.style.top) + j +'px';
        var total = parseInt(viewOutside.style.top) + j + 'px';
        $(viewOutside).stop().animate({
            top: total
        }, 700, 'swing');
    }
}
正如您所看到的,我已经在使用stop(),但它似乎没有给我想要的结果,即单击一次调用动画,并且在第一个动画完成之前,不会处理对animate函数的其他调用

我也尝试过停止(真的,真的),结果没有差别

任何帮助都将不胜感激。谢谢。

.stop(true,true)
停止当前正在运行的动画,将其推进到结尾,并将其从动画队列中删除。这听起来不像你要做的

如果希望后续动画在正在进行的动画完成后继续,则只需删除
.stop()
,因为新动画将在当前动画之后添加到队列中

如果要在对象当前正在设置动画时根本不启动后续动画,则可以检查对象当前是否正在设置动画,如果是,请避免启动另一个动画

若要在将来的动画仍在从上次单击开始制作动画时忽略该动画,可以执行以下操作:

this.LRSliderScrollVert = function(j) {
    var viewOutside = GetObject(this.sliderObjectId);
    if (parseInt(viewOutside.style.top) == 1 && j == 1){
        //do nothing
    } else if (parseInt(viewOutside.style.top) == this.sliderBottomLimit && j == -1) {

    } else {
        var total = parseInt(viewOutside.style.top) + j + 'px';
        // remove any objects from the selector that are currently animating
        // if there are none left, then it will do nothing
        $(viewOutside).not(":animated").animate({
            top: total
        }, 700, 'swing');
    }
}
我删除了
.stop()
,因为这不是您想要的。这将停止当前动画,但您说希望它继续。要跳过的是当前动画正在运行时的任何未来动画


我添加了
.not(“:animated”)
,以从选择器中删除当前正在设置动画的任何对象。如果您的一个对象正在设置动画,这将留下一个空的jQuery对象,然后在调用
.animate()
方法时将不执行任何操作。这只需在测试
“is(“:animated”)
和对结果使用
if
语句时节省一点代码。

在上发布一个工作演示。调试起来会容易得多。我很难让它在JSFIDLE中工作,因为代码是ASP驱动的。不过我会继续尝试。我已经尝试使用了。是(“:动画”),但也没有运气。这实际上使我的动画无法启动。@Yuschick-你到底想做什么?如果第一个动画仍在运行,是否阻止第二个动画启动?或者,在第一次完成后排队第二次运行?或者,停止第一个,然后开始第二个?我希望在第一个动画完成之前,基本上忽略所有单击或动画请求。此时,用户可以再次单击,但在700持续时间内发生的任何单击都应被忽略,不排队,不处理或其他任何操作。谢谢。这似乎确实奏效了。谢谢你的帮助!