Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Обновление картинки по таймеру (https://javascript.ru/forum/events/49592-obnovlenie-kartinki-po-tajjmeru.html)

paveltkachev 20.08.2014 11:05

Обновление картинки по таймеру
 
Есть он-лайн камера, которая выдаёт в сеть картинки. Для её отображения на сайте хочу сделать обновление картинки по таймеру. С использованием jQuery написал следующее:

<div id="frame">
<img src="">
<div>
<script>
setInterval(function(){
$('#frame').replaceWith('<img src="">');
}, 300);
</script>

Но обновление совершается только один раз. Как сделать постоянное обновление кадров?

ksa 20.08.2014 11:28

Цитата:

Сообщение от paveltkachev
Но обновление совершается только один раз

Что ты в итоге пишешь в тот src?

paveltkachev 20.08.2014 12:49

Путь к картинке http://домен/картинка.jpg

Домен отличный от домена, на котором сайт

ksa 20.08.2014 13:02

Цитата:

Сообщение от paveltkachev
Путь к картинке http://домен/картинка.jpg

Всегда одно и то же?

paveltkachev 20.08.2014 13:08

http://нижне-каменская.рф/video.php

Viral 20.08.2014 13:14

replaceWith заменяет <div id="frame"></div> на img.
После первой итерации нужного дива уже нет.

setInterval(function(){
		$('#frame img').attr('src','http://ftp.sktemp.ru/building8003.jpg?'+Math.random()+'">');
	}, 300);

paveltkachev 20.08.2014 13:41

Спасибо!

А можно как-то мигание победить при смене кадров?

Viral 20.08.2014 13:48

можно..
например можно сделать два элемента img и поочереди менять им src и z-index.

paveltkachev 20.08.2014 14:15

http://нижне-каменская.рф/video.html

Viral 20.08.2014 14:37

мсье знает толк..
сударь, вы изволили каждую итерацию переопределять переменные..

paveltkachev 20.08.2014 14:51

Нужно же как-то оправдать гигагерцы и гигабайты современных компьютеров. :)

Думаю, что можно вообще без пометки кадра, а просто вести счётчик итерации.

Viral 20.08.2014 15:06

var next, nextid, marker = 0, i = 1, int;
int = setInterval(function () {
    if (marker == 0) {
        marker = 1;
    } else {
        marker = 0;
    }
    document.getElementsByTagName('img')[marker].src = 'http://ftp.sktemp.ru/building8003.jpg?' + Math.random() + '';
    document.getElementsByTagName('img')[marker].style.zIndex = i++;
}, 300);

ага, типа так))

paveltkachev 20.08.2014 15:15

Зачем нужен int?

Viral 20.08.2014 15:20

чтобы, если понадобится, можно было сделать clearInterval() в будущем..

paveltkachev 20.08.2014 15:28

А зачем справа от Math.random() стоит + ''?

Viral 20.08.2014 15:31

у вас в коде было обособлено плюсами, а мне было лениво убирать)))

paveltkachev 20.08.2014 15:36

При таком методе получается, что появляется новый кадр. Потом старый кадр. Потом новый кадр. Посмотрите
http://www.sktemp.spb.ru/nk.html

paveltkachev 20.08.2014 15:36

Дёргается изображение. Чего ранее не было, когда я своё творчество навоял.

Viral 20.08.2014 16:17

ок, извратимся донемогу))

var i = 1, int, cont, img;
cont = document.body;
int = setInterval(function () {

    img = document.createElement('img');
    img.src = 'http://ftp.sktemp.ru/building8003.jpg?' + Math.random() + '';
    img.style.zIndex = i++;
    img.style.position = 'absolute';
    cont.appendChild(img);

    if (document.getElementsByTagName('img').length >= 3) {
        cont.removeChild(document.getElementsByTagName('img')[0]);
    }

}, 300);

paveltkachev 20.08.2014 17:00

У меня теперь в верхнем левом углу в FireFox постоянно мигает символ отсутствующей картинки. Но скачков кадров больше нет. Отчего так?

Viral 20.08.2014 17:20

понятия не имею, у меня в лисе все норм.. может z-index пишется раньше, чем картинка загрузится..

Paha0210 31.08.2016 19:28

Помогите люди.
 
Есть код, помогите реализовать обновление блока по таймеру(проблема в том что обновляется сейчас один раз...я нуб в js): <script>
setInterval(function (){$('#frame').attr('<?php include $_SERVER['DOCUMENT_ROOT'] . "/modul/chat_f.php";?>');}, 3000);
</script>
<div id="frame">
обновляем...
</div>

laimas 31.08.2016 19:37

Цитата:

Сообщение от Paha0210
я нуб в js

Судя по коду большой профи в РНР?

Весь код глупость. $(селектор).attr(имя атрибута) - это получить его значение. А что может определить в качестве имени атрибута сервер, да еще целым подключаемым файлом?

Paha0210 02.09.2016 13:00

Помогите люди.
 
Вопрос то остается... как обновить по таймеру отдельный блок див?

laimas 02.09.2016 13:15

Цитата:

Сообщение от Paha0210
Вопрос то остается

Ну тогда надо думать.

Путь выражение $('#frame').attr будет верным, к примеру $('#frame').attr('myname', value). Это означает, что атрибуту элемента 'myname' будет присвоено значение value, то есть в коде $('#frame').attr('myname', '<?php include $_SERVER['DOCUMENT_ROOT'] . "/modul/chat_f.php";?>');. Вопрос - если /modul/chat_f.php (можно работать и с относительными путями, не обязательно $_SERVER['DOCUMENT_ROOT'] еще), это скрипт возвращающий содержимое, которое должно отражаться в '#frame', то почему вы это содержимое пытаетесь воткнуть в атрибут?

Если бы, к примеру, '#frame' было бы iframe, тогда да - меняя значение его атрибута src можно было бы менять его содержимое. Но в этом случае значением src должен быть url, а не результат выполнения серверного скрипта.

Скорее всего вам нужно это.

Маэстро 05.09.2016 15:27

Цитата:

Сообщение от paveltkachev (Сообщение 326706)
У меня теперь в верхнем левом углу в FireFox постоянно мигает символ отсутствующей картинки. Но скачков кадров больше нет. Отчего так?

Разные браузеры по-разному рендерят картинки. В Google Chrome сильно заметно мерцание. Происходит это в частности потому, что Вы меняете img.src и img.style.zIndex одновременно. А нужно показывать картинку после её полной загрузки.

То есть, необходимо обрабатывать событие img.onload и по нему менять zIndex ("поднимать наверх"), либо при механизме из двух img попеременно менять им свойство display.

Также проблемы возникают при медленном интернете, когда при интервале загрузки 1 сек картинка не успевает загрузиться и в этот момент уже отдается команда на смену её src, т.е. загрузку новой картинки. Избавиться от этого можно опять таки запуском таймера по событию img.onload.
На случай проблем с интернетом/ftp стоит также обрабатывать событие img.onerror и перезапускать таймер.


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