【问题标题】:jquery 1.4.1 breaks my slideshowjquery 1.4.1 打破了我的幻灯片
【发布时间】:2011-03-01 20:04:09
【问题描述】:

在玩弄了 jquery 幻灯片扩展之后,我创建了自己的更适合我的目的的(例如,我不喜欢在开始时需要加载的所有图像)。现在,在升级到 jQuery 1.4.2(我知道我迟到了)后,幻灯片可以很好地加载第一张图片(从$('div#slideshow img#ssone').fadeIn(1500); 行到底部),但除此之外没有做任何事情。有谁知道哪个 jquery 构造正在杀死我的脚本?实时页面位于lplonline.org,目前使用的是 1.3.2。提前致谢。

Array.prototype.random = function( r ) {
var i = 0, l = this.length;
 if( !r ) { r = this.length; }
 else if( r > 0 ) { r = r % l; }
 else { i = r; r = l + r % l; }
 return this[ Math.floor( r * Math.random() - i ) ];
};

jQuery(function($){
    var imgArr = new Array();
    imgArr[1] = "wp-content/uploads/rotator/Brbrshop4-hrmnywkshp72006.jpg";
    imgArr[2] = "wp-content/uploads/rotator/IMGA0125.JPG";
    //etc, etc, about 30 of these are created dynamically from a db

var randImgs = function () {

    var randImg = imgArr.random();
        var img1 = $('div#slideshow img#ssone');
        var img2 = $('div#slideshow img#sstwo');

        if(img1.is(':visible') ) { 
            img2.fadeIn(1500);
            img1.fadeOut(1500,function() {
                img1.attr({src : randImg});
            });


        } else {
            img1.fadeIn(1500);
            img2.fadeOut(1500,function() {
                img2.attr({src : randImg});
            });

        }
}

setInterval(randImgs,9000); //  9 SECONDS

$('div#slideshow img#ssone').fadeIn(1500);

});
</script>

<div id="slideshow">
<img id="ssone" style="display:none;" src="wp-content/uploads/rotator/quote-investments.png" alt="" />
<img id="sstwo" style="display:none;" src="wp-content/uploads/rotator/quote-drugs.png" alt="" />
</div>

【问题讨论】:

    标签: jquery slideshow jquery-1.4


    【解决方案1】:

    啊哈!我继承了这个网站,似乎该网站的原始创建者在标题中调用了大约 3 或 4 个不同的 js 库(scriptalicious、prototype...)。但实际上它们都没有被使用。我把所有这些东西都拿出来了,现在它工作得很好,所以问题出在 jQuery 和其他库之一之间的交互上。无论如何,感谢 Dan Heberden 的时间和建议!

    【讨论】:

      【解决方案2】:

      这是因为你的函数是如何作用域的——给它分配一个像这样的变量:

      var randImgs = function() {
        // do stuff
      }
      

      现在您的 setInterval 引用了正确的函数。

      快速说明:div#slideshow(或任何标签/ID 组合)效率不高。 ID 仅适用于该元素,因此不需要说“查看所有 div 并找到...的 id”。

      但是,对 div.myClassName 等类使用这种方法 - 说“查看所有 div 并找到类..”。

      父母/孩子也是如此 - #parent #child - 是额外的工作 - #child 可以自己找到。但是,#parent div.myClassName 是明智的,因为这有助于缩小对类名为 myClassname 的 div 的搜索范围。

      【讨论】:

      • 1) 你能解释一下为什么我不能创建一个函数然后像我一样调用它吗? (我更熟悉 php,所以这里可能有一些不同...) 2) 同样,有趣的想法是不使用 element#id,而是仅使用 #id。在 css 中,最好使用 div#id,因为它限制了需要搜索该 id 的内容。 javascript(或jQuery)不同吗? 3)最后,我做了你建议的范围更改,但这似乎并没有解决问题。
      • 这是因为 setInterval 不在该匿名函数的范围内运行。调用 'to' setInterval 是,但不是结果间隔。当您向它发送参考(变量=函数)时,它会保存链接。 2) 我的提示适用于 jQuery 和 css - (developer.mozilla.org/en/Writing_Efficient_CSS)。无需“搜索” id - 只有一个 3) 我会再做一次测试
      • 好吧,也许我对函数引用有误,因为它适用于 jsfiddle 上的 1.4.2:jsfiddle.net/kPG9Z
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-21
      • 2014-04-02
      • 2011-01-01
      • 1970-01-01
      • 2010-11-04
      相关资源
      最近更新 更多