powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Создание функции в которой запускается таймер
7 сообщений из 7, страница 1 из 1
Создание функции в которой запускается таймер
    #38215284
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Провожу эксперименты над двумя <DIV> тегами с идентификаторами 'st2' и 'st3'
Для начала, хочу при нажатии на <div id="st3" onclick="ftmzmina('st3',0.25);ftmzmina('st2',1);" style="opacity:1">ID ST3</div> чтоб текст/блок плавно исчез, но в тоже время чтоб другой блок появился. И наоборот. Что-то подобно простому триггеру, но с анимацией.

1. Сразу же наткнулся на проблему, что таймер[0] может противодействовать таймер[1], таймер[2] в связи с тем что функция одна, но она работает как класс. Одна и та же функция может получить задание "плавное исчезновение opacity=-0.01" и в тоже время (если поспешить) может быть озадачена той же функцией "плавное возникновение opacity=+0.01"
Хоть после выполнения нужного условия таймер должен уничтожиться, но таймер мог работать если дождаться полностю всей анимации, а если поспешить и быстро нажать два разных DIV блока, тогда таймер работает, но он впустую -0.01+0.01 делает.

Тогда я решил задействовать массивы
К блоку arr[i]=document.getElementById(menu); прикрутить дополнительную ветку arr[i]._znach=znach;
Весь код будет ниже. Идея в том, что должен быть цикл: Если есть элементы массива, тогда исполняем то что приказано сделать, в будущем вплоть до Eval на все случаи жизни. Но я наткнулся на проблему, что цикл for(var i=0; i<arr.length-1; i++) не совсем правильно использовать. Мне нужно что-то типа как в Visual Basic "For Each", потому что я например удаляю элемент массива delete arr[i] и в arr[i] уже есть пробелы, а arr.length показывает только максимальное число массива а не количество. И я не знаю как использовать ForEach в моем случае... :( А так почти все получается методом ошибок и упорства



Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>
<script language="javascript">
arr = [];
setInterval(function(){procesZmTm()},15);
function procesZmTm(){//этот таймер работает постоянно и принцип такой: если есть элемент массива, тогда исполняем его волю
for(var i=0; i<arr.length-1; i++) {// его как-то нужно поменять на ForEach или ему-подобного
	pot_id=arr[i].id;
	pot_zn=arr[i]._znach;
	
		if (pot_zn==0.25){// Условия будут менятся. Проблема в цикле после срабатывания delete arr[i]
			if(document.getElementById(pot_id).style.opacity>0.25){document.getElementById(pot_id).style.opacity-=0.01;}else{delete arr[i];alert('Stop -');}}
		if (pot_zn==1){
			if(document.getElementById(pot_id).style.opacity<2){document.getElementById(pot_id).style.opacity-=-0.01;}else{delete arr[i];alert('Stop +');}}

	   document.getElementById(pot_id).innerHTML=document.getElementById(pot_id).style.opacity + ' ..........  ' + Math.random();
document.title=arr.length;
}

	   
	   }
	   
function ftmzmina(menu, znach)
	{
	var i=arr.length;
	var p=sfind(arr,menu); // ищу в массиве. Если нет такого массива, то создаю и даю задания, иначе для DIV id масива меняю задания
	if (p==-1)
	{
	arr[i]=document.getElementById(menu);
	arr[i]._znach=znach;
	}
	else
	{
	arr[p]=document.getElementById(menu);
	arr[p]._znach=znach;
	}
	
	}

function sfind(array2, value) {  // Функция поиска в массиве
  for(var i=0; i<array2.length; i++) {
    if (array2[i].id == value) return i;}
  return -1;}  

  
</script>


<div id="st2" onclick="ftmzmina('st2',0.25);ftmzmina('st3',1);" style="opacity:1">
 ID ST2
</div>

<br>
<div id="st3" onclick="ftmzmina('st3',0.25);ftmzmina('st2',1);" style="opacity:1">
 ID ST3
</div>
<br>

</body>
</html>
...
Рейтинг: 0 / 0
Создание функции в которой запускается таймер
    #38215285
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ok. Я кажись полностью разобрался. Завтра только немножко подкоректирую условие. Я представляю его чуть по другому. Там будет только указано шаг (Step-параметр) и Значение которое должно быть. Как только этого значения достичь, тогда массив с заданием удаляется. В будущем просто может еще прикручу параметр (за какое времья нужно делать анимацию).
Рабочий код выглядит пока-что уже так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>
<script language="javascript">
arr = [];
setInterval(function(){procesZmTm()},15);
function procesZmTm(){
arr.forEach(function(y){

//for(var i=0; i<arr.length-1; i++) {
	pot_id=y.id;
	pot_zn=y._znach;
	
		if (pot_zn==0.25){
			if(document.getElementById(pot_id).style.opacity>0.25){document.getElementById(pot_id).style.opacity-=0.01;}else{delete arr[y._id];}}
		if (pot_zn==1){
			if(document.getElementById(pot_id).style.opacity<1){document.getElementById(pot_id).style.opacity-=-0.01;}else{delete arr[y._id];}}

	   document.getElementById(pot_id).innerHTML=document.getElementById(pot_id).style.opacity + ' ..........  ' + Math.random();
document.title=arr.length;
//}
});
	   
	   }
	   
function ftmzmina(menu, znach)
	{
	var i=arr.length;
	var p=sfind(arr,menu);
	if (p==-1)
	{
	arr[i]=document.getElementById(menu);
	arr[i]._znach=znach;
	arr[i]._id=i;
	}
	else
	{
	arr[p]=document.getElementById(menu);
	arr[p]._znach=znach;
	}
	
	}

function sfind(array2, value) {
 array2.forEach(function(y2){
	 if(y2.id==value) {return y2._id;};
	 });
	 return -1;
  }
</script>


<div id="st2" onclick="ftmzmina('st2',0.25);ftmzmina('st3',1);" style="opacity:1">
 ID ST2
</div>

<br>
<div id="st3" onclick="ftmzmina('st2',1);ftmzmina('st3',0.25);" style="opacity:1">
 ID ST3
</div>
<br>

</body>
</html>



тоесть можно жать на "блоки" не дождавшись их финальной остановки. RND числами я показываю для себя статус массива (активный элемент или отключен). И в некоторых случаях он не отключается из-за не совсем корректного условия. Завтра сделаю все по себя.

Вопрос будет еще такой. Я явно задаю именно document.getElementById(pot_id).style.opacity, а есть способ чтоб можно было параметром передать opacity или Left или Top, чтоб инициализация была простой onclick="ftmzmina('st2',1000,' Left ')" или onclick="ftmzmina('st2',1000,' Top ')"...
...
Рейтинг: 0 / 0
Создание функции в которой запускается таймер
    #38215288
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей159а есть способ чтоб можно было параметром передать opacity или Left или TopДа, передать в качестве одного из аргументов функции, или в составе объекта, являющегося аргументом функции.
...
Рейтинг: 0 / 0
Создание функции в которой запускается таймер
    #38215382
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
можете показать как пользоваться таким приемом ?
...
Рейтинг: 0 / 0
Создание функции в которой запускается таймер
    #38215426
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей159Я явно задаю именно document.getElementById(pot_id).style.opacity, а есть способ чтоб можно было параметром передать opacity или Left или Top
Код: javascript
1.
2.
propname = 'opacity'; // 'left', 'top', 'jopa' ...
document.getElementById(pot_id).style[propname] = ...
...
Рейтинг: 0 / 0
Создание функции в которой запускается таймер
    #38215491
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Андрей159можете показать как пользоваться таким приемом ?
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
<!DOCTYPE HTML>
<html>  
<head></head>
<body>
  <div onclick="doExample(this, { left: '100px', opacity: .5, position: 'absolute', top: '100px' })">
    Click me to see how this example works!
  </div>
  <script>
    function doExample(element, properties) {
      for (var property in properties) {
        element.style[property] = properties[property];
      }
    }
  </script>
</body>
</html>
...
Рейтинг: 0 / 0
Создание функции в которой запускается таймер
    #38215520
Фотография Андрей159
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Благодарю
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Создание функции в которой запускается таймер
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]