Показать сообщение отдельно
  #5 (permalink)  
Старый 18.05.2011, 18:03
Профессор
Отправить личное сообщение для Matre Посмотреть профиль Найти все сообщения от Matre
 
Регистрация: 07.01.2011
Сообщений: 582

/* Создаётся и тут же запускается анонимная функция.
   При этом переменные, объявленные внутри неё, не
   попадают в глобальную область видимости. Ну вот
   например у тебя есть где-то переменная span. И
   в этом скрипте она тоже есть. Чтобы они не конликтовали,
   и используется это замыкание.
*/
(function(step,speed){
var e=document.getElementById('marquee');
var e_width=e.offsetWidth;			// ширина marquee
var span=e.getElementsByTagName('span')[0];
var width=span.offsetWidth;			// ширина span
var margin=0;
/* Пока ширина marquee вместе с прокруткой меньше
   обычной ширины (т.е. marquee заполнен "не до предела"),
   добавляем в него копии span-ов. Когда-нибудь их добавится
   столько, что появится скролл и цикл прекратится.
*/
while(e.scrollWidth<(e_width+width))e.appendChild(span.cloneNode(true))
step||(step=10);
speed||(speed=50);
function start(){
/* Тут мы уменьшаем margin на step. Но наступает
   момент, когда margin уходит на большую, чем
   width, величину. Одним словом, |margin| > |width|
   Тогда мы ставим его в 0 и повторяем всё вновь.
*/
    timer = setInterval(function () {
    margin+=width>=-margin?-step:width;
    span.style.marginLeft=margin+'px';
    }, speed);
}
start();
e.onmouseover = function () {
	clearInterval(timer);
};
e.onmouseout = function () {
	start();
};
})(5,50)
Ответить с цитированием