【问题标题】:Question related to hover and setInterval与悬停和 setInterval 相关的问题
【发布时间】:2011-08-18 21:22:33
【问题描述】:

我使用悬停功能,鼠标悬停时 setInterval 功能开始工作 和 onmouseout 我清除了 setInterval 函数

我的代码如下:

----已更新---- 对于幻灯片,我有一个 div 名称 divForImages 和我 .append() 该特定 div 中的新图像。我使用 .append() 函数。 我的算法非常简单: 使用 Fadein 函数淡出上一个图像并 .append() 新图像。 所以新的更新版本是:

var IntervalID;    

$("li").hover(
            function() {                                                        
                    IntervalID = setInterval(function() {
                                    //a slideshow begins to auto play...

                        $(".divForImages img").fadeOut(1000); //previous image

                        var item = $('<img src="'+attribute_of_href+'"   width="200" height="100" style="left:0px;top:0px;position:absolute"  />').css({"display":"none"}); //new image that is going to be faded in
                       $(".divForImages").append(item);/* new */

                       item.fadeIn(1000);
                                    }, 4000);
                       },
            function() {                
                    clearInterval(IntervalID);
                        });

我定义的毫秒数是 4000。 问题是当我 FIRST 将鼠标悬停在 li 上时,幻灯片不会开始 立即自动播放,但会等待 4 秒!

当然,我把时间定义为4000秒

我可以让 setInterval 在我鼠标悬停时立即开始,而不是等待 4000 毫秒吗??

谢谢,提前

【问题讨论】:

    标签: jquery setinterval


    【解决方案1】:

    试试这个:

    function playSlideShow() {
        //a slideshow begins to auto play...
    }
    
    $("li").hover(
        function() {    
                playSlideShow();    // start playing immediately        
                IntervalID = setInterval(playSlideShow, 4000);
        },
        function() {                
                clearInterval(IntervalID);
        });
    

    【讨论】:

      【解决方案2】:

      您需要使用settimeout 而不是setinterval

      了解更多请查看setinterval vs settimeout

      【讨论】:

      • 这仍然会导致它在触发之前等待4000ms,但它只会触发一次。 OP 想要一个幻灯片的间隔。
      • 感谢链接,但 settimeout 只触发一次,我需要 setInterval 函数来自动播放图像
      • patrick dw 你是对的,所以我看到@Mrchief 很好,在这两种情况下,如果他使用 setinterval 或 setimeout
      【解决方案3】:

      当然,只需命名函数,立即调用它,然后让它按名称返回到setInterval()

      var IntervalID;
      var slideshow = function () {
              //a slideshow begins to auto play...
          return slideshow; // <-- the return value lets you invoke and pass it.
      };
      
      $("li").hover( function () {
          IntervalID = setInterval( slideshow(), 4000);
      }, function () {
          clearInterval(IntervalID);
      });
      

      示例: http://jsfiddle.net/Hgwt8/

      【讨论】:

      • 感谢编码,它确实有效!但我有一个小问题,它太快了!想象一下我有一个幻灯片,当我第一次将鼠标悬停时我错过了第一个图像,因为它会迭代到第二个立即一个。你认为我应该在这种情况下使用 settimeout 作为@Amr_ElGarhy 所说的以推迟一点吗?可以这样做吗??
      • @programmer:你的代码肯定有其他问题,可能是起始索引号。您需要发布实际代码才能确定。
      • 好吧,也许你是对的,因为我在幻灯片放映中使用了淡入淡出和淡入淡出:
      • 是的,我使用了 1000 毫秒的淡入和淡出,这有关系吗?另外,我在第一篇文章中添加了新代码
      猜你喜欢
      • 2018-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多