【问题标题】:Nivo Slider Delay only the first imageNivo Slider 仅延迟第一张图像
【发布时间】:2013-04-12 18:09:17
【问题描述】:

它工作! http://jsfiddle.net/jupago/W6CkP/

基于此线程:Pause Nivo Slider

我想办法让它停在第一张图片上。

这是我的代码。我要停止动画两次,因为我希望它在幻灯片结束后也停止:

$(window).load(function() {
    $('#slider').nivoSlider({
    effect: 'fade', // Specify sets like: 'fold,fade,sliceDown'
    animSpeed: 500, // Slide transition speed
    pauseTime: 5000,
    startSlide: 0, // Set starting Slide (0 index)
    directionNav: true,  // Next & Prev navigation
    controlNav: false, // 1,2,3... navigation
    controlNavThumbs: false, // Use thumbnails for Control Nav
    pauseOnHover: false, // Stop animation while hovering
    manualAdvance: false, // Force manual transitions
    prevText: 'previous', // Prev directionNav text
    nextText: 'next', // Next directionNav text
    randomStart: false, // Start on a random slide
    slideshowEnd: function(){           
          $('#slider').data('nivoslider').stop();
    setTimeout("$('#slider').data('nivoslider').start()",10000);
        }, // Triggers when last slide is shown
    });

    $('#slider').data('nivoslider').stop();
    setTimeout("$('#slider').data('nivoslider').start()",10000);
 });

此处为原帖:

我正在使用 NIVO 滑块插件,虽然我让它工作顺利,但我需要第一张图片比其他图片持续更长时间(第一张图片中有文字)。

我在这里创建了一个工作小提琴:jsfiddle.net/jupago/W6CkP

这应该会让问题更容易理解。 我还在附上小提琴之前的html代码以供参考:

HTML:

<div class="slider-wrapper">
    <div id="slider" class="nivoSlider">
<img src="http://goo.gl/I4c65" />
<img src="http://goo.gl/acxBF"/>
<img src="http://goo.gl/GBzYF"/>
<img src="http://goo.gl/BC2EA" />
<img src="http://goo.gl/9Sd69" />
<img src="http://goo.gl/qOaZl"/>
<img src="http://goo.gl/btswq" />
    </div>
</div>

JS NIVO:

    $('#slider').nivoSlider({
    effect: 'fade', // Specify sets like: 'fold,fade,sliceDown'
    animSpeed: 500, // Slide transition speed
    pauseTime: 5000, // How long each slide will show
    startSlide: 0, // Set starting Slide (0 index)
    directionNav: true,  // Next & Prev navigation
    controlNav: false, // 1,2,3... navigation
    controlNavThumbs: false, // Use thumbnails for Control Nav
    pauseOnHover: false, // Stop animation while hovering
    manualAdvance: false, // Force manual transitions
    prevText: 'next', // Prev directionNav text
    nextText: 'previous;', // Next directionNav text
    randomStart: false, // Start on a random slide
    beforeChange: function(){}, // Triggers before a slide transition
    afterChange: function(){}, // Triggers after a slide transition
    slideshowEnd: function(){}, // Triggers after all slides have been shown
    lastSlide: function(){}, // Triggers when last slide is shown
    afterLoad: function(){} // Triggers when slider has loaded
});

