Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.03.2010, 16:45
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

Ускорение при выполнении 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), его скорость увеличивается. Почему???
Ответить с цитированием
  #2 (permalink)  
Старый 16.03.2010, 16:54
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 09.07.2008
Сообщений: 3,873

clearInterval(timer)
Ответить с цитированием
  #3 (permalink)  
Старый 16.03.2010, 16:54
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Потому что у вас clearInterval странный.
Ответить с цитированием
  #4 (permalink)  
Старый 16.03.2010, 22:07
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

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)
}

Но вопрос "почему?" для меня остался открытым! Почему, при уже запущенном таймере, установка нового ускоряет процесс??? Частота что, суммируется что ли???
Ответить с цитированием
  #5 (permalink)  
Старый 17.03.2010, 00:34
Любитель
Отправить личное сообщение для JsLoveR Посмотреть профиль Найти все сообщения от JsLoveR
 
Регистрация: 16.12.2009
Сообщений: 422

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

Последний раз редактировалось JsLoveR, 17.03.2010 в 00:36.
Ответить с цитированием
  #6 (permalink)  
Старый 17.03.2010, 07:24
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от Sweet
Почему, при уже запущенном таймере, установка нового ускоряет процесс???
Так стало два таймера, функция стала вызываться в два раза чаще.
Ответить с цитированием
  #7 (permalink)  
Старый 17.03.2010, 09:24
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

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


Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Снятие затемнения с экрана при получении ответа от php срипта с помощью setInterval roma86 jQuery 0 16.08.2009 11:39
Проверка статуса checkbox при xmlhttprequest vvsh AJAX и COMET 3 06.08.2009 14:51
Вывод данных единожды, при открытии окна? Ggorsh Events/DOM/Window 1 28.04.2009 00:04
Проблема в document.write при использовании setInterval() GOll Общие вопросы Javascript 21 06.10.2008 16:38
Не отрабатывает событие onmouseout при внедрении нового слоя ilshat Элементы интерфейса 3 28.07.2008 05:27