Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Много таймеров на одной странице (https://javascript.ru/forum/dom-window/29407-mnogo-tajjmerov-na-odnojj-stranice.html)

pimple2006 26.06.2012 19:20

Много таймеров на одной странице
 
Ребята здравствуйте
<!DOCTYPE html>
<html>
<head>
<script type="text/javascript">

function displayDate(vr,i)
{
vr0=vr;
i0=i;
//1340827200
c=new Date();
sec=Math.floor(c.getTime() / (1000)); //getfromtimeseconds
razn=vr0-sec;
Data=new Array();
Data[0]=Math.floor(razn / 86400); //days
Data[1]=razn-(Data[0]*86400); // remainAfterDays
Data[2]=Math.floor((Data[1] / 3600)); //hours
Data[3]=Data[1]-(Data[2]*3600); //remainAfterHours
Data[4]=Math.floor((Data[3] / 60)); //minutes
Data[5]=Data[3]-(Data[4]*60); //RemainSeconds
Data[6]=Data[0]+Data[2]+Data[4]+Data[5];
if (Data[6] > 0) {
var b=document.getElementById(id0).innerHTML=Data[0]+' Days '+Data[2]+':'+Data[4]+':'+Data[5];}
else {var b=document.getElementById(id0).innerHTML='Акция завершилась';}
window.setTimeout("displayDate(vr0,id0)",1000);
}
function init(ttime,id)
{
ttime0=ttime;
id0=id;
window.setTimeout("displayDate(ttime0,id0)",1000);
}
</script>
</head>
<body>

<h1>My First Web Page</h1>
<p id="q"><script>init(1340886000,'q')</script>dsa</p>
<p id="h" ><script>init(1340886000,'h')</script>asd</p>


<button type="button" ">Display Date</button>

</body>
</html>

написал код,работает замечательно для одного таймера,а как сделать много таймеров на одной странице?:(

ksa 26.06.2012 19:25

Цитата:

Сообщение от pimple2006
работает замечательно

Даже это? :)
Цитата:

Сообщение от pimple2006
window.setTimeout("displayDate(ttime0,id0)",1000);


Deff 26.06.2012 19:30

pimple2006,
Если установки времени не для каждого, то чисто копированием, в тот момент, когда Вы заканчиваете обновляеть первый таймер, если установки для каждого в отдельности -= нужно знать алгоритм установок
ЗЫ: У меня, в Опере , по кнопке <button type="button" ">Display Date</button> ничо не меняется

ksa 26.06.2012 19:34

Цитата:

Сообщение от Deff
Если установки времени не для каждого, то чисто копированием, в тот момент, когда Вы заканчиваете обновляеть первый таймер, если установки для каждого в отдельности -= нужно знать алгоритм установок

Бла, бла, бла, бла...

Твой код не рабочий. Вот я про что...

pimple2006 26.06.2012 19:35

button осталась просто так

pimple2006 26.06.2012 19:39

ребят,все работает,во всех браузерах ,кнопка осталась от старого скрипта,если один тамймер вызвать.то работает на ура,я не знаю как вызвать их несколько штук разом,прошу помощи

ksa 26.06.2012 19:45

Вот вроде тикают оба...

<!DOCTYPE html>
<html>
<head>
<script src="ttp://code.jquery.com/jquery-latest.js"></script>
<style type="text/css">
</style>
<script type='text/javascript'>
function displayDate(vr,i) {
	//1340827200
	c=new Date();
	sec=Math.floor(c.getTime() / (1000)); //getfromtimeseconds
	razn=vr-sec;
	Data=new Array();
	Data[0]=Math.floor(razn / 86400); //days
	Data[1]=razn-(Data[0]*86400); // remainAfterDays
	Data[2]=Math.floor((Data[1] / 3600)); //hours
	Data[3]=Data[1]-(Data[2]*3600); //remainAfterHours
	Data[4]=Math.floor((Data[3] / 60)); //minutes
	Data[5]=Data[3]-(Data[4]*60); //RemainSeconds
	Data[6]=Data[0]+Data[2]+Data[4]+Data[5];
	if (Data[6] > 0) {
	var b=document.getElementById(i).innerHTML=Data[0]+' Days '+Data[2]+':'+Data[4]+':'+Data[5];}
	else {var b=document.getElementById(i).innerHTML='Акция завершилась';}
	window.setTimeout(function () {
		displayDate(vr,i);
	},1000);
};
function start() {
	init(1340886000,'q');
	init(1340886000,'h');
};
function init(ttime,id) {
	window.setTimeout(function () {
		displayDate(ttime,id);
	},1000);
};
</script>
</head>
<body>
<h1>My First Web Page</h1>
<p id="q">dsa</p>
<p id="h" >asd</p>
<button onclick='start()'>Start</button>
</body>
</html>


Код более напоминает подземный ход на чердак... :)

