【问题标题】:slideshow counter disappears幻灯片计数器消失
【发布时间】:2013-05-29 21:40:29
【问题描述】:

我有这段代码应该为幻灯片生成一个计数器,然后更改计数器中的图片和相应的数字颜色。但是,在幻灯片循环播放两次后,计数器会变为 display:none,然后在每次幻灯片开始循环时重新出现和消失。

//icons for newsreel guide
for(i=0;i<document.getElementsByClassName("news").length;i++){
    var count=i+1;
    $('#counter').append('<span class="count">'+count+'</span>');
}
//newsreel script
$(".news").hide();
setTimeout (function() {
    var wait = $(".news:last").index()*12000+12000;
    function newsreel(){
    var i=0;
    (function showNews(elem){
        if(i==document.getElementsByClassName("count").length){
            i=0;
        }
        document.getElementsByClassName("count")[i].style.color="#000";
        elem.fadeIn(2000,function(){
            elem.delay(8000).fadeOut(2000,function(){
                document.getElementsByClassName("count")[i].style.color="#3159a0";
                i=i+1;
                $(this).next().length && showNews($(this).next()); 
            });
        });
    })
    ( $(".news:first"));
    setTimeout (arguments.callee, wait);
    }/*end newsreel()*/
    newsreel();
}, 2000);

起初我以为它使用了已弃用的arguments.callee,但我改变了它,它仍然在提示时发生。有任何想法吗?

【问题讨论】:

  • 为什么要使用已弃用的代码?
  • @Justin Morgan 很久以前有人帮我制作了这张幻灯片,这就是他们当时的建议。
  • 那条线在做什么? $(this).next().length &amp;&amp; showNews($(this).next());
  • @Karl-AndréGagnon - 该行将导致showNews 递归$(this) 的后续兄弟,直到它到达容器的末尾。
  • 不是条件式吗?

标签: javascript jquery slideshow counter


【解决方案1】:

我检查了你的代码,问题出在这一行:

$(this).next().length && showNews($(this).next())

.next() 正在获得下一个兄弟姐妹。您的计数器是.news 的兄弟。要解决您的问题,请执行以下操作:

$(this).next().length && showNews($(this).next('.news'))

这将选择类news的下一个兄弟。

【讨论】:

    【解决方案2】:

    我怀疑这是因为您的 showNews 函数从未运行。我认为 JavaScript 引擎正在评估

    (function showNews(elem){
        //...
    })
    

    ( $(".news:first"));
    

    作为两个不同的表达式,而不是按照您的意图将$(".news:first") 作为参数传递给showNews。由于; 在 JS 中是可选的,如果结果是有效的 JavaScript,解析器将自动插入一个。在这种情况下,它定义了一个函数但从不调用它,然后构建一个 jQuery 序列但从不使用它。

    尝试去掉两者之间的回车:

    (function showNews(elem){
        //...
    })($(".news:first"));
    

    【讨论】:

    • 我认为您在这里有所作为。我尝试删除回车符,但仍然出现奇怪的行为。然后我尝试在.news:first 之后添加#counter.count 作为参数,我得到了一些奇怪而有趣的结果。我认为这是我可以添加一些额外内容以使我的 #counter div 保持可见的地方。
    • @user2434247 - 你用的是什么浏览器?这看起来可能在浏览器之间的解析方式不同,尤其是考虑到 Karl-André Gagnon 的评论,即代码对他有用。
    • 我的大部分测试都是在 Firefox 中进行的。我刚刚在 Chrome 中尝试过,结果相同。它在幻灯片放映中运行一次,然后在第一个循环之后,计数器消失了,所以也许他们没有让它运行足够长的时间?
    猜你喜欢
    • 2016-10-05
    • 1970-01-01
    • 2017-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-28
    相关资源
    最近更新 更多