Javascript.RU

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

Не работает setInterval
Здравствуйте. Есть код отсчёта до определённой даты. Время должно быть серверное. Сам код вставляю в одну из новостей на Джумле.

<span id="doc_time"></span>
<script src="http://code.jquery.com/jquery-1.11.1.min.js"></script>
<script language="javascript" type="text/javascript">
<?php date_default_timezone_set("Etc/GMT+12"); ?>
function clock() {
var d = new Date("<?php echo (date("r")); ?>");
var d1 = new Date("<?php echo date("M-d-Y", mktime(0, 0, 0, 1, 1, 2018)); ?>");
n=Math.floor((d1-d)/1000);
sec=n%60; n=Math.floor(n/60); if(sec<10)sec='0'+sec;
min=n%60; n=Math.floor(n/60); if(min<10)min='0'+min;
hour=n%24; n=Math.floor(n/24);
date_time=n+":"+hour+":"+min+":"+sec;
document.getElementById("doc_time").innerHTML = date_time;
};
clock();

$(document).ready(function() {
setInterval(clock, 1000);
});
</script>


Ну и собственно время отображается, но единожды, setInterval почему-то не обновляет... Причём если убрать вызов функции "clock();", то при обновлении поле будет пустое и только через секунду отобразится время.
Я читал что в setInterval функцию нужно указывать без скобок, но со скобками, без скобок, в кавычках - никак не работает.
Надеюсь на вашу помощь.
Ответить с цитированием
  #2 (permalink)  
Старый 25.12.2017, 02:23
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,124

Atlas,
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">

</head>

<body>
<span id="doc_time"></span>
<script src="https://code.jquery.com/jquery-1.11.1.min.js"></script>
<script>

function clock() {
var d = new Date();
var d1 = new Date(2018, 0, 1, 0, 0, 0, 0);
n=Math.floor((d1-d)/1000);
sec=n%60; n=Math.floor(n/60); if(sec<10)sec='0'+sec;
min=n%60; n=Math.floor(n/60); if(min<10)min='0'+min;
hour=n%24; n=Math.floor(n/24);
date_time=n+":"+hour+":"+min+":"+sec;
document.getElementById("doc_time").innerHTML = date_time;
window.setTimeout(clock,1000)
};


$(function() {
clock()
});
</script>

</body>
</html>
Ответить с цитированием
  #3 (permalink)  
Старый 25.12.2017, 03:49
Новичок на форуме
Отправить личное сообщение для Atlas Посмотреть профиль Найти все сообщения от Atlas
 
Регистрация: 25.12.2017
Сообщений: 4

Так работает, но... мне нужно именно серверное время.
Кстати, заметил ещё, что этот скрипт с отсчётом убивает другой скрипт, который держит открывающуюся панельку слева страницы, в результате чего, её содержимое падает под футер. Если надо, могу показать что там за скрипт.
Ответить с цитированием
  #4 (permalink)  
Старый 25.12.2017, 04:03
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,124

Atlas,
смотрите ошибки в консоли, может вы jquery два раза грузите.


Сообщение от Atlas
мне нужно именно серверное время.
думайте над логикой как изменить var d, иначе нечему "тикать", может придут специалисты помогут.
Ответить с цитированием
  #5 (permalink)  
Старый 25.12.2017, 04:16
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,124

Atlas,
пост №1 строка 8
заменить на
n=Math.floor((d1-d - performance.now())/1000);
Ответить с цитированием
  #6 (permalink)  
Старый 25.12.2017, 04:49
Новичок на форуме
Отправить личное сообщение для Atlas Посмотреть профиль Найти все сообщения от Atlas
 
Регистрация: 25.12.2017
Сообщений: 4

Сообщение от рони Посмотреть сообщение
Atlas,
пост №1 строка 8
заменить на
n=Math.floor((d1-d - performance.now())/1000);
Вот, заменил и всё пошло) Огромное спасибо!
Осталось только с панелькой разобраться...
Тот скрипт начинается на:
(причём первым символом идёт красная точка, называющаяся \ufeff)

$(function(){
    $('.panel').tabSlideOut({
        tabHandle: '.handle',
		pathToTabImage: 'imgbutton.jpg',
        imageHeight: '160px',
        imageWidth: '60px',
        tabLocation: 'left',
        speed: 300,
        action: 'click',
        topPos: '200px',
        fixedPosition: true
    });
});
(function($){


И далее...
Может сможете подсказать в чём может быть конфликт?
P.S.: похоже не работают все остальные скрипты на этой странице, когда я включаю отсчёт.

Последний раз редактировалось Atlas, 25.12.2017 в 06:51.
Ответить с цитированием
  #7 (permalink)  
Старый 25.12.2017, 07:11
Новичок на форуме
Отправить личное сообщение для Atlas Посмотреть профиль Найти все сообщения от Atlas
 
Регистрация: 25.12.2017
Сообщений: 4

Всё, удалил подключение jquery и всё заработало.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
AddEventListener не правильно работает с классами Flakky Events/DOM/Window 2 27.05.2016 13:51
Не работает setInterval в цикле valera_k Общие вопросы Javascript 17 21.05.2016 18:38
Не работает всплывающая форма на второстепенных страницах denjer Javascript под браузер 0 22.04.2016 21:30
SetInterval почти работает valera5505 Events/DOM/Window 2 17.02.2012 15:57
не работает скрипт под мозилой kent666 Events/DOM/Window 2 10.10.2011 17:54