Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Как отобразить бегущей строкой загруженое собщение? (https://javascript.ru/forum/jquery/36962-kak-otobrazit-begushhejj-strokojj-zagruzhenoe-sobshhenie.html)

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

Цитата:

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

да, 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();
						});
					}
			});			
	};


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