/* Создаётся и тут же запускается анонимная функция.
При этом переменные, объявленные внутри неё, не
попадают в глобальную область видимости. Ну вот
например у тебя есть где-то переменная 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)