Показать сообщение отдельно
  #9 (permalink)  
Старый 18.05.2011, 19:55
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,585

Не совсем верно, margin не приравнивается нулю, тк шаг может быть любым и спан может уйти на n пикселей за экран.

Пример:
ширина спана(width) 200px
шаг(step) 12px
тогда margin может уйти на -204px
по этому делается margin+=width, что даёт -4px
т.о. не возникает скачков.

Впринципе чтоб наглядно понять как оно работает надо просто убрать заполнение строки копиями:
<style type="text/css">
div#marquee img{vertical-align:top}
div#marquee span{font-size:0}
div#marquee {
border:1px solid #000;
overflow:hidden;
white-space:nowrap;
height:70px;}
</style>
<div id="marquee">
  <span>
    <img src="http://javascript.ru/forum/images/ca_serenity/misc/logo.gif">
    <img src="http://javascript.ru/forum/image.php?u=12257&dateline=1304687820">
  </span>
</div>
  
<script type="text/javascript">
(function(step,speed){
var e=document.getElementById('marquee');
var e_width=e.offsetWidth;
var span=e.getElementsByTagName('span')[0];
var width=span.offsetWidth;
var margin=0;
//while(e.scrollWidth<(e_width+width))e.appendChild(span.cloneNode(true)) убираем заполнение
step||(step=10);
speed||(speed=50);
(function(){
    margin+=width>=-margin?-step:width;
    span.style.marginLeft=margin+'px';
    setTimeout(arguments.callee,speed)
})()
})(5,50)
</script>
__________________
29375, 35

Последний раз редактировалось Aetae, 18.05.2011 в 20:04.
Ответить с цитированием