1

我有这段代码来运行幻灯片(这只是我的代码中真正发生的事情的一部分)

var slideshow = {
        delay: 5000,
        actions:[],
        run: function() {
                if (slideshow.actions.length) {
                        slideshow.actions.shift()();
                        setTimeout(slideshow.run, slideshow.delay);
                }
        }
};
 var tn;
$(".sideimg").each(function(){
        var that = this;

        slideshow.actions.push(function(){
 if (tn != "") {
  out(tn);
 }
 over($(that).attr("id"));
 var $paneTarget = $('#lyr1');

 var $target = $paneTarget.find('#'+$(that).attr("id"));
 $paneTarget.stop().scrollTo( $target , 800 );

 $("#rimg").fadeOut("slow",function () {
 $("#rimg").attr("src",$(that).attr("bsrc")); 
 $("#rimg").attr("alt",$(that).attr("alt")); 
   $("#rimg").fadeIn("normal");
  });
 tn = $(that).attr("id");

        });

});

完成每个sideimg课程后,它会停止......我需要从头开始......我试图回忆它 - 但什么也没发生

多谢你们

4

2 回答 2

1

对于这种情况,我根本不会使用 each 方法。我会使用 setTimeout,一个包含图像/href 信息的对象数组,以及一个告诉您在图像数组中的位置的值。当您到达数组的末尾时,重置该值(为清楚起见,以下代码已简化,未经测试):

var index = 0;
var images = // array of image containing objects here. 

function RunSlideShow()
{
     // modify the following line to perform any effects, etc, and other attribute settings you need. 
     $("#rimg").attr("src", images[index].image);

     index = index + 1;
     if (index = images.length)
         index = 0;
     window.setTimeout('RunSlideShow();', 5000);
}

RunSlideShow();

每次调用幻灯片对象中的函数时,您确实需要让该函数在下一张幻灯片退出之前加载它。每次重新循环完成后的问题是:“它什么时候停止?” 如果您预先加载所有图像,以永远继续,您将导致无限循环并且很可能导致浏览器崩溃。您需要相同的功能来设置图像,然后准备要显示的下一张图像,但它应该不会比下一张图像更远。每当您试图超越这一点时,您就有可能创建一个永远不会停止的不断增长的项目集合。

于 2010-03-05T12:24:45.430 回答
1

在您的 Run 方法中,您移动数组元素..这会将它们从数组中删除..您应该移动它,然后在最后将其推回...

var slideshow = {
        delay: 5000,
        actions: [],
        timer: null,
        pause: function(){ clearTimeout( slideshow.timer ); },
        resume: function(){ slideshow.timer = setTimeout(slideshow.run, slideshow.delay); },
        run: function() {
                    if (slideshow.actions.length) {
                            var current = slideshow.actions.shift();
                            current();
                            slideshow.actions.push( current );
                            slideshow.timer = setTimeout(slideshow.run, slideshow.delay);
                    }
            }
};

我刚刚添加了将保存超时对象的计时器变量,以便您可以按需清除它,以及一些启动/停止幻灯片的方法。

现在只需将悬停事件添加到您想要开始/停止幻灯片放映的元素 slideshow.pause()slideshow.resume()

于 2010-03-05T12:59:31.097 回答