gpt4 book ai didi

javascript - clearInterval 不会清除后台更改脚本中的间隔

转载 作者:行者123 更新时间:2023-12-02 19:56:26 27 4
gpt4 key购买 nike

我有这个小脚本,可以通过淡入/淡出效果更改背景图像:

/*controla la velocidad de la animación*/
var slideshowSpeed = 1000;
var transitionSpeed = 2000;
var timeoutSpeed = 500;

/*No tocar*/
var interval;
var activeContainer = 1;
var currentImg = 0;
var animating = false;
var navigate = function(direction) {
// Si ya estamos navegando, entonces no hacemos nada!
if(animating) {
return;
}
currentImg++;
if(currentImg == photos.length + 1) {
currentImg = 1;
}
// Tenemos dos, uno en el que tenemos la imagen que se ve y otro d?nde tenemos la imagen siguiente
var currentContainer = activeContainer;
// Esto puedo optimizarlo con la funci?n modulo, y cambiar 1 y 2 por 0 y 1-> active = mod2(active + 1)
if(activeContainer == 1) {
activeContainer = 2;
} else {
activeContainer = 1;
}
// hay que decrementar el ?ndice porque empieza por cero
cargarImagen(photos[currentImg - 1], currentContainer, activeContainer);
};
var currentZindex = -1;
var cargarImagen = function(photoObject, currentContainer, activeContainer) {
animating = true;
// Nos aseguramos que el nuevo contenedor está siempre dentro del cajon
currentZindex--;
/*if(currentZindex < 0) currentZindex=1;*/
// Actualizar la imagen
$("#headerimg" + activeContainer).css({
"background-image" : "url(" + photoObject + ")",
"display" : "block",
"z-index" : currentZindex
});
// FadeOut antigua
// Cuando la transición se ha completado, mostramos el header
$("#headerimg" + currentContainer).fadeOut(transitionSpeed,function() {
setTimeout(function() {

animating = false;
}, timeoutSpeed);
});
};

function iniciarPase(){
var animating = false;
//ver la siguente
navigate("next");
//iniciar temporizador que mostrará las siguientes
interval = setInterval(function() {
navigate("next");
}, slideshowSpeed);
}
function pararPase(){
var animating = true;
console.log('paramos la animación');
interval = clearInterval(interval);
}
/*Gestion de pase de imágenes de fondo*/
$(document).ready(function() {
iniciarPase();
});

但是函数 pararPase()其中包含 clearInterval表达式似乎不起作用,即使它在 <body onload="pararPase()">

知道我缺少什么吗?

最佳答案

你的基本逻辑工作得很好,这里是 live test case .

因此,您很可能错误地绑定(bind)了 pararPase,例如,当按钮尚不存在时,尝试在 document.ready() 外部绑定(bind)为点击处理程序 - updated test case来证明这一点。

另一个选项是您的代码中存在其他错误,请检查 Chrome JavaScript 控制台以查看是否属于这种情况。

正如其他人在评论中提到的,将clearInterval的返回值分配回变量是没有意义的,但没有害处:变量只会具有“未定义”值。

编辑:iniciarPase有可能被多次调用,这将导致多个计时器,其中只有最后一个计时器会被清除。因此,为了安全起见,请将其添加到您的函数中:(这实际上是 Diode 在他的回答中试图说的)

function iniciarPase(){
var animating = false;
//ver la siguente
navigate("next");
//iniciar temporizador que mostrará las siguientes
if (interval)
clearInterval(interval);
interval = setInterval(function() {
navigate("next");
}, slideshowSpeed);
}

关于javascript - clearInterval 不会清除后台更改脚本中的间隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8560349/

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