我有16个动态创建的带有背景图像的div。我有一个函数,其中我向每个背景图像不显示任何样式添加了样式,并阻止了我一遍又一遍地循环播放。
如果屏幕宽度小于1200像素且仅在重新加载/初始化时有效,则当前可用。
我现在面临的最大问题是,当屏幕宽度在初始化时大于1200px,并且我将其调整为1000px时,动画将无法开始。
我要完成的工作是,当我缩小尺寸并超过1200px时,显示块/无显示将适用于窗口大小:<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);
})();
答案 0 :(得分:0)
您将要使用clearTimeout
将您的settimeout保存到一个变量中,以便您可以在clearTimeout()调用中引用它
bins = len(Labels) + 1
编辑:也许setInterval在这里更合适,因为您将要不断检查窗口大小:
var myVar;
function myFunction() {
myVar = setTimeout(function(){ alert("Hello"); }, 3000);
}
function myStopFunction() {
clearTimeout(myVar);
}