This question already has answers here:
How to stop/override a Jquery TimeOut function?
(4个答案)
6个月前关闭。
我有16个动态创建的带有背景图像的div。我有一个函数,其中我向每个背景图像不显示任何样式添加了样式,并阻止了我一遍又一遍地循环播放。
如果屏幕宽度小于1200像素且仅在重新加载/初始化时有效,则此功能当前有效。
我现在面临的最大问题是,当init的屏幕宽度大于1200px,并且我将其调整为1000px时,动画将无法开始。
我要完成的工作是,当我缩小尺寸并超过1200px时,显示块/无显示将适用于窗口大小: 1200px,则停止工作。
工作演示:https://codepen.io/Merdzanovich/pen/abbvPGv
有人可以帮忙吗?
码:
编辑:也许setInterval在这里更合适,因为您将要不断检查窗口大小:
(4个答案)
6个月前关闭。
我有16个动态创建的带有背景图像的div。我有一个函数,其中我向每个背景图像不显示任何样式添加了样式,并阻止了我一遍又一遍地循环播放。
如果屏幕宽度小于1200像素且仅在重新加载/初始化时有效,则此功能当前有效。
我现在面临的最大问题是,当init的屏幕宽度大于1200px,并且我将其调整为1000px时,动画将无法开始。
我要完成的工作是,当我缩小尺寸并超过1200px时,显示块/无显示将适用于窗口大小: 1200px,则停止工作。
工作演示:https://codepen.io/Merdzanovich/pen/abbvPGv
有人可以帮忙吗?
码:
(() => {
const hero = document.getElementById('hero');
if (!hero) {
return;
}
const shuffle = array => {
let currentIndex = array.length;
let temporaryValue, randomIndex;
while (0 !== currentIndex) {
randomIndex = Math.floor(Math.random() * currentIndex);
currentIndex -= 1;
// And swap it with the current element.
temporaryValue = array[currentIndex];
array[currentIndex] = array[randomIndex];
array[randomIndex] = temporaryValue;
}
return array;
};
const images = Array.from(Array(16).keys(), n => n + 1);
const shuffleArray = shuffle(images);
let imgArr = [];
let counter = 0;
function roll() {
imgArr.map(img => (img.style.display = 'none'));
imgArr[counter].style.display = 'block';
counter++;
if (counter === imgArr.length - 1) {
counter = 0;
}
setTimeout(() => roll(), 500);
}
const init = () => {
shuffleArray.forEach(image => {
let imageDiv = document.createElement('div');
imageDiv.className = `bg-image bg-image-bg${image}`;
hero.appendChild(imageDiv);
imgArr.push(imageDiv);
});
if (window.innerWidth < 1200) {
setTimeout(() => roll(), 0);
}
};
window.addEventListener('load', init);
})();
最佳答案
您将要使用clearTimeout
将settimeout保存到变量,以便可以在clearTimeout()调用中引用它
var myVar;
function myFunction() {
myVar = setTimeout(function(){ alert("Hello"); }, 3000);
}
function myStopFunction() {
clearTimeout(myVar);
}
编辑:也许setInterval在这里更合适,因为您将要不断检查窗口大小:
setInterval(function() {
if (window.innerWidth < 1200) {
// do the thing you want if its smaller than 1200
} else {
// do the other thing
}
}, 3000);
10-06 02:52