pimple2006 26.06.2012 19:49

а без кнопки никак?
+ данные формируются php
id элемента
колво секунд

ksa 26.06.2012 19:51

Цитата:

Сообщение от pimple2006
а без кнопки никак?

Почему такой пессимизм? :haha:
Функцию
start();

Можно вызвать из
<body onload='start();'>
...
</body>

pimple2006 26.06.2012 19:56

<body> прописан на главной странице,а страница ,где есть таймеры подгружается
может данные которые формируются,попробывать занести в массив и из массива брать ?

ksa 26.06.2012 20:05

pimple2006, может пора таки учебник почитать? :)
http://learn.javascript.ru/hello-world#тег-script

pimple2006 26.06.2012 20:38

урок не помог в решении проблемы с кучей таймеров,но все равно спасибо))):) я частенько смотрю их
P.S я профан на самом деле в javascript, то что мог написать - сделал,сижу как дурак уже пол дня со скриптом
:) заодно узнать,какие на этом форуме люди)))
а то есть всякие форумы,где мой код даже не смотрели,потому что не так тему оформил

Deff 26.06.2012 20:45

pimple2006, Опишите четко задачу:


1. Скок таймеров ?
2. Чем они отличаются друг от друга ?
3. Как нужно выставлять их начальные значения ?

Запуск - одновременный ?

pimple2006 26.06.2012 20:52

1.
сколько будет записей в базе
2.отличие в секундах,посылаемых в скрипт и id
<td>

3.запуск одновременный

<tr><td ></td><td id="id3"><script type="text/javascript">init(1341000000,'id3')</script></td></tr>

это формирует php

Deff 26.06.2012 20:56

pimple2006,
1. Пытайте отвечать без кода - строго на поставленный вопрос,
2. Давать строго законченный ответ
Цитата:

Сообщение от pimple2006
отличие в секундах,посылаемых в скрипт и id

Из-за неакуратных ответов - это требует еще дополнительных Вопросов!
Применяйте поясняющее HTML с кодом различий, если нет возможности пояснить текстом

pimple2006 26.06.2012 21:05

Цитата:

Сообщение от Deff (Сообщение 184410)
pimple2006,
1. Пытайте отвечать без кода - строго на поставленный вопрос,
2. Давать строго законченный ответ

Из-за неакуратных ответов - это требует еще дополнительных Вопросов!

1.Допустим,есть в базе 100 записей,php берет из базы 100 записей и к каждой записи свой таймер
2.в базе есть запись времени,допустим,30.06.2012 12-05-38,php преобразует дату в секунды,прошедшие с начала Unix эпохи,эти секунды передаются в javascript
3.Javascript берет сегодняшнюю дату(хотя тут уже неправильно,ну это не долго поправить),вычисляет разницу между конечной и сегодняшней датами,опять же в секундах,потом разбивает на дни,часы,минуты,секунды,все это выводится на экран и отсчитывается,при этом,вывод осуществляется строго по указанному id ячейки таблицы

