Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   2-е бегущие строки на одной странице (https://javascript.ru/forum/misc/12028-2-e-begushhie-stroki-na-odnojj-stranice.html)

DjTarik 27.09.2010 14:25

2-е бегущие строки на одной странице
 
Написал скрипт бегущей строки:

// The document is loaded -->
		onload = function()
			{
				runingLine.iterator();
			}
		// -->
		
		var runingLine = {};
		
		runingLine.info = [
			['RunLineLrt', 50, 'ltr'],
			//['RunLineRtl', 50, 'rtl']
		];
		
		runingLine.iterator = function() {
			for (var i=0; i<runingLine.info.length; i++){
				var val_1 = runingLine.info[i][0];
				var val_2= runingLine.info[i][1];
				var val_3 = runingLine.info[i][2];
				runingLine.initial(val_1, val_2, val_3);
			}
		}
		
		// RuningLine initialization -->
		runingLine.initial = function (id, value, direction) {	// direction can be 'ltr' or 'rtl' -->
			obj = document.getElementById(id);
			wrapper = obj.parentNode;
			
			speed = Math.round(1000/value);	// quantity of pixels in a second -->
			obj.style.visibility = 'visible';
			
			if (direction == 'ltr') {
				posStart = wrapper.offsetWidth;	// start coordinate -->
				posFinish = -(obj.offsetWidth);	// finish coordinate -->
				runingLine.traffic.ltr();
			}
			else if (direction == 'rtl') {
				posStart = -(obj.offsetWidth);	// start coordinate -->
				posFinish = wrapper.offsetWidth;	// finish coordinate -->
				runingLine.traffic.rtl();
			}
			
			obj.onmouseover = function() {
				clearTimeout(timer);
			}
			obj.onmouseout = function() {
				if (direction == 'ltr') {
					runingLine.traffic.ltr();
				}
				else if (direction == 'rtl') {
					runingLine.traffic.rtl();
				}
			}
		}
		
		runingLine.traffic = new Traffic();
		
		function Traffic() {
			
			// RuningLine traffic 'left to right' -->
			this.ltr = function() {
				if (posStart >= posFinish) {
					posStart-=1;	// change coordinate -->
					obj.style.left = posStart+'px';
					timer = setTimeout(arguments.callee, speed);
				}
				else {
					posStart = wrapper.offsetWidth;	// start coordinate -->
					posFinish = -(obj.offsetWidth);	// finish coordinate -->
					runingLine.traffic.ltr();
				}
			}
			// -->
			
			// RuningLine traffic 'right to left' -->
			this.rtl = function() {
				if (posStart <= posFinish) {
					posStart+=1;	// change coordinate -->
					obj.style.left = posStart+'px';
					timer = setTimeout(arguments.callee, speed);
				}
				else {
					posStart = -(obj.offsetWidth);	// start coordinate -->
					posFinish = wrapper.offsetWidth;	// finish coordinate -->
					runingLine.traffic.rtl();
				}
			}
			// -->
			
		}


Инициализирую вот так:

runingLine.info = [
			['RunLineLrt', 50, 'ltr'],
			//['RunLineRtl', 50, 'rtl']
		];


Решил делать через массив и потом в цикле выхывать строки - не получается. Когда строка одна - всё работает. Как тоько их нужно сделать больше - не знаю как? Каков принцип таких задач? Где об этом можно почитать?

Спасибо.

DooMer 27.09.2010 14:55

Цитата:

Сообщение от DjTarik (Сообщение 72056)
Написал скрипт бегущей строки:

с помощью ctrl+c ctrl+v писал ?

DjTarik 27.09.2010 15:38

Нет, вышеописанное всё моё, могу рассказать и прокомментировать каждую строку, почему именно так и т.д.

Вопрос остаётся открытым...

DooMer 27.09.2010 16:30

Неглубоко вникал, но помоему порблема в "obj". obj передавайте как параметр ф-ии, а не глобально в ltr и rtl


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