javascript - 防止脚本在执行时运行两次

标签 javascript jquery carousel

我有一个正在使用的 jquery/javascript 轮播,但是如果用户在脚本完成执行之前多次单击右侧或左侧导航按钮,它会创建一个丑陋的动画/打乱轮播的顺序。

有什么方法可以防止在该函数仍在执行时再次调用(快速第二次单击)?

$(document).ready(function () {
       $('.inner-main li:first').before($('.inner-main li:last'));
});

function mainSlide(direction) {
    var item_width = 940;

    if (direction == 'left') {
        var movement = parseInt($('.inner-main').css('left')) + item_width;
    } else {
        var movement = parseInt($('.inner-main').css('left')) - item_width;
    }

    $('.inner-main').animate({ 'left': movement }, 800, function () {
        if (direction == 'left') {
            $('.inner-main li:first').before($('.inner-main li:last'));
        } else {
            $('.inner-main li:last').after($('.inner-main li:first'));
        }
        $('.inner-main').css({ 'left': '-940px' });
    });
}

最佳答案

您可以在再次运行动画之前验证该元素当前没有动画:

if(!$('.inner-main').is(':animated')) {
  // animation code
}

编辑: 尝试对计算和动画进行排队,以便它们在任何其他动画完成之前不会执行:

function mainSlide(direction) {
    $('.inner-main').queue( function() {
        var item_width = 940;

        if (direction == 'left') {
            var movement = parseInt($('.inner-main').css('left')) + item_width;
        } else {
            var movement = parseInt($('.inner-main').css('left')) - item_width;
        }

        $('.inner-main').animate({ 'left': movement }, 800, function () {
        if (direction == 'left') {
            $('.inner-main li:first').before($('.inner-main li:last'));
        } else {
            $('.inner-main li:last').after($('.inner-main li:first'));
        }
        $('.inner-main').css({ 'left': '-940px' });
    });
}

关于javascript - 防止脚本在执行时运行两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19320666/

相关文章:

jquery - 如何仅通过单击下一个和上一个按钮来更改轮播的内容?

javascript - Angular Carousel 无法与 ng-repeat 一起使用

javascript - 使用 JSON.stringify 进行深度比较和克隆是否合适?

javascript - 仅加载部分段落文本的 div

javascript - Node fs.writefile\n 未将文本添加到新行

javascript - jquery + asp.net 延迟回发

jquery - HTML5 和 JQuery - 无法从 Data-* 属性检索数据

jquery - 阅读 Bootstrap 轮播中的更多内容

javascript - 无法在 javaScript 中的嵌套 if 语句中调用全局变量

jquery - 如何计算 div 中隐藏的元素数?