Deff 26.06.2012 21:08

pimple2006,
1. Хм... Таймеры на клиенте ?(*Накой мне знать о PHP...

2.Приведите исходный код страницы для трёх таймеров(без скриптов

pimple2006 26.06.2012 21:15

<script type="text/javascript">

function displayDate(vr,i)
{
vr0=vr;
i0=i;
//1340827200
c=new Date();
sec=Math.floor(c.getTime() / (1000)); //getfromtimeseconds
razn=vr0-sec;
Data=new Array();
Data[0]=Math.floor(razn / 86400); //days
Data[1]=razn-(Data[0]*86400); // remainAfterDays
Data[2]=Math.floor((Data[1] / 3600)); //hours
Data[3]=Data[1]-(Data[2]*3600); //remainAfterHours
Data[4]=Math.floor((Data[3] / 60)); //minutes
Data[5]=Data[3]-(Data[4]*60); //RemainSeconds
Data[6]=Data[0]+Data[2]+Data[4]+Data[5];
if (Data[6] > 0) {
document.getElementById(id0).innerHTML=Data[0]+' Days '+Data[2]+':'+Data[4]+':'+Data[5];}
else {document.getElementById(id0).innerHTML='Акция завершилась';}
window.setTimeout("displayDate(vr0,id0)",1000);
}
function init(ttime,id)
{
ttime0=ttime;
id0=id;
window.setTimeout("displayDate(ttime0,id0)",1000);
}
function start() {
init(1340886000,'q');
init(1340886000,'h');
}
</script>
</head>
<body>

<h1>My First Web Page</h1>
<script>start();</script>
<p id="q">dsa</p>
<p id="h" >asd</p>

Deff 26.06.2012 21:24

pimple2006,
Попробуйте сделать иначе
поставить на страницу просто
<div id=tim1 data="Тут время старта"></div>

<div id=tim2 data="Тут время старта"></div>

<div id=tim3 data="Тут время старта"></div>



А единым скриптом мы уже распарсим и отразим в этих же div - блоках нужное время и его смену

pimple2006 26.06.2012 21:33

Цитата:

Сообщение от Deff (Сообщение 184420)
pimple2006,
Попробуйте сделать иначе
поставить на страницу просто
<div id=tim1 data="Тут время старта"></div>

<div id=tim2 data="Тут время старта"></div>

<div id=tim3 data="Тут время старта"></div>



А единым скриптом мы уже распарсим и отразим в этих же div - блоках нужное время и его смену

до этого было иначе
<h1>My First Web Page</h1>

<p id="q"><script>init(time,'id');</script></p>
<p id="h" ><script>init(time1,'id1');</script>


Я приблизительно знаю в чем проблема http://pers.narod.ru/jscript/backtime.html вот на этом сайте написан множественный таймер
я так понимаю что у меня не отображаются много таймеров,потому что переменная перезаписываетсяв новую,поэтому срабатывает только последний тайер,все остальные переменные затираются,вот не знаю как их сохранить

Deff 26.06.2012 21:36

pimple2006,
Не кошерно парсить PHP(om) скрипто-код
а) Трудно отловить ошибки (надо ловить на двух сторонах)
b) Код становицо не внятным, не передаваемым и сложно модифицируемым
с) Добавка новых или исключения старых(некоторых) таймеров , заставить перерабатывать PHP в корне

AngelW 27.10.2015 08:06

function start() {<?
    if(isset($time1)){?>init(<?=$time1;?>,'q1');<?}
	if(isset($time2)){?>init(<?=$time2;?>,'h2');<?}
	if(isset($time3)){?>init(<?=$time3;?>,'a3');<?}
	if(isset($time4)){?>init(<?=$time4;?>,'b4');<?}
	?>
};


Часовой пояс GMT +3, время: 16:54.