jQuery Cycle插件 - 暂停/恢复奇怪的行为

时间:2010-07-20 03:09:41

标签: jquery jquery-plugins jquery-cycle

我有一个幻灯片运行与令人敬畏的循环插件,当你点击节目中的一个按钮,我在页面上显示一个隐藏的图层,并发送'暂停'命令循环。我有两个问题:

  1. 当收到暂停命令时,循环立即翻转回序列中的第一张幻灯片(为什么??),并且没有点击我之前/之后的回调。

  2. 关闭图层后,我发送'resume'命令进行循环。幻灯片继续播放(从第一张幻灯片开始,暂停离开它),但现在循环根本不会调用我之前/之后的回调,即使幻灯片显示进展。

  3. 所以我想我的问题是:如何才能正确暂停/恢复幻灯片放映,以免出现这些奇怪的行为? (并且为了完全清楚并避免任何混淆,这不是关于“暂停悬停”功能,这实际上对我来说很好。: - )

    这是我的cycle()init和我的回调函数。 (为什么我要手动跟踪nextSlide,你问?因为当前幻灯片的内置值没有为前/后回调正确更新。)

      $(document).ready(function() {
        $('#slideshow').cycle({
          fx: 'fade',        // choose your transition type, ex: fade, scrollUp, shuffle, etc...
            timeout:       4000,  // milliseconds between slide transitions (0 to disable auto advance)
            speed:         1000,  // speed of the transition (any valid fx speed value)
            pause:         1,     // true to enable "pause on hover"
            delay:         0,     // additional delay (in ms) for first transition (hint: can be negative)
            slideExpr:     'img',  // expression for selecting slides (if something other than all children is required)
            before:       moveArrow, // function to call when moving to next slide
            after:       upd, // function to call when moving to next slide
            fastOnEvent:   'fast',
        });
      });
    
      var nextSlide = 0;
    
      function upd(a, b, c) {
        nextSlide = nextSlide + 1;        // track which slide we're on
        c = $('#slideshow img').length;
        if(nextSlide > (c - 1)) nextSlide = 0;   // wrap back to 1st
      }
    
      // move indicator showing which slide we're on
      function moveArrow(a, b, c) {
        $('#slide-indicator').attr('class', 'c'+nextSlide);
    
        $(".clickmap").hide();          // hide other clickmaps
        $(".clickmap.c"+nextSlide).show();    // show map for this slide
    
        return true;
      }
    

    感谢您对此的任何想法 -

    最好的, 埃里克

4 个答案:

答案 0 :(得分:3)

我有同样的问题,暂停和恢复无法正常工作。看来我已经安装了Lite版本,它的完整/完整版本正在运行。

答案 1 :(得分:0)

您没有显示发送暂停命令的代码。有些东西肯定是错误的,因为暂停不会将幻灯片重置为第一张幻灯片。

此外,您无需自己跟踪幻灯片索引。回调之前/之后的第三个参数是具有幻灯片显示内部状态的选项对象。在该对象上,您将找到'currSlide'和'slideCount'属性等等。

答案 2 :(得分:0)

我知道这是一个老问题,但我遇到了同样的问题。我解决它的方法是简单地创建我自己的函数来暂停和恢复使用JQuery的悬停事件的幻灯片。

正如Eric在一些评论中所指出的,一个相关的问题是插件的暂停选项只允许悬停在IMG元素上暂停幻灯片放映,所以如果你的图像上有任何东西,比如寻呼机或任何装饰元素,然后你就是骨头。

所以,我将我的装饰元素,横幅(我称之为“#banner”)和寻呼机全部放入一个名为“#banner-container”的div中,然后应用此代码来解决我的问题:

$('div#banner-container').hover(function(){
   if(!$(this).hasClass('paused')){
       $(this).addClass("paused");
       $('div#banner').cycle("pause")
   }
},function(){
   if($(this).hasClass('paused')){
       $(this).removeClass("paused");
       $('div#banner').cycle("resume")
   }
});

答案 3 :(得分:0)

问题在于JQuery Cycle Plugin版本:“lite”版本忽略了pause / resume命令。使用完整版可以解决问题。

编辑:对不起,我错了:我尝试了两个版本,但使用完整版本时遇到了同样的问题。