Я реализую слайд-шоу изображений, используя чистый javascript, поэтому мне нужно решение только в javascript.setInterval: сбой при изменении задержки нажатием кнопки
У меня есть набор из 5 изображений, и я скрываю и показываю изображения с помощью setInterval.
У меня есть список выбора, который используется для изменения скорости изменения изображений, то есть задержки в setInterval.
Я почти осуществил слайд-шоу, но я испытываю сбой при изменении скорости смены изображений, и я не могу найти решение для запуска слайд-шоу на загрузке страницы.
<!DOCTYPE html>
<html>
<head>
<title></title>
<style>
.item{
width: 1024px;
height: auto;
display: none;
}
.active{
width: 1024px;
height: auto;
display: block;
}
</style>
</head>
<body>
<select id="speedo">
<option value="1">1 sec</option>
<option value="2">2 sec</option>
<option value="3">3 sec</option>
<option value="4">4 sec</option>
<option value="5">5 sec</option>
</select>
<div class="container">
<img class="item" src="http://i58.tinypic.com/xp4isn.jpg" data-index='0'>
<img class="item" src="http://i59.tinypic.com/212u39z.jpg" data-index='1'>
<img class="item" src="http://i61.tinypic.com/63vbc2.jpg" data-index='2'>
<img class="item" src="http://i60.tinypic.com/wb2iaq.jpg" data-index='3'>
<img class="item" src="http://i60.tinypic.com/ejvqxe.jpg" data-index='4'>
</div>
<script>
var index=0;
var elemarray = document.querySelectorAll('.item');
var speedElement = document.getElementById("speedo");
window.delay = 1000;
speedElement.addEventListener('change',function(){
if(timer) window.clearInterval(timer);
window.delay = parseInt(this.value)*1000;
var timer = setInterval("rotate()", window.delay);
})
function rotate(){
console.log(delay);
index++;
if(index==5) index = 0;
for(var i=0, len = elemarray.length; i<len; i++){
(elemarray[i].getAttribute('data-index')==index)?elemarray[i].setAttribute('class','active') : elemarray[i].setAttribute('class','item');
}
}
</script>
</body>
</html>
Вопрос 1. Как избавиться от сбоя?
Вопрос 2. Как начать слайд-шоу при загрузке страницы?
Какой у вас «глюк»? Пожалуйста, опишите вашу проблему точно – fjc
Не используйте 'setTimeout' и' setInterval' со строками, потому что это похоже на evil 'eval'! Вместо этого используйте функции: setTterval (rotate, window.delay) ' – Oriol