не работает clearInterval по Id
Здравствуйте!
Подскажите, пожалуйста, как решить проблему. После неоднократного выполнения интервала, Id которого сохранен в переменной intervalId, не срабатывает clearInterval(intervalId). Выводила с помощью console.log значение Id интервала после последнего его выполнения и непосредственно перед очисткой-они совпадают, но очистка все равно не срабатывает.
var clickHandler=function(event){
if(clickCount<10){
clearInterval(intervalId);
clickCount+=1;
$('#heading').text('Ваши очки: '+clickCount);
x-=3;
var intervalId=setInterval(moveHeading,x);
console.log(intervalId);
}
if(clickCount===10){
$('#heading').text('Вы победили!');
console.log(intervalId);
clearInterval(intervalId); //не работает!
}
}
$("h1").click(clickHandler);
|
tone4ka,
Пожалуйста, отформатируйте свой код! Для этого его можно заключить в специальные теги: js/css/html и т.п., например: [html run] ... минимальный код страницы с вашей проблемой [/html] О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting. |
tone4ka,
создайте переменную var intervalId вне clickHandler, а потом используйте в функции. |
tone4ka,
<!DOCTYPE html>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<style type="text/css">
</style>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script>
$(function() {
var intervalId, clickCount = 0, moveHeading = function() {
clickCount--;
$('#heading').text('Ваши очки: '+clickCount);
}, x = 500;
var clickHandler=function(event){
clearInterval(intervalId);
if(clickCount<10){
clickCount+=1;
$('#heading').text('Ваши очки: '+clickCount);
x-=3;
intervalId=setInterval(moveHeading,x);
}
if(clickCount===10){
$('#heading').text('Вы победили!');
}
}
$("h1").click(clickHandler);
});
</script>
</head>
<body>
<div id="heading"></div>
<h1>click</h1>
</body>
</html>
|
Спасибо! Исправила
|
она создана и равняется интервалу с временем повтора, действующим до первого клика(т.е. я постепенно уменьшаю время уже существующего интервала с каждым кликом в приведенной здесь функции и присваиваю переменной intervalId новое значение)
|
вот полная версия скрипта с пояснениями. Не помогает, она задана была
//Первоначальные отступы заголовка
var leftOffset=0;
var topOffset=0;
//устанавливаем функцию движения по траектории
var moveHeading=function(){
$('#heading').offset({left:leftOffset,top:topOffset});
if(leftOffset<200){if(topOffset===0){leftOffset++;}}
if(leftOffset>0){if(topOffset===200){leftOffset--;}}
if(leftOffset===200){if(topOffset<200){topOffset++;}}
if(leftOffset===0){if(topOffset>0){topOffset--;}}
}
var clickCount=0;//Счетчик кликов
x=30;//первоначальный интервал, с которым заголовок бегает по странице
var intervalId=setInterval(moveHeading,x); //Двигаем заголовок по ктраектории с интервалом 33мс
//устанавливаем функцию подсчета очков и ускорения движения по клику:
var clickHandler=function(event){
if(clickCount<10){
clearInterval(intervalId);//очистка интервала, действующего до первого выполнения функции clickHandler (33мс)
clickCount+=1; //счетчик кликов
$('#heading').text('Ваши очки: '+clickCount);//вывожу набранные очки в заголовок
x-=3;//уменьшаю время повтора интервала
var intervalId=setInterval(moveHeading,x);
console.log(intervalId);//проверяю значение Id первый раз
}
if(clickCount===10){
$('#heading').text('Вы победили!'); //заменяю значение заголовка на поздравление с победой
console.log(intervalId);//проверяю значение Id второй раз
clearInterval(intervalId); //не работает!
}
}
$("h1").click(clickHandler); //прилепляем функцию клика к заголовку страницы
|
tone4ka,
уберите var из строки 26!!! |
tone4ka, у тебя внутри функции
var clickHandler=function(event){}
Объявляется новая переменная intervalId... Цитата:
Почитай про область видимости переменных с var в JS. ;) https://learn.javascript.ru/var |
Спасибо большое!
|
| Часовой пояс GMT +3, время: 07:19. |