【问题标题】:Jquery - slideshow buttons function codeJquery - 幻灯片按钮功能代码
【发布时间】:2013-08-27 19:32:03
【问题描述】:

我在这里有这个非常简单的幻灯片:fiddle
jQuery代码:

$("#slideshow > div:gt(0)").hide();

var maxindex = $('#slideshow > div').length;

var index = 0
var interval = 3 * 1000; // 3 seconds
var timerJob = setInterval(traverseSlideShow, interval);

function traverseSlideShow() {
    console.log("current index: " + index);

    $('#slideshow > div')
        .stop()
        .fadeOut(1000);
    $('#slideshow > div').eq(index)
        .stop()
        .fadeIn(1000);

    $('ul li').removeClass('active');
    $('ul li:eq(' + index + ')').addClass('active');
    index = (index < maxindex - 1) ? index + 1 : 0;

}

for (var i = 0; i < maxindex; i++) {
    $('ul').append('<li class="' + (i == 0 ? 'active' : '') + '"></li>');
}

$(document).on('click', 'ul li', function () {
    index = $(this).index();
    traverseSlideShow();
    clearInterval(timerJob);
    timerJob = setInterval(traverseSlideShow, interval);
});

如您所见,共有三个按钮,单击任何按钮时,幻灯片会自动转到与您单击的按钮相关的照片,并且您可以看到此按钮的样式发生变化(单击时,在经过 3 秒后)。
我正在尝试修复此代码的一个问题。
好吧,我试图在更改任何按钮的样式后阻止单击任何按钮一秒钟,简单,如果单击任何按钮,您将无法在 1 秒内重新单击另一个按钮,也是如此,如果幻灯片自动加载一张照片,您将无法在 1 秒内单击任何其他按钮来加载任何其他照片。

【问题讨论】:

    标签: jquery slideshow


    【解决方案1】:

    我会在按钮中添加一个标志作为 css 类:

    工作小提琴:http://jsfiddle.net/b_m_h/Jtec5/86/

    标志是.enable css 类,只有li.enable 是可点击的。

    该事件仅在ul li.enable 上侦听click

    ...
    $(document).on('click', 'ul li.enable', function () {
    ...
    

    首先,所有按钮都应该是可点击的,所以为所有li添加.enable类:

    for (var i = 0; i < maxindex; i++) {
        $('ul').append('<li class="' + (i == 0 ? 'active' : '') + ' enable"></li>');
    }
    

    并在traverseSlideShow()中添加禁用li按钮并在1秒后重新启用它的机制:

    function traverseSlideShow() {
        ...
        $('ul li').removeClass('enable');
        setTimeout(function(){
            $('ul li').addClass('enable');
        }, 1000);
    }
    

    【讨论】:

    • 完美的代码,100%的工作,我会尽快给50的声望。非常感谢
    • 可以只添加已经添加的代码,还是更改整个代码?
    • 当然,我已经更新了答案,只对代码进行了更改。并感谢您的赏金。 :)
    【解决方案2】:

    试试这个,

    (function(){
        $('button').on('click',function(){
        var $this=$(this);
                $this
                    .attr('disabled','disabled');
                     setTimeout(function() {
                     $this.removeAttr('disabled');
                     }, 1000);
              });
         })();
    

    【讨论】:

    • 感谢您的尝试,但不幸的是,此代码并非 100% 有用,它确实会阻止在图片加载时单击按钮 1 秒,但在图片自动加载时不会.
    【解决方案3】:

    在函数中使用 setTimeout,其中 b 是要延迟的按钮的 id

    function slow_button(b) {
    
        $('#' + b).attr("disabled", true);
        var t = setTimeout(function(){$('#' + b).removeAttr("disabled")}, 1000);
    }
    

    【讨论】:

    • 无论如何我都无法让您的代码正常工作,请您在此处幻灯片的 JSFiddle 中应用它:jsfiddle.net/Jtec5/33
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-23
    • 1970-01-01
    • 1970-01-01
    • 2021-03-15
    • 2013-11-18
    • 2013-09-03
    • 2015-04-21
    相关资源
    最近更新 更多