使用chrome时,setInterval无法正常工作

4

我使用了两个<div>标签(一个是图片,另一个是包含多张图片的

    ),制作了一个图像渐变器。在Firefox和Safari浏览器上,这个脚本完美地运行着。但是,在Chrome浏览器上它不能正常工作,只会进行一次淡入淡出操作然后就停止了。以下是脚本内容。

    $("#second").css({
        opacity: 0.0
    });
    
    $(function () {
        setInterval("rotateImages()", 4000);
    });
    
    function rotateImages() {
    
        if ($("#first").css("opacity") == 1) {
            $("#first").animate({
                opacity: 0.0
            }, 1500);
            $("#second").animate({
                opacity: 1.0
            }, 1500);
        } else {
            $("#second").animate({
                opacity: 0.0
            }, 1500);
            $("#first").animate({
                opacity: 1.0
            }, 1500);
        };
    
    };
    

    我不知道问题出在哪里,也不知道如何使脚本在所有浏览器上运行。 非常感谢您的任何帮助。
    谢谢。

1
你能创建一个 jsfiddle.net 吗? - mplungjan
在Chrome中对我来说运行良好 http://jsfiddle.net/JLC2q/ - epascarello
挑剔:不要一遍又一遍地使用 $("#XXXX"),将其存储到变量中并使用它,这样您就不会不断地进行DOM查找以获取已经找到的元素。 - epascarello
@user2674916 如果没有您的互动,这会变得非常困难。请提出您的意见或建议,如果问题解决,请说明原因或共享错误信息。 - Praveen
我尝试了所有建议,问题依旧存在,在除Chrome以外的所有浏览器上都运行良好。 - Yamen
3个回答

2

这对我有效

实时演示

$(function() {
  $("#second").css({
    opacity: 0.0
  });
  setInterval(rotateImages, 4000);    
});
function rotateImages() {
    if ($("#first").css("opacity") == 1) {
        $("#first").animate({
            opacity: 0.0
        }, 1500);
        $("#second").animate({
            opacity: 1.0
        }, 1500);
    } else {
        $("#second").animate({
            opacity: 0.0
        }, 1500);
        $("#first").animate({
            opacity: 1.0
        }, 1500);
    };

};

然而,这可以变得更加简单。例如,这个几乎可行,但这个更好
$(function() {
  var $first = $("#first");
  var $second  = $("#second");
  $("#second").hide();

  var tId = setInterval(function() {
      $first.fadeToggle("slow",function() {
        $second.fadeToggle("slow");
      })    
  },4000);          
});

@mplungjan 我们需要将其分配给一个变量 var tId = 吗? - Praveen
当人们在 Stack Overflow 抱怨某些东西不起作用时,我从不假设代码在元素之后。 - mplungjan
@mplungjan使用clearInterval做得很好。我没有意识到。不错。但是如果没有OP的互动,这真的很难理解。 - Praveen
非常感谢,您建议的fadeToggle确实有效,但有点抖动。 - Yamen
@Shikiryu - 用户很可能不会回来了。自2012年8月以来只有1个积分,因此在SO上根本没有活动。我们可以希望他最后一次出现是在9月份。 - mplungjan
显示剩余3条评论

-1

移除 () 和引号

   setInterval(rotateImage, 4000);

1
然而,那不是原因。 - mplungjan
@mplungjan 感谢您的编辑。我以为这是语法错误。正在仔细观察以弄清楚。 - Praveen
1
不对,http://jsfiddle.net/AEjda/5/ 点这里看它是如何工作的。最好在这里制作你的代码片段并分享链接。 - Praveen

-2
$(function(){
    setInterval("rotateImages()", 4000);
});

变成

setInterval(function(rotateImages()), 4000);

1
与setInterval(rotateImages, 4000);相同,但无济于事。 - mplungjan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接