Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 04.06.2020, 11:01
Интересующийся
Отправить личное сообщение для AMATORx Посмотреть профиль Найти все сообщения от AMATORx
 
Регистрация: 28.05.2020
Сообщений: 12

help - setTimeout
Как запустить код чтобы он работал не только по нажатию на старт а еще при первой загрузке страницы?
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>setInterval</title>
	<script src="set.js" defer>
		let ml = 0;
		document.getElementById('start').onclick = function move(){
			let blockOne = document.getElementById('one');
			ml = ml + 10;
			blockOne.style.marginLeft = ml + 'px';
			timer = setTimeout(move, 50);	
		}
		document.getElementById('stop').onclick = function(){
			clearTimeout(timer);
		}

	</script>
	<style>
		#one{
			width: 100px;
			height: 100px;
			background: blue;
		}
	</style>
</head>
<body>
	<div id="one"></div><br>
	<button id="stop">STOP</button>
	<button id="start">Start</button>
</body>
</html>
Ответить с цитированием
  #2 (permalink)  
Старый 04.06.2020, 11:10
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

<script src="set.js" defer>is-код</script> - это как понимать? А атрибут defer предназначен только для внешних скриптов.
Ответить с цитированием
  #3 (permalink)  
Старый 04.06.2020, 11:11
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

AMATORx,
let ml = 0, timer;
        function move(){
            let blockOne = document.getElementById('one');
            ml = ml + 10;
            blockOne.style.marginLeft = ml + 'px';
            timer = setTimeout(move, 50);
        }
        document.getElementById('start').onclick = move;
        document.getElementById('stop').onclick = function(){
            clearTimeout(timer);
        }
        onload = move;
Ответить с цитированием
  #4 (permalink)  
Старый 04.06.2020, 12:48
Интересующийся
Отправить личное сообщение для AMATORx Посмотреть профиль Найти все сообщения от AMATORx
 
Регистрация: 28.05.2020
Сообщений: 12

я просто сделал коп в <script> и забыл убрать src
Ответить с цитированием
  #5 (permalink)  
Старый 04.06.2020, 12:50
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от AMATORx
я просто сделал коп в <script> и забыл убрать src
Если при этом оставлен defer, то от него не будет толку, а в консоли будет ошибка, не будет на момент установки обработчика элемента, document.getElementById('start') вернет null.
Ответить с цитированием
  #6 (permalink)  
Старый 07.08.2020, 09:10
Аватар для Александр83
Аспирант
Отправить личное сообщение для Александр83 Посмотреть профиль Найти все сообщения от Александр83
 
Регистрация: 06.03.2017
Сообщений: 93

Доброго времени суток, подскажите пожалуйста как остановить setTimeout после первого обновления?

var start = setTimeout(function(){
location.href = '/info/company/';
}, 0);
clearTimeout(start);
Ответить с цитированием
  #7 (permalink)  
Старый 07.08.2020, 09:58
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,750

Поясните, что вы хотите сделать?
setTimeout срабатывает только один раз.
После обновления страницы он вообще не будет работать.
В вашем случае, по идее, обновления не должно происходить, т.к. clearTimeout(start), выполнится до location.href = '/info/company/'
Ответить с цитированием
  #8 (permalink)  
Старый 07.08.2020, 10:19
Аватар для Александр83
Аспирант
Отправить личное сообщение для Александр83 Посмотреть профиль Найти все сообщения от Александр83
 
Регистрация: 06.03.2017
Сообщений: 93

В моем случаи обновление происходит постоянно
var start = setTimeout(function(){
location.href = '/info/company/';
}, 1000);

каждую секунду,

я пытался написать clearTimeout(start);, но тогда действительно - обновление вообще не работает, нужно чтоб clearTimeout(start) срабатывал позже через примерно 2 секунды.
Ответить с цитированием
  #9 (permalink)  
Старый 07.08.2020, 10:35
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,750

setTimeout не может работать постоянно. Он работает только 1 раз.
Постоянно работает setInterval.
После того, как страница обновлена, уже ничего не будет. Это совсем новая страница с новым содержимым, с новыми функциями и переменными. Все старое, и переменные и события, поставленные в очередь пропадут.
Ответить с цитированием
  #10 (permalink)  
Старый 07.08.2020, 10:42
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

Сообщение от voraa
setTimeout не может работать постоянно. Он работает только 1 раз.
страница закольцована, видимо переход на саму себя. поэтому бесконечное обновление.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Можно ли применять setTimeout внутри цикла? MC-XOBAHCK Общие вопросы Javascript 12 27.04.2018 17:34
SetTimeOut анимация javascript thystruby Общие вопросы Javascript 1 15.09.2016 10:43
Зацикливание функции setTimeout MininAS Общие вопросы Javascript 19 14.10.2015 00:02
Передача контекста через setTimeout decadent jQuery 3 10.02.2011 19:01
setTimeout в браузере IE и Opera leha66 Javascript под браузер 2 13.12.2010 13:02