Вход

Просмотр полной версии : Как отобразить бегущей строкой загруженое собщение?


Kvark
02.04.2013, 15:06
Привет, я еще пока новенький в jQuery, помогите разобраться:
у меня 2 файла, в один програма пишет собщение, в другом мне его нужно отобразить в html теге:
<div id="marquee">
...
</div>

собщение прекрасно загружаеться:
function show(){
$('#marquee').load('msg.txt');
};

и функция срабатывает на:
$(document).ready(function(){
show();
msgrun();
setInterval('show()', 1000);
});

но оно не двигаеться :(

для бегущей строки я использую это:
function msgrun() {
var marquee = $("#marquee"); marquee.css({"overflow": "hidden", "width": "100%"});
// оболочка для текста ввиде span (IE не любит дивы с inline-block)
marquee.wrapInner("<span>");
marquee.find("span").css({ "width": "50%", "display": "inline-block", "text-align":"center" });
marquee.append(marquee.find("span").clone());
// тут у нас два span с текстом
marquee.wrapInner("<div>");
marquee.find("div").css("width", "200%");
var reset = function() { $(this).css("margin-left", "0%");
$(this).animate({ "margin-left": "-100%" }, 12000, 'linear', reset); };
reset.call(marquee.find("div"));
};

если я прописываю собщение в тегах:
<div id="marquee">
Тестовое собщение
</div>
оно прекрасно отображаеться и показывает бегущей строчкой.

Что нужно подправить чтоб оно срабатывало после загрузки собщения из файла?

animhotep
02.04.2013, 15:10
функция load будет работать только на сервере, локально из файла не подгрузит

Kvark
02.04.2013, 15:15
все прекрасно она грузит, вопрос не в этом, после загрузки не двигаеться, но показываеться, словно что то мешает выполению функции msgrun()

animhotep
02.04.2013, 15:21
текст вставлен после загрузки страници, похоже js его не видит
а если так?
$('#marquee').load('msg.txt', function() {
msgrun();
});

Kvark
02.04.2013, 15:28
О! теперь работает! Спасибо огромное! :)
Тоесть проблема была в том что он выполнял функцию по факту раньше заполнения?

Kvark
02.04.2013, 15:37
еще одна загвоздка, может также сможеш подсказать, текст "дергает" когда просиходит считывание из файла (а я читаю каждую секунду) - как можно выполнить функцию msgrun только если собщение поменялось?
как я понимаю нужно загрузить в переменую сначала и если значение не равно тому что уже прописано в тегах - тогда выполнить функцию? Или как то по другому это сделать можно?

animhotep
02.04.2013, 15:51
О! теперь работает! Спасибо огромное! :)
Тоесть проблема была в том что он выполнял функцию по факту раньше заполнения?

да, js вычитался вместе с загрузкой страници. а текст позже подгрузился

загрузи текст в переменную и сравнивай

Kvark
02.04.2013, 16:51
переписал функцию:
function show()
{
var currentMsg = $('#marquee').html();
$('#marquee').load('msg.txt', function(newMsg) {
if (currentMsg != newMsg){
msgrun();
};
});
};

работает отлично! :)

Kvark
03.04.2013, 12:26
немного усовершенствовал (вдруг кому пригодиться) считываем содержимое файла и проверяем уже загруженое сообщение - если они не равны (проверяю вхождение так как к сообщению применены стили и прямое сравнение не прокатывает) тогда загружаю новое (использую html() потому что сообщение содержит базовое форматирование: цвет, высоту, фонт, наклон, толщину etc.):
function show()
{
var currentMsg = $('#marquee').html();
jQuery.get('msg.txt', function(data)
{
var fileMsg = data;
if (currentMsg.search(fileMsg) == -1)
{
$('#marquee').load('msg.txt', function(newMsg)
{
msgrun();
});
}
});
};