javascript - 单击需要完成才能再次激活

标签 javascript jquery slideshow

我正在制作一种简单的幻灯片,其中包含用于导航的下一个和上一个按钮。

我设置的方式是有一个容器,里面有 7 张幻灯片,所有幻灯片的大小都与容器相同,并且左侧的位置为 100%、200% 等。

这些按钮使 marginLeft 具有动画效果,以转到下一张或上一张幻灯片。

$('#slideArrowRight').click(function(){
        var allSlides = $(this).siblings('.slideContainer');
        var slideWidth = allSlides.width();
        var maxSlides = $('.slideContainer').length - 1;
        var maxWidth = maxSlides * slideWidth;
        var negative = 0 - maxWidth;

        if (parseFloat($(allSlides).css('marginLeft')) <= negative) {}
        else {      $(allSlides).animate({marginLeft: "-=" + (slideWidth) + "px"}, {duration:200});        }

    });

我正在使用 if 语句来检查是否达到 marginLeft 的最大数量,以便它不能再进一步。

这就是我想出来的。猜猜这东西实际上是做什么用的 xD (对于 javascript 和 jQuery 来说相当新,所以是的,如果东西开始工作我就会退出)

但是,如果我非常快地单击按钮,当函数堆栈在队列中时,它就会传递到最后一张幻灯片。并且点击时未达到最大 marginLeft。

所以我的问题是如何获得它,以便该函数无法运行,除非该函数已完成?

我尝试了 .finish() 但这会立即取消动画,这不是我想要的。我主要想要它,以便函数无法执行,除非该函数不在队列中。

最佳答案

您应该使用简单的标志animationUnderExecution,该标志在函数开头设置为true,并在函数末尾设置为false

首先在事件函数之前定义标志:

var animationUnderExecution = false;

现在在你的函数中(在开始处)检查你是否正在执行另一个动画并将标志设置为 true:

if (animationUnderExecution) return;
animationUnderExecution = true;

现在,当动画完成时,您必须将标志设置为 false:

$(allSlides)
    .animate({marginLeft: "-=" + (slideWidth) + "px"}, 
        {duration:200},
        complete: function() {
            animationUnderExecution = false;
    });

摘要应如下所示:

var animationUnderExecution = false;
$('#slideArrowRight').click(function(){

        if (animationUnderExecution) return;
        animationUnderExecution = true;

        var allSlides = $(this).siblings('.slideContainer');
        var slideWidth = allSlides.width();
        var maxSlides = $('.slideContainer').length - 1;
        var maxWidth = maxSlides * slideWidth;
        var negative = 0 - maxWidth;

        if (parseFloat($(allSlides).css('marginLeft')) <= negative) {}
        else {      
            $(allSlides)
              .animate({marginLeft: "-=" + (slideWidth) + "px"},  
                  {duration:200},
                  complete: function() {
                      animationUnderExecution = false;
                });
        }

    });

关于javascript - 单击需要完成才能再次激活,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28348220/

相关文章:

javascript - 使用 jQuery 更新 div 中的 p

JavaScript 幻灯片放映问题

jquery - 我想从 slider 获取图像源?

javascript - 如何在 React 上的 Json 数据数组上添加新键

javascript - 查询/PHP : Result of jQuery function into PHP variable

javascript - 直接键访问和对象解构之间的性能

javascript - 尝试将图像上传到 firebase 存储但不断收到错误 : Cannot read property 'name' of undefined

javascript - 如何在用户滚动到它们之前加载 onScroll 背景图像?

javascript - jquery垂直 slider 句柄不动

单击时 JavaScript 淡入新图像