Javascript timelapse-effect:显示30张图像/秒(阅读更多细节)

Jac*_*ack 2 javascript image timelapse slideshow

我有一位客户已经为他的投资组合网站制作了他每天花了365天拍摄一次照片的"视觉日记".他希望我把这些放在一起延时效果.我想过使用Flash但最终选择了JavaScript.

需要做的是:图像循环非常快,没有过渡或任何东西,只有图像 - 图像 - 图像等.大约30/fps或类似的东西.单击闪烁的图像时,它会停止在您选择的图像上,因此用户可以查看.再次单击时,幻灯片将再次开始播放.

我的问题是我是一个PHP/XHTML/CSS的家伙,他对JavaScript并不是最模糊的.我可以愉快地将它集成到任何页面中,但它只是编写令我烦恼的JavaScript.

在他的主页上,我有这个代码用于显示一个基本的幻灯片 - 具有过渡效果等.它在HTML中,但你可以理解我确定的代码:

<!-- Code for slideshow -->
<!-- Found on http://www.webdeveloper.com/forum/showthread.php?t=81441 -->

<SCRIPT LANGUAGE="JavaScript">
<!-- Begin
// Set slideShowSpeed (milliseconds)
var slideShowSpeed = 3000;
// Duration of crossfade (seconds)
var crossFadeDuration = 3;
// Specify the image files
var Pic = new Array();
// to add more images, just continue
// the pattern, adding to the array below

Pic[0] = '1.jpg'
Pic[1] = '2.jpg'
Pic[2] = '3.jpg'
Pic[3] = '4.jpg'
Pic[4] = '5.jpg'
Pic[5] = '6.jpg'
Pic[6] = '7.jpg'
Pic[7] = '8.jpg'
Pic[8] = '9.jpg'
Pic[9] = '10.jpg'
Pic[10] = '11.jpg'
Pic[11] = '12.jpg'
Pic[12] = '13.jpg'
Pic[13] = '14.jpg'
Pic[14] = '15.jpg'
Pic[15] = '16.jpg'
Pic[16] = '17.jpg'
Pic[17] = '18.jpg'
Pic[18] = '19.jpg'
Pic[19] = '20.jpg'

// do not edit anything below this line
var t;
var j = 0;
var p = Pic.length;
var preLoad = new Array();
for (i = 0; i < p; i++) {
preLoad[i] = new Image();
preLoad[i].src = Pic[i];
}
function runSlideShow() {
if (document.all) {
document.images.SlideShow.style.filter="blendTrans(duration=2)";
document.images.SlideShow.style.filter="blendTrans(duration=crossFadeDuration)";
document.images.SlideShow.filters.blendTrans.Apply();
}
document.images.SlideShow.src = preLoad[j].src;
if (document.all) {
document.images.SlideShow.filters.blendTrans.Play();
}
j = j + 1;
if (j > (p - 1)) j = 0;
t = setTimeout('runSlideShow()', slideShowSpeed);
}
//  End -->
</script>
Run Code Online (Sandbox Code Playgroud)

是否有任何方法可以修改此代码以关闭所有过渡效果,并在单击它/再次启动时停止播放?否则,对某些不同代码的引用会很有帮助.

谢谢大家!

插口

Ste*_*son 5

您似乎正在使用特定于IE的代码.我建议在专用的JavaScript库中使用各种效果模块,例如MooTools(我个人最喜欢的),jQueryPrototype + script.aculo.us.

要停止幻灯片放映,您应该能够简单地清除超时t:

clearTimeout(t);
Run Code Online (Sandbox Code Playgroud)

另外,你不应该引用第一个参数setTimeout.传递一个函数参考:

setTimeout(runSlideShow, slideShowSpeed);
Run Code Online (Sandbox Code Playgroud)