javascript - jQueryeach 和定时循环

标签 javascript jquery

我正在尝试构建一系列嵌套的计时循环。内部循环迭代具有相同 CSS 类的 6 个项目,并交换图像 4 秒。外循环导致内循环不断重复。因此,image1 交换、image2 交换... image6 交换、image1 交换、image2 交换...每个 div 中有两个图像,一个具有“热”类,一个具有“冷”类。一开始,“热门”图像被隐藏。

以下代码在 24 秒后立即交换所有图像,然后似乎没有执行任何其他操作。

        var innertime = 4000; //highlight effect time in ms
        var outertime = innertime * 6;
        setInterval(function() {
            $.each($('.eachsponsor'), function(){
                $(this).find('img.cold').css("display","none");
                $(this).find('img.hot').css("display", "block");
                setTimeout(function(){
                    $(this).find('img.hot').css("display","none");
                    $(this).find('img.cold').css("display", "block");
                }, innertime);
            });
        }, outertime);

如果有人对为什么这不起作用有任何指示,我将不胜感激。

最佳答案

你的问题是:setTimeout内的this是全局的。尝试使用 .bind 绑定(bind)上下文

setTimeout(function(){
           $(this).find('img.hot').css("display","none");
           $(this).find('img.cold').css("display", "block");
      }.bind(this),innertime);

但是我认为你的代码仍然没有达到你想要的效果,我认为你需要这个:

var innertime = 4000;
var eachsponsor = $('.eachsponsor');
$.each(eachsponsor, function(){
       $(this).find('img.cold').hide();
       $(this).find('img.hot').show();
});

var currentIndex = 0;
setInterval(function(){
      var currentDiv = eachsponsor.eq(currentIndex);
      currentDiv.find('img.hot').toggle();
      currentDiv.find('img.cold').toggle();

      currentIndex = (currentIndex+1) % eachsponsor.length;
 }, innertime);

更新:

var innertime = 4000;
    var eachsponsor = $('.eachsponsor');
    $.each(eachsponsor, function(){
           $(this).find('img.cold').hide();
           $(this).find('img.hot').show();
    });

    var currentIndex = 0;

    function slideNext(){
          var currentDiv = eachsponsor.eq(currentIndex);

          currentDiv.find('img.cold').hide();
          currentDiv.find('img.hot').show();

          setTimeout(function(){
              currentDiv.find('img.hot').toggle();
              currentDiv.find('img.cold').toggle();
              currentIndex = (currentIndex+1) % eachsponsor.length;
              slideNext();
          },innertime);
    }

    slideNext();

关于javascript - jQueryeach 和定时循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20170940/

相关文章:

javascript - 如何在 angularjs 中格式化取决于区域设置的日期?

Javascript通过Tag搜索XML并获取兄弟节点

javascript - MySql - JSON 数据未显示在 html 中

javascript - 如何在其他字符串中回显字符串?

javascript - 制作文本 "non-readable"

Javascript 字符串到特殊数组

javascript - HTML - 如何使用弹出窗口来输入和输出值?

javascript - 在 detach 和 appendTo 元素被复制之后

javascript - 粘性导航栏在 Firefox 中消失

jquery - 如何在palm mojo中使用jquery?