Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.08.2016, 02:51
Интересующийся
Отправить личное сообщение для Misterdark Посмотреть профиль Найти все сообщения от Misterdark
 
Регистрация: 16.04.2016
Сообщений: 18

Кроссбраузерность таймеров
Имеется данный код:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Lesson 9</title>
<style>

</style>
<script>
  var $click=0;
  var $dblclick=0;
  var $mouseover=0;
  var $mouseout=0;
  var $mouseenter=0;
  var $mouseleave=0;
  var $mouseup=0;
  var $mousedown=0;
  var $contextmenu=0;
  var $keydown=0;
  var $keyup=0;
  var $keypress=0;
  var $change=0;
  var $focus=0;
  var $blur=0;
  var $tim1;
  var $tim2;
  

  function ShowAll()
  { document.getElementById('div2').innerHTML='click: '+$click+'<br>'+
                                             'dblclick: '+$dblclick+'<br>'+
                                             'mouseover: '+$mouseover+'<br>'+
                                             'mouseout: '+$mouseout+'<br>'+
                                             'mouseenter: '+$mouseenter+'<br>'+
                                             'mouseleave: '+$mouseleave+'<br>'+
                                             'mousedown: '+$mousedown+'<br>'+
                                             'mouseup: '+$mouseup+'<br>'+
                                             'contextmenu: '+$contextmenu+'<br><hr>'+
                                             'keydown: '+$keydown+'<br>' +
                                             'keyup: '+$keyup+'<br>' +
                                             'keypress: '+$keypress+'<br>'+
											 'change: '+$change+'<br>'+
											 'focus: '+$focus+'<br>'+
											 'blur: '+$blur+'<br>';
                                             
                                         
  }
  function my_click($event) {
                             $mouseover++;
							 $mouseout++;
							 $mouseenter++;
							 $mouseleave++;
							 $dblclick++;
							 $mousedown++;
							 $contextmenu++;
							 $keyup++;
							 $keydown++;
                             $click++;
							 $keypress++;
							 $change++;
							 $focus++;
							 $blur++;
							 $mouseup++;
}
  function bgcolor() {
    document.getElementById('div2').style="background-color:yellow;"
  } 
  function single_tim($event) {
                                   $tim1=setTimeout("bgcolor();",5000);
                                   $event.preventDefault();
                                  }
  function tick() {
  my_click(event);
  ShowAll();
  $tim2 = setTimeout(tick, 1000);
}
</script>
</head>
<body>
<div id="div1" style="border: 1px solid black;">
  <input type="button" id="inp1" value="Запустить интервальный таймер" onClick="$tim2 = setTimeout(tick(), 1000);">
  <input type="button" value="Остановить  интервальный таймер" onClick="clearTimeout($tim2)">
  <input type="button" id="inp2" value="Запустить одиночный таймер(через 5 сек)" onClick="single_tim(event)">
  <input type="button" value="Остановить одиночный таймер" onClick="clearTimeout($tim1)">
</div>
 <div id="div2" style="border: 1px solid black;">
 </div>
</body>
</html>

Он по щелчку запускает таймеры,которые выводят возрастающие числа и меняют фон с задержкой в 5 секунд,а также убивают эти таймеры соответственно. В Google Chrome все замечательно работает,в Mozilla работает только изменение фона,в IE-только настакивание счетчика. Я использовал всего две функции-setTimeout и clearTimeout,однако корректно программа работает только в Google Chrome
Ответить с цитированием
  #2 (permalink)  
Старый 17.08.2016, 09:23
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

Для начала поменяй вызовы функций в калбеках на функции.

setTimeout(tick(), 1000) - setTimeout(tick, 1000)

$tim1=setTimeout("bgcolor();",5000); - $tim1=setTimeout(bgcolor,5000);

Затем забудь про всю эту кашу и езжай на пляж.
Ответить с цитированием
  #3 (permalink)  
Старый 17.08.2016, 13:34
Интересующийся
Отправить личное сообщение для Misterdark Посмотреть профиль Найти все сообщения от Misterdark
 
Регистрация: 16.04.2016
Сообщений: 18

Заменил. Та же ситуация,в Chrome работает замечательно,в остальных-через жопу
Ответить с цитированием
  #4 (permalink)  
Старый 17.08.2016, 13:38
Интересующийся
Отправить личное сообщение для Misterdark Посмотреть профиль Найти все сообщения от Misterdark
 
