1

我正在尝试修复这个背景推子,它可以工作,但它会返回一些未定义的值,我无法弄清楚,任何帮助将不胜感激。

php 只是读取一个目录并获取图像文件路径,然后在其中创建包含该文本的隐藏跨度。

       $(document).ready(function () {
         /* DocReady */
         var counter = 0;
         var faderImgs = new Array();
         $('span.entry').each(function () {
           var value = 'images/bg/' + $(this).text();
           faderImgs.push(value);
           $('<img />').attr('src', value).appendTo(this).css('display', 'none');
         })

         /* DocReady */

         var intId = setInterval(faderBg, 8000);
         var numItems = $('span.entry').length;

         function faderBg() {

           $('.background-fader').animate({
             'opacity': '0'
           }, 2000, function () {
             $('.background-fader').css('background-image', 'url(' + faderImgs[counter] + ')')
             $('.background-fader').animate({
               'opacity': '1'
             }, 2000)

           })
           counter++;
           if (counter > numItems) {
             var counter = 0;
           }
         }

       });

- - - - - - - - - - - - - - 编辑 - - - - - - - - - - - ------------------

非常感谢您的帮助,现在又开始工作了。

4

1 回答 1

2

你的计数器溢出了数组的末端。您希望在它等于“numItems”时将其设置回零,而不是在它更大时;JavaScript 数组从零开始,所以最大的索引是numItems - 1.

       counter++;
       if (counter >= numItems) { // >=, not >
         counter = 0;
       }

var此外,当您将“计数器”设置为零时,您不需要。您应该使用.prop()而不是设置您创建的那些元素.attr()的“src”属性。<img>(我不确定你为什么还要费心去创建这些,除非它可能是将图像预取到浏览器缓存中。如果是这样,则无需将<img>元素附加到 DOM — 只需创建一个Image实例并设置它的 " src”属性。)

编辑——@charlietfl 正确地指出,这种流浪var会给你带来严重的问题,因为它会导致该内部函数中有一个本地“计数器”变量。事实上,如果它存在于你的真实代码中,我根本无法想象它是如何工作的,因为“计数器”总是如此undefined(或者NaN我猜是在后增量之后)。

于 2012-10-14T13:26:49.933 回答