我有一个图像滑块和一个淡入一张图像的功能,延迟5秒,然后淡出。
通过单击通过JQuery生成的按钮,您可以直接切换到某个图像。之前的图像将被淡出。显示所选图像后,幻灯片将从该点开始继续。
问题:当我点击其中一个直接访问按钮时,延迟会明显缩短。我不知道为什么会这样?
代码:
$(document).ready(function(){
var index = 0;
var bilder=[
["HA_Promo_1.jpg","(a Link here)"],
["HA_Promo_2.jpg","(a Link here)"],
["HA_Promo_3.jpg","(a Link here)"],
["HA_Promo_4.jpg","(a Link here)"],
["HA_Promo_5.jpg","(a Link here)"],
["HA_Promo_6.jpg","(a Link here)"]
];
$(bilder).each(function() {
$("#linkleiste").append("<span class=\"klick\">" + ($(bilder).index(this)+1) + "</span>");
});
$(".klick").click(function() {
index=$(this).text();
$("#promo_slider").clearQueue().fadeOut(500,runIt);
});
function runIt() {
$(".blink").remove();
if(index==bilder.length) index=0;
diesbild="<a class=\"blink\" id=\"" + "promo_a" + index + "\" href=\"" + bilder[index][1]+ "\"><img src=\"./images/" + bilder[index][0]+ "\" alt=\"\" title=\"\" /></a>";
index++;
$("#promo_slider").append(diesbild).fadeIn(500).delay(5000).fadeOut(500, runIt);
}
runIt();
});
答案 0 :(得分:1)
我使用setTimeout()而不是delay()得到了更好的结果。 显然,stop()不会取消延迟。 来自文档:
.delay()方法最适合延迟排队的jQuery效果。因为它是有限的 - 例如,它没有提供取消延迟的方法 - .delay()不能替代JavaScript的本机setTimeout函数,这可能更适合某些用例。
演示片段,如下:
$(document).ready(function() {
var index = 0;
var loopTimer;
var bilder = [
["http://lorempixel.com/200/200/abstract/1/", "(a Link here)"],
["http://lorempixel.com/200/200/abstract/2/", "(a Link here)"],
["http://lorempixel.com/200/200/abstract/3/", "(a Link here)"],
["http://lorempixel.com/200/200/abstract/4/", "(a Link here)"],
["http://lorempixel.com/200/200/abstract/5/", "(a Link here)"],
["http://lorempixel.com/200/200/abstract/6/", "(a Link here)"]
];
$(bilder).each(function() {
$("#linkleiste").append("<span class=\"klick\">" + ($(bilder).index(this) + 1) + "</span>");
});
$(".klick").click(function() {
clearTimeout(loopTimer);
index = $(this).text() - 1;
runIt();
});
function runIt() {
if (index == bilder.length) index = 0;
diesbild = "<a class=\"blink\" id=\"" + "promo_a" + index + "\" href=\"" + bilder[index][1] + "\"><img src=\"" + bilder[index][0] + "\" alt=\"\" title=\"\" />" + (index + 1) + "</a>";
index++;
$("#promo_slider").fadeOut(500, function() {
$(this).html(diesbild).fadeIn(500);
loopTimer = setTimeout(runIt, 5000);
});
}
runIt();
});
.klick {
margin-left: 20px;
margin-right: 20px;
}
.klick:hover {
cursor: pointer;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script>
<div id="linkleiste"></div>
<div id="promo_slider"><span class="blink"></span></div>
这里也是jFiddle。