Регистрация: 16.04.2016
Сообщений: 18

Если бы мог,с радостью забыл бы про все это скриптоблудие как страшный сон,но увы,такой возможности у меня нет
Ответить с цитированием
  #5 (permalink)  
Старый 17.08.2016, 14:02
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

Ну посмотри хотя бы в консолях тех браузеров что-то может быть написано про ошибки или вроде того.

Ты хочешь сказать эта фантасмагория какой-то рабочий код?
Ответить с цитированием
  #6 (permalink)  
Старый 17.08.2016, 14:07
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

Запустить интервальный таймер - ReferenceError: event is not defined
gavno.html:77:2

Вот уже стало яснее.
Ответить с цитированием
  #7 (permalink)  
Старый 17.08.2016, 14:14
Профессор
Отправить личное сообщение для warren buffet Посмотреть профиль Найти все сообщения от warren buffet
 
Регистрация: 08.07.2016
Сообщений: 1,332

Работает твоя бнопня, но желтый фон ты увидишь когда div наполнится каким-то содержанием, или задай ему минимальный размер.

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Lesson 9</title>
<style>

</style>
<script>

var $click=0;
var $dblclick=0;
var $mouseover=0;
var $mouseout=0;
var $mouseenter=0;
var $mouseleave=0;
var $mouseup=0;
var $mousedown=0;
var $contextmenu=0;
var $keydown=0;
var $keyup=0;
var $keypress=0;
var $change=0;
var $focus=0;
var $blur=0;
var $tim1;
var $tim2;
  

function ShowAll(){
	document.getElementById('div2').innerHTML=
	'click: '+$click+'<br>'+
	'dblclick: '+$dblclick+'<br>'+
	'mouseover: '+$mouseover+'<br>'+
	'mouseout: '+$mouseout+'<br>'+
	'mouseenter: '+$mouseenter+'<br>'+
	'mouseleave: '+$mouseleave+'<br>'+
	'mousedown: '+$mousedown+'<br>'+
	'mouseup: '+$mouseup+'<br>'+
	'contextmenu: '+$contextmenu+'<br><hr>'+
	'keydown: '+$keydown+'<br>' +
	'keyup: '+$keyup+'<br>' +
	'keypress: '+$keypress+'<br>'+
	'change: '+$change+'<br>'+
	'focus: '+$focus+'<br>'+
	'blur: '+$blur+'<br>';
}

function my_click() {
	$mouseover++;
	$mouseout++;
	$mouseenter++;
	$mouseleave++;
	$dblclick++;
	$mousedown++;
	$contextmenu++;
	$keyup++;
	$keydown++;
	$click++;
	$keypress++;
	$change++;
	$focus++;
	$blur++;
	$mouseup++;
}

function bgcolor() {
	document.getElementById('div2').style="background-color:yellow;"
} 

function single_tim() {
	$tim1=setTimeout(bgcolor,5000);
}

function tick() {
	my_click();
	ShowAll();
	$tim2 = setTimeout(tick, 1000);
}

</script>
</head>
<body>
<div id="div1" style="border: 1px solid black;">

  <input type="button" id="inp1" value="Запустить интервальный таймер" onClick="$tim2 = setTimeout(tick, 1000);">
  
  <input type="button" value="Остановить интервальный таймер" onClick="clearTimeout($tim2)">
  
  <input type="button" id="inp2" value="Запустить одиночный таймер(через 5 сек)" onClick="single_tim()">
  
  <input type="button" value="Остановить одиночный таймер" onClick="clearTimeout($tim1)">
  
</div>
<div id="div2" style="border: 1px solid black;"></div>
</body>
</html>


Расскажи в качестве награды мне, что это за эпидерсия с пердимоноклем?
Ответить с цитированием
  #8 (permalink)  
Старый 17.08.2016, 14:19
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

Misterdark,
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Lesson 9</title>
<style>

