Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 淡出前更改图片-设置超时不起作用_Javascript_Jquery - Fatal编程技术网

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);