Javascript 淡出前更改图片-设置超时不起作用
我正在制作一个正在工作的照片滑块,但我在更改箭头时遇到问题。单击箭头时,图片应淡出、更改和新图片淡入,但我的代码先更改图片,然后再进行淡入动画。帮助Javascript 淡出前更改图片-设置超时不起作用,javascript,jquery,Javascript,Jquery,我正在制作一个正在工作的照片滑块,但我在更改箭头时遇到问题。单击箭头时,图片应淡出、更改和新图片淡入,但我的代码先更改图片,然后再进行淡入动画。帮助 var slidenumber = Math.floor(Math.random() * 5) + 1; var timerforslide = 0; var timerforfade = 0; function hideSlide() { $("#slide").stop(); $("#slide").fadeOut(500);
var slidenumber = Math.floor(Math.random() * 5) + 1;
var timerforslide = 0;
var timerforfade = 0;
function hideSlide() {
$("#slide").stop();
$("#slide").fadeOut(500);
}
function changeSlide() {
resetSlideTimers();
slidenumber++;
if (slidenumber > 5) slidenumber = 1;
if (slidenumber<1) slidenumber = 5;
timerforfade = setTimeout("hideSlide()", 4500);
timerforslide = setTimeout("changeSlide()", 5000);
$("#slide").fadeIn(500);
var file = "<img src=\"img/slide" + slidenumber + ".png\" width =\"100%\" height=\"300px\" /> "
document.getElementById("slide").innerHTML = file;
}
function resetSlideTimers() {
clearTimeout(timerforfade);
clearTimeout(timerforslide);
}
function nextSlide() {
$("#slide").stop();
resetSlideTimers();
hideSlide();
setTimeout(1000, changeSlide());
}
function previousSlide() {
$("#slide").stop();
resetSlideTimers();
slidenumber = slidenumber - 2;
hideSlide();
setTimeout(500, changeSlide());
}
var slidenumber=Math.floor(Math.random()*5)+1;
var timerforslide=0;
var timerforfade=0;
函数hideSlide(){
$(“#幻灯片”).stop();
美元(“#幻灯片”)。淡出(500);
}
函数changeSlide(){
重置SlideTimes();
slidenumber++;
如果(slidenumber>5)slidenumber=1;
如果(slidenumber创建setTimeout
调用时,第一个参数是匿名函数或对另一个函数的引用。第二个参数是调用该函数所需的时间
因此,您的两个函数调用设置如下:
timerforfade = setTimeout("hideSlide()", 4500);
timerforslide = setTimeout("changeSlide()", 5000);
无效,因为您传入的是字符串
而不是函数
。您不想使用括号,因为括号将立即调用函数,而不等待实际的时间间隔发生。请将其更改为:
timerforfade = setTimeout(hideSlide, 4500);
timerforslide = setTimeout(changeSlide, 5000);
记住,它们总是匿名函数或对函数的引用。除非在该执行行上立即调用括号,否则不要使用括号
在nextSlide
和previousSlide
中创建的setTimeout
被反转并带有括号。将它们分别更改为:
//Next slide function
setTimeout(changeSlide, 1000);
//Previous slide function
setTimeout(changeSlide, 500);
除此之外,我现在无法验证您的逻辑是否正确,但这些是一些即时错误。您的setTimeout语法在三个位置处于禁用状态:
timerforfade = setTimeout("hideSlide()", 4500);
timerforslide = setTimeout("changeSlide()", 5000);
应为(删除括号和引号):
及
应为(更改顺序并删除括号)
setTimeout有两个参数,第一个参数是超时过期时应调用的函数,第二个参数是以毫秒为单位的超时。如果包含括号,将立即调用该函数,这就是为什么幻灯片更改发生在淡出之前:
函数alertFirst(){
log(“我应该是第一”);
}
函数alertSecond(){
log(“我应该是第二”);
}
设置超时(alertFirst,500);
设置超时(alertSecond(),5000);
// ^
// |
//注意括号
timerforfade = setTimeout(hideSlide, 4500);
timerforslide = setTimeout(changeSlide, 5000);
setTimeout(1000, changeSlide());
setTimeout(changeSlide, 500);