</style>
<script>
  var $click=0;
  var $dblclick=0;
  var $mouseover=0;
  var $mouseout=0;
  var $mouseenter=0;
  var $mouseleave=0;
  var $mouseup=0;
  var $mousedown=0;
  var $contextmenu=0;
  var $keydown=0;
  var $keyup=0;
  var $keypress=0;
  var $change=0;
  var $focus=0;
  var $blur=0;
  var $tim1;
  var $tim2;


  function ShowAll()
  { document.getElementById('div2').innerHTML='click: '+$click+'<br>'+
                                             'dblclick: '+$dblclick+'<br>'+
                                             'mouseover: '+$mouseover+'<br>'+
                                             'mouseout: '+$mouseout+'<br>'+
                                             'mouseenter: '+$mouseenter+'<br>'+
                                             'mouseleave: '+$mouseleave+'<br>'+
                                             'mousedown: '+$mousedown+'<br>'+
                                             'mouseup: '+$mouseup+'<br>'+
                                             'contextmenu: '+$contextmenu+'<br><hr>'+
                                             'keydown: '+$keydown+'<br>' +
                                             'keyup: '+$keyup+'<br>' +
                                             'keypress: '+$keypress+'<br>'+
                       'change: '+$change+'<br>'+
                       'focus: '+$focus+'<br>'+
                       'blur: '+$blur+'<br>';


  }
  function my_click($event) {
                             $mouseover++;
               $mouseout++;
               $mouseenter++;
               $mouseleave++;
               $dblclick++;
               $mousedown++;
               $contextmenu++;
               $keyup++;
               $keydown++;
                             $click++;
               $keypress++;
               $change++;
               $focus++;
               $blur++;
               $mouseup++;
}
  function bgcolor() {
    document.getElementById('div2').style="background-color:yellow;"
  }
  function single_tim($event) {
                                   $tim1=setTimeout(bgcolor,5000);
                                   $event.preventDefault();
                                  }
  function tick(event) {
  my_click(event);
  ShowAll();
  $tim2 = setTimeout(tick, 1000);
}
</script>
</head>
<body>
<div id="div1" style="border: 1px solid black;">
  <input type="button" id="inp1" value="Запустить интервальный таймер" onClick="$tim2 = setTimeout(tick, 1000);">
  <input type="button" value="Остановить  интервальный таймер" onClick="clearTimeout($tim2)">
  <input type="button" id="inp2" value="Запустить одиночный таймер(через 5 сек)" onClick="single_tim(event)">
  <input type="button" value="Остановить одиночный таймер" onClick="clearTimeout($tim1)">
</div>
 <div id="div2" style="border: 1px solid black;">
 </div>
</body>
</html>
Ответить с цитированием
  #9 (permalink)  
Старый 17.08.2016, 15:44
Интересующийся
Отправить личное сообщение для Misterdark Посмотреть профиль Найти все сообщения от Misterdark
 
Регистрация: 16.04.2016
Сообщений: 18

Блин,точно же,вот я валенок.Эти ивенты еще с прошлой попытки остались,я их и не заметил.
Ответить с цитированием
  #10 (permalink)  
Старый 17.08.2016, 15:54
Интересующийся
Отправить личное сообщение для Misterdark Посмотреть профиль Найти все сообщения от Misterdark
 
Регистрация: 16.04.2016
Сообщений: 18

Сообщение от warren buffet Посмотреть сообщение
Расскажи в качестве награды мне, что это за эпидерсия с пердимоноклем?
Таймеры прохожу,задание тут мне дали,сделать так чтобы можно было убивать все таймеры,создающиеся по событию,потому что если задать создание setInterval по щелчку,за несколько щелчков можно создать много одновременных таймеров,а clearInterval($TimerId),убьет только первый созданный,остальные будут продолжать работать и их никак не отключить. Вот я и изобрёл велосипед. Эти ивенты еще с прошлого раза остались,когда таймер планировалось убивать правой кнопкой мыши. Ну я и ткнул event.preventDefault,чтобы контекстное меню каждый раз не выскакивало. Потом я решил перенести все на кнопки,а ивенты так и оставил,хотя они уже нафиг там не нужны
Ответить с цитированием
Ответ


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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
100-200 уникальных таймеров на одной странице. Aeliot Элементы интерфейса 36 30.06.2013 18:59
Несколько таймеров на одной странице. Pothead Общие вопросы Javascript 1 27.05.2013 08:24
кроссбраузерность elizaveta199309 Общие вопросы Javascript 3 05.01.2013 11:46
кроссбраузерность в хроме, комодо драгон и сафари apostol roman Общие вопросы Javascript 2 06.03.2011 15:03
Кроссбраузерность JavaScript Раман Javascript под браузер 16 14.04.2010 12:44