【问题讨论】:

    标签: jquery slider nivo-slider


    【解决方案1】:

    我还没有尝试过,所以我不能保证它会起作用,但您可以尝试的其中一件事是将pauseTime 设置为函数而不是常量5000。您将确定您在哪个图像上,然后,如果它是所需的图像,您会将时间设置为8000,否则您将其设置为5000

    重申一下:我没有对此进行测试,也不能保证它会起作用。但是,如果这样做,它将为您提供大量额外的灵活性。


    如果您想尝试实现此功能,可以使用以下代码:

    ...
    pauseTime: function() {
        if ($("#slider").data("nivo:vars").currentSlide == 0) {
            return 8000;
        }
        return 5000;
    },
    ...
    

    或者,如果这在 pauseTime 中不起作用,那么我会尝试将几乎相同的东西放入其他 beforeChange 选项中,如下所示:

    ...
    beforeChange: function() {
        if ($("#slider").data("nivo:vars").currentSlide == 0) {
            $("#slider").delay(3000);
        }
        return;
    },
    ...
    

    重要提示:您实际上应该将上面示例中的 ....currentSlide == 0) 替换为 Nivo Slider 的 startSlide 选项的访问器,特别是如果您打算更改滑块的起始索引.我不记得访问器是什么,但我会想象它看起来像:

    ....currentSlide == settings.startSlide)
    

    其中settings 是 Nivo 使用的设置变量的名称。


    更新

    基于您在 cmets 中提到的错误,我的下一个建议是您再次尝试相同的两个解决方案,但这次将 setting.startSlide 替换为 0。如果这不起作用(尽管它应该),那么我们需要回到绘图板上。如果确实有效,请尝试将0 替换为this.startSlide。让我知道这是怎么回事。

    【讨论】:

    • 感谢@Zachary Kniebel 这似乎是最简单的版本,但我似乎无法让它工作。尝试将文件上传到临时文件夹中,看看是否有帮助。我尝试使用 settings.startSlide ,因为我相信这是 Nivo 正在使用的变量,但抛出了一堆错误
    • 不客气。你是正确的,变量的名称是settings。您能否也将更新的代码和错误添加到您的帖子中。谢谢:)
    • 非常感谢@Zachary Kniebel,当我尝试将 pauseTime 设置为一个函数时,它会疯狂地不停地旋转。当我插入带有访问器的第二个示例时,chorme 给了我这个:Uncaught ReferenceError: settings is not defined
    • 我在我的帖子中添加了一个更新,为您提供了一些建议。让我知道会发生什么。
    • 谢谢@Zachary Kniebel,还没有运气。创造了一个小提琴。 (jsfiddle.net/jupago/W6CkP)希望这会有所帮助。太感谢了! ——
    【解决方案2】:

    你可以试试这样的:

     $(window).load(function() {
       var waited = false;
       $('#slider').nivoSlider({
        //...
        beforeChange: function(){
            if(!waited && ($('#slider').data("nivo:vars").currentSlide == 0)) { //first slide
                //wait a little longer
                $('#slider').data('nivoslider').stop();
                setTimeout(function(){
                     waited = true;
                     $('#slider').data('nivoslider').start();
                }, 2000); //2 seconds
            } else {
                waited = false;
            }
        },
        //...
        });
    });
    

    编辑:我不知道settimeout是否真的有必要,也许只有return false会这样做。

     $(window).load(function() {
       var waited = false;
       $('#slider').nivoSlider({
        //...
        beforeChange: function(){
            if(!waited && ($('#slider').data("nivo:vars").currentSlide == 0)) { //first slide
                //wait a little longer
                return false;
            } else {
                waited = false;
            }
        },
        //...
        });
    });
    

    【讨论】:

    • 在 setTimeout 函数的第二行检查你的两个语法错误(虽然第二行只是一个分号,所以从技术上讲,一个是可以的)
    • 这个解决方案可能会奏效,但我一直认为 setTimeout 是 Pis Aller
    • 感谢@Philippe Boissonneault!我几乎让它工作了。正在发生的奇怪事情是,使用此代码是第二个图像被延迟,而不是第一个。不知道该怎么做,因为 startSlide 已经设置为 0
    • 我不知道这是否是解决方案,但不要使用 settimeout,只尝试return false(见编辑)
    • 谢谢@Philippe Boissonneault,但是我应该在哪里设置第二个选项的延迟时间?
    【解决方案3】:

    我已经完成了并且工作正常:

    在您的 HTML 页面中更改:

    $(window).load(function() {  
         $('#slider').nivoSlider({...
    

    $( document ).ready(function() {
        $('#slider').nivoSlider({...
    

    【讨论】:

      猜你喜欢
      • 2016-11-19
      • 1970-01-01
      • 1970-01-01
      • 2012-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多