Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Ускорение при выполнении setInterval.. (https://javascript.ru/forum/dom-window/8247-uskorenie-pri-vypolnenii-setinterval.html)

Sweet 16.03.2010 17:45

Ускорение при выполнении setInterval..
 
Собственно, пример:
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title>Документ</title>
<style type="text/css">
#visibleField{
	position: absolute;
	left: 200px;
	top: 200px;
	width: 300px;
	height: 200px;
	outline: double #000 4px;
	overflow: hidden;
}
#conteiner{
	position: absolute;
	top: 0px;
	left: 0px;
}
.layer{
	position: absolute;
	width: 300px;
	height: 200px;
}
#layer1{
	background-color: #F00;
	left: 0px;
	top: 0px;
}
#layer2{
	background-color: #0F0;
	left: 300px;
	top: 0px;
}
</style>
</head>

<body>
<div id="visibleField"><div id="conteiner">
	<div id="layer1" class="layer">&nbsp;</div>
    <div id="layer2" class="layer">&nbsp;</div>
</div></div>
<script type="text/javascript">

var timer, pos = 0, dir, movingTo
function moving() {
	if(pos==movingTo) {
		timer = clearInterval(moving)
	} else {
		pos = pos+2*dir
		document.getElementById('conteiner').style.left=pos+'px'
	}
}
document.getElementById('layer1').onclick = function() {
	dir = -1
	movingTo = -300
	timer = setInterval(moving, 25)
}
document.getElementById('layer2').onclick = function(e) {
	dir = 1
	movingTo = 0
	timer = setInterval(moving, 50)
}

</script>
</body>

Так вот, при каждом новом выполнении setInterval(moving, 50), его скорость увеличивается. Почему???:help:

Octane 16.03.2010 17:54

clearInterval(timer)

Kolyaj 16.03.2010 17:54

Потому что у вас clearInterval странный.

Sweet 16.03.2010 23:07

clearInterval реально "странным" был:) Только это вовсе не ответ на мой вопрос!!! Я смог убрать ускорение, добавив еще пару clearInterval'ов:
document.getElementById('layer1').onclick = function() {
	clearInterval(timer)
	dir = -1
	movingTo = -300
	timer = setInterval(moving, 25)
}
document.getElementById('layer2').onclick = function(e) {
	clearInterval(timer)
	dir = 1
	movingTo = 0
	timer = setInterval(moving, 25)
}

Но вопрос "почему?" для меня остался открытым! Почему, при уже запущенном таймере, установка нового ускоряет процесс??? Частота что, суммируется что ли???

JsLoveR 17.03.2010 01:34

Цитата:

Сообщение от Sweet (Сообщение 47924)
Почему, при уже запущенном таймере, установка нового ускоряет процесс??? Частота что, суммируется что ли???

Потому что Вы добавляете новый набор интервалов, в таком случае Вам нужно, где-то хранить все указатели на интервалы и удалять все сразу.

Kolyaj 17.03.2010 08:24

Цитата:

Сообщение от Sweet
Почему, при уже запущенном таймере, установка нового ускоряет процесс???

Так стало два таймера, функция стала вызываться в два раза чаще.

Sweet 17.03.2010 10:24

Цитата:

Сообщение от Kolyaj (Сообщение 47963)
Так стало два таймера, функция стала вызываться в два раза чаще.

Понял:) Спасибо!


Часовой пояс GMT +3, время: 07:21.