Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 19.05.2017, 11:01
Новичок на форуме
Отправить личное сообщение для skvo.kiril@yandex.ru Посмотреть профиль Найти все сообщения от skvo.kiril@yandex.ru
 
Регистрация: 19.05.2017
Сообщений: 3

Почему так работает setInterval?
#circle_hover{
	position: relative;
	width: 160px;
	height: 160px;
}
circle {
  fill: rgba(0,0,0,0);
  stroke: #eee;
  stroke-width: 15;
  stroke-dasharray: 408px 408px;
}
circle:nth-child(2n) {
  fill: rgba(0,0,0,0);
  stroke: #30bae7;
  stroke-width: 15;
}
<div id="circle_hover"></div>

var timerfps;
var timersec;
var fps = 33.33;
var ipr = 0;
var timer = 3000;
var valEl = 0;
var circle_hover = document.getElementById('circle_hover');
		animate()
	function animate(){
	        circle_hover.innerHTML = '<svg width="153" height="153"><circle transform="rotate(-90)" r="65" cx="-80" cy="80" /><circle transform="rotate(-90)" style="stroke-dasharray:'+valEl+'px 408px;" r="65" cx="-80" cy="80" /></svg>';
	        		
	}

	function func(){
		ipr += 1;
		valEl = ipr*408/100;
		console.log(ipr);
   /* animate()*/
	}
	circle_hover.onmouseover = function() {
	    timerfps = setInterval(func, 1000/fps);
		timersec = setTimeout(function() {clearInterval(timerfps);}, timer);
	};

	circle_hover.onmouseout = function() {
		ipr = 0;
		clearTimeout(timersec);
		clearInterval(timerfps);
	};

onmouseover на единственом обекты в HTML. Который запускает setInterval, тот вызывает функцию func, с указанным промежутком времени, и onmouseout который очищает setInterval, если раскоментить вызов финкции animate тот что закоментирован, начинается не привальное выполнение setInterval.

Тут то же самое но функцию animate() вызываем через setInterval
jsfiddle.net/esr0ssja/2 работает setInterval как надо, а если раскоментить две строки jsfiddle.net/esr0ssja/3 то сам setInteval начинает вести себя не заданный промежуток времени, и не отрабатывает setTimeout, который должен прерывать setInteval т.е. очищать celarInteval. Все это наглядно видно в консоли

Последний раз редактировалось skvo.kiril@yandex.ru, 19.05.2017 в 11:11.
Ответить с цитированием
  #2 (permalink)  
Старый 19.05.2017, 11:05
Новичок на форуме
Отправить личное сообщение для skvo.kiril@yandex.ru Посмотреть профиль Найти все сообщения от skvo.kiril@yandex.ru
 
Регистрация: 19.05.2017
Сообщений: 3

Та же ошибка
http://jsfiddle.net/esr0ssja/4/ Анолагично себе ведет если я пытаюсь вызвать функцию animate в самой func
и как надо http://jsfiddle.net/esr0ssja/6/

Последний раз редактировалось skvo.kiril@yandex.ru, 19.05.2017 в 11:12.
Ответить с цитированием
  #3 (permalink)  
Старый 19.05.2017, 12:29
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

skvo.kiril@yandex.ru,
setInterval - не нужен и вреден в 99.9%, а в анимации тем более.
и чтобы анимировать стиль, надо анимировать стиль, а не весь тег целиком.
или setTimeout или что лучше requestAnimationFrame
и прочесть это https://learn.javascript.ru/js-animation
Ответить с цитированием
  #4 (permalink)  
Старый 24.05.2017, 12:44
Новичок на форуме
Отправить личное сообщение для skvo.kiril@yandex.ru Посмотреть профиль Найти все сообщения от skvo.kiril@yandex.ru
 
Регистрация: 19.05.2017
Сообщений: 3

спасибо...
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не работает console.log.apply(this,arguments) - Почему? Почемучкин Javascript под браузер 9 31.10.2014 17:17
Объясните, почему так происходит ak-o jQuery 12 12.07.2013 12:32
Почему то работает, то нет? gyunduz Общие вопросы Javascript 0 22.01.2011 16:08
Анимация. Помогите понять почему не работает. kadurban jQuery 4 08.07.2010 20:50
Почему это работает? (инклуд JS в JS) Василий Б. Общие вопросы Javascript 4 11.06.2010 12:41