jQuery 随机起点的幻灯片
jQuery slideshow with random startpoint
我的照片列表如下:
<ul class="slideshow">
<li><img src="images/slideshow/slide0.jpg" alt="" /></li>
<li><img src="images/slideshow/slide1.jpg" alt="" /></li>
<li><img src="images/slideshow/slide2.jpg" alt="" /></li>
<li><img src="images/slideshow/slide3.jpg" alt="" /></li>
<li><img src="images/slideshow/slide4.jpg" alt="" /></li>
<li><img src="images/slideshow/slide5.jpg" alt="" /></li>
</ul>
这是我的脚本:
$(function () {
var duration = 6000;
var speed = 700;
var slideshow = $(".slideshow");
var pictures = slideshow.children('li');
var length = pictures.length;
i = 0;
j = 0;
slidePicture = function () {
pictures.eq(i).fadeOut(speed, function () {
while(i == j) {
i = Math.floor(Math.random() * length);
}
pictures.eq(i).fadeIn(speed);
j = i;
});
};
pictures.not(':first').hide();
setInterval(slidePicture, duration);
});
现在这个脚本总是首先显示相同的图像。它不能连续两次显示同一图像,但可以显示 slide0.jpg
,然后显示 slide1.jpg
,然后再次显示 slide0.jpg
,依此类推。我想要的是
- 随机化起始图像,使其在每次页面加载时都不同。
- 当页面加载时,创建一个随机的 "playlist" 图片(比如第一次加载页面时,幻灯片按顺序显示图片 3、1、0、5、2、4,下次加载时这是不同的顺序)。这是为了确保它不会意外地在相同的两个图像之间切换。
我尝试通过随机排列包含数字 0-5 的数组然后将其洗牌来解决第二个问题,但我的 javascript/jQuery 技能很差,我不确定如何继续。感谢任何帮助。
This question has a useful shuffle function 在已接受的答案中,您可以使用它来创建随机播放列表。
然后您可以使用一个简单的计数器循环遍历它,显示与播放列表中该条目匹配的图像:
for(n = 0; n <= length; n++) {
playList.push(n);
}
playList = shuffle(playList);
slidePicture = function () {
$('.slideshow li').eq(playList[i]).fadeOut(speed, function () {
var next = (i >= length) ? 0 : i + 1;
$('.slideshow li').eq(playList[next]).fadeIn(speed);
i = next;
});
};
对于 1. 您可以隐藏所有内容并显示与播放列表中第一个条目对应的图片:
$('.slideshow li').hide();
$('.slideshow li').eq(playList[i]).show();
Here's a fiddle 展示它是如何工作的。为了更容易测试,我用文本替换了图像,并且我已经切碎并稍微改变了它。它很粗糙,但希望能展示这个想法。
我的照片列表如下:
<ul class="slideshow">
<li><img src="images/slideshow/slide0.jpg" alt="" /></li>
<li><img src="images/slideshow/slide1.jpg" alt="" /></li>
<li><img src="images/slideshow/slide2.jpg" alt="" /></li>
<li><img src="images/slideshow/slide3.jpg" alt="" /></li>
<li><img src="images/slideshow/slide4.jpg" alt="" /></li>
<li><img src="images/slideshow/slide5.jpg" alt="" /></li>
</ul>
这是我的脚本:
$(function () {
var duration = 6000;
var speed = 700;
var slideshow = $(".slideshow");
var pictures = slideshow.children('li');
var length = pictures.length;
i = 0;
j = 0;
slidePicture = function () {
pictures.eq(i).fadeOut(speed, function () {
while(i == j) {
i = Math.floor(Math.random() * length);
}
pictures.eq(i).fadeIn(speed);
j = i;
});
};
pictures.not(':first').hide();
setInterval(slidePicture, duration);
});
现在这个脚本总是首先显示相同的图像。它不能连续两次显示同一图像,但可以显示 slide0.jpg
,然后显示 slide1.jpg
,然后再次显示 slide0.jpg
,依此类推。我想要的是
- 随机化起始图像,使其在每次页面加载时都不同。
- 当页面加载时,创建一个随机的 "playlist" 图片(比如第一次加载页面时,幻灯片按顺序显示图片 3、1、0、5、2、4,下次加载时这是不同的顺序)。这是为了确保它不会意外地在相同的两个图像之间切换。
我尝试通过随机排列包含数字 0-5 的数组然后将其洗牌来解决第二个问题,但我的 javascript/jQuery 技能很差,我不确定如何继续。感谢任何帮助。
This question has a useful shuffle function 在已接受的答案中,您可以使用它来创建随机播放列表。
然后您可以使用一个简单的计数器循环遍历它,显示与播放列表中该条目匹配的图像:
for(n = 0; n <= length; n++) {
playList.push(n);
}
playList = shuffle(playList);
slidePicture = function () {
$('.slideshow li').eq(playList[i]).fadeOut(speed, function () {
var next = (i >= length) ? 0 : i + 1;
$('.slideshow li').eq(playList[next]).fadeIn(speed);
i = next;
});
};
对于 1. 您可以隐藏所有内容并显示与播放列表中第一个条目对应的图片:
$('.slideshow li').hide();
$('.slideshow li').eq(playList[i]).show();
Here's a fiddle 展示它是如何工作的。为了更容易测试,我用文本替换了图像,并且我已经切碎并稍微改变了它。它很粗糙,但希望能展示这个想法。