gpt4 book ai didi

javascript - 当我添加点击事件时,我的 javascript 函数重复运行(?)

转载 作者:行者123 更新时间:2023-11-29 20:10:54 24 4
gpt4 key购买 nike

免责声明:我正在尝试学习 javascript。我不是一个聪明人。

因此,我制作了一个 Jquery 图像 slider 。我很自豪。有用。它加载图像,并日复一日地逐日显示它们。生活是美好的。

然后我想给 slider 添加导航,黑暗降临了我的小王国。

当我单击其中一个按钮时,我调用我的 LoadSlide 函数传递适当的索引 LoadSlide(NewIndex)。然后它运行该函数,但它还会使用标准 LoadSlide(index+1) 参数继续运行该函数。因此,无需单击任何按钮,它就会像这样运行:

slide1 -> (6500ms) -> slide2 -> (6500ms) -> slide3 -> (6500ms) -> slide1 ...

然后我单击一个按钮(幻灯片 2),另一个循环开始并行:

slide1 -> (6500ms) -> slide2 -> (6500ms) -> slide3 -> (6500ms) -> slide1 ...
[click] slide2 -> (6500ms) -> slide3 -> (6500ms) -> slide1 -> (6500ms)...

请告诉我,传说的守护者。如果杀死这条龙,你将享受许多少女和无尽的啤酒。

可怜的代码在这里:http://jsfiddle.net/V6svT/2/

最佳答案

您遇到的问题是动画时间和点击触发器之间的同步。当用户单击按钮时,您也不会取消下一个预定操作。假设我们在幻灯片 2 上,这意味着已经有一个计时器应该显示幻灯片 3,当我单击按钮 1 时,第一个计时器将继续运行以显示幻灯片 3,并且将创建另一个计时器来显示幻灯片 1。我解决了这个问题通过按住计时器并清除它。

另一个问题是,在您的广告中:fadeIn 回调您正在为按钮添加点击监听器,我认为这会添加许多监听器,因此当您单击两次时,您将有相同的监听器附加两次,因此在触发时调用两次。这是我这边的更正作品。可能还有其他问题。记住点击和转换之间的时间。例如,如果您将 fadeIn 时间设置为与 setTimeout 相同的时间,您将遇到同样的问题。

$(function () {
//edit
var timer='undefined';

var slides = new Array();
slides[0] = 'http://i.imgur.com/UwRVo.png';
slides[1] = 'http://i.imgur.com/wv08B.png';
slides[2] = 'http://i.imgur.com/MlUbx.png';

var max = $(slides).length;

var isBottom = false;

makeSlideBtns(max);

if(max>0)
{
LoadSlide(0,max);

}

function LoadSlide(index,max) {
clearTimeout(timer);
if(index<max)
{
var el0 = $("#slidebottom");
var el1 = $("#slideover");
var sbtn = $("#slidebtns li")[index];
var img = new Image();
$(sbtn).css('background-color', '#000');

$(img).load(function () {
$(this).css('display','none');
if(isBottom == true)
{
$(el1).html(this);
$(el1).css('z-index', '3');
$(el0).css('z-index', '2');
console.log("el1 " + index);

} else {
$(el0).html(this);
$(el1).css('z-index', '2');
$(el0).css('z-index', '3');
console.log("el0 " + index);

}
isBottom = !isBottom;

function nextSlide () {
LoadSlide(index+1,max);
console.log("sbtn: " + sbtn);
$(sbtn).css('background-color', '#fff');
};

$(this).fadeIn(2000,function() {
timer=setTimeout(nextSlide, 5000);
});


}).error(function () {
LoadSlide(index+1,max);
}).attr('src', slides[index]);

} else {
LoadSlide(0,max)
}
}

function makeSlideBtns (max) {

for(i=0; i<max; i++) {
var num = i + 1;
$("#slidebtns").append('<li><a>' + num + '</a></li>');
}
};

//add this in your loop will add more as you click
$("#slidebtns li").click(function () {
$("#slidebtns li").css('background-color', '#fff');
var i=$(this).index();
LoadSlide(i,max);
return false;
});

});

关于javascript - 当我添加点击事件时,我的 javascript 函数重复运行(?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9955311/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com