За последние 24 часа нас посетили 21524 программиста и 1699 роботов. Сейчас ищут 1850 программистов ...

Выполняется действие еще X секунд

Тема в разделе "JavaScript и AJAX", создана пользователем Elkaz, 28 окт 2007.

  1. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    Здравствуйте.
    Задача: написать php+js функцию, которая будет перенаправлять пользователя на страницу через X секунд.
    Например:
    go.php - файл с инициализацией функции
    goto.php - куда должен попасть через X секунд
    index.php - любая другая страница.

    Сначала пользователь заходит на go.php. Таймер, к примеру, ставится на 100 секунд. Далее, он уходит на index.php. Через 20 секунд возвращается на go.php, но там таймер должен быть уже на 80 секундах, а не начинать сначала.
    Кто может помочь? :)
     
  2. vasa_c

    vasa_c Активный пользователь

    С нами с:
    22 мар 2006
    Сообщения:
    1.760
    Симпатии:
    0
    Адрес:
    гор.Ленинград
    Помогаю советом — не занимайтесь извращениями. Не нужно такого придумывать.
    Если очень надо — пишите время в куки. При загрузке страницы проверяйте куку — если есть, восстанавливайте таймер.
     
  3. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    =) Согласен, в обычных веб-проектах это не нужно. Но тут особый проект :) И это нужно.
    А можно пример кода? Просто РНР я еще более-менее знаю, а вот с JS не особо лажу)
     
  4. vasa_c

    vasa_c Активный пользователь

    С нами с:
    22 мар 2006
    Сообщения:
    1.760
    Симпатии:
    0
    Адрес:
    гор.Ленинград
  5. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    Вообщем, колдовал я со скриптом 2 дня, но ничего у меня не получилось...
    В итоге получилось вот это чудо-юдо:
    [js]
    <script>
    var curTimeFor;
    var curTimeInt;
    var ActionFormUse;

    function wtime(tfor)
    {
    curTimeFor = tfor+1;
    curTimeInt = setInterval("wchan()",1000);
    }

    function wchan()
    {
    if(curTimeFor>0)
    {
    document.all("wtime").innerHTML = '<i>Please wait for '+curTimeFor+' seconds...</i>';
    curTimeFor = curTimeFor - 1;
    }
    else
    {
    clearInterval(curTimeInt);
    document.all("wtime").innerHTML = '<i>Wait for <a href=top.php?module_main=work>refreshing</a></i>';
    window.location = "top.php?module_main=mine&act=work";
    }
    }
    </script>
    [/js]
    HTML:
    1.  
    2. <span id='wtime' class='tdbg' width='100%'><center>...
    3.  
    Но оно мне не особо нравится... Я подозреваю, что есть вариант полегче.
    + я так и не смог реализовать, что бы при переходе на другую страницу, а потом возврате, счетчик продолжал счет
     
  6. vasa_c

    vasa_c Активный пользователь

    С нами с:
    22 мар 2006
    Сообщения:
    1.760
    Симпатии:
    0
    Адрес:
    гор.Ленинград
    Код (Text):
    1. <h1 id="tmr">?</h1>
    2. <a href="http://ya.ru">next page</a>
    3. <script type="text/javascript">
    4. (function() {
    5.     var SIZE_INTERVAL = 10;
    6.     var now = parseInt((new Date()) / 1000);
    7.     var startTm = (
    8.         function() {
    9.             var cookies = document.cookie.split(";");
    10.             for (var i = 0; i < cookies.length; i++) {
    11.                 var cookie = cookies[i].split("=");
    12.                 if (cookie[0].replace(/^\s+/, "").replace(/\s+$/, "") == "starttm") {
    13.                     return parseInt(cookie[1]);
    14.                 }
    15.             }
    16.             return false;
    17.         })();
    18.     if ((startTm === false) || (startTm + SIZE_INTERVAL < now)) {
    19.         var startTm = now;
    20.         document.cookie = "starttm=" + startTm;
    21.     }
    22.     var h1 = document.getElementById("tmr");
    23.     (function() {
    24.         var now = parseInt((new Date()) / 1000);
    25.         var tm  = SIZE_INTERVAL - now + startTm;
    26.         if (tm > 0) {
    27.             h1.firstChild.nodeValue = tm;
    28.         } else {
    29.             h1.firstChild.nodeValue = "BOOM";
    30.             clearInterval(arguments.callee.interval);
    31.         }
    32.         if (!arguments.callee.interval) {
    33.             arguments.callee.interval = setInterval(arguments.callee, 1000);
    34.         }
    35.         return true;
    36.     })();
    37.     return true;
    38. })();
    39. </script>
     
  7. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    Просто огроменное спасибо! :)
    Очень Вам благодарен. Теперь такого рода вопрос - возможно ли сделать его кросс-платформенным? В IE (5.5+) все заработало на Ура. Opera 9.21 ведет себя странно. При переходе на страницу, а потом возврате, счетчик стоит на месте, а если обновить страницу - отсчет уже пойдет правильно. Т.е если он остановился на 7, побывав на ya.ru 3 секунды, вернувшись мы увидим 7. Обновив получим 4.
    FireFox нормально, но сначала (примерное полсекунды) показывает старое значение...
     
  8. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    Поставил firebug - ругается:

    h1 has no properties
    [Break on this error] h1.firstChild.nodeValue = tm;

    Про какие опции он?
     
  9. vasa_c

    vasa_c Активный пользователь

    С нами с:
    22 мар 2006
    Сообщения:
    1.760
    Симпатии:
    0
    Адрес:
    гор.Ленинград
    А где тут упомянуты опции? h1 не имеет свойства firstChild, значит "tmr" не был найден и в h1 - undifined
     
  10. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    vasa_c
    И как это можно исправить?