Бегущая строка на js. Остановка при наведении.
День добрый! Такая задача:
Бегущая строка снизу вверх, очередная прокручиваемая строка приостанавливается на неск. секунд, при наведении блок останавливается пока не уберут курсор. Прокрутка циклична. Проблема: если навести на одну строку, потом сразу на другую, код не успевает это обработать и всё сбивается - блок со строками, не реагируя на курсор, уезжает вверх. Исходный код:
<div id="anim" style="position: relative; height: 25px; background-color: aqua; line-height: 25px;" onmouseover="window.isStart = false" onmouseout="window.isStart = true; animateNews(number);">
<div id="anim2" style="position: absolute; margin-top: 25px;">
<a href="#">1111111</a><br />
<a href="#">2222222</a><br />
<a href="#">3333333</a>
</div>
</div>
isStart = true;
number = 0;
function animateNews(i){
number = i; // какая строка по счету крутится
if(isStart == true){
len = jQuery('#anim').height(); // вычисляет, на какой интервал поднимать строку, чтобы в нужный момент сделать ее остановку на пару сек
a1 = jQuery('#anim2').height();
bottom = parseInt("-" + a1);
size = a1 / len;
a2 = parseInt(jQuery('#anim2').css('bottom'));
jQuery('#exam').html(bottom);
if((i <= size) && (a2 < len)){
jQuery("#anim2").animate({"bottom": "+="+len+"px"}, 1000);
if(i<size)
setTimeout("animateNews("+(i+1)+")", 2000);
else
setTimeout("animateNews("+(i+1)+")", 1010);
}else{ // условие для последней строки, чтобы перевести блок на исходное положение и начать сначала
jQuery("#anim2").css({'bottom': bottom});
i=0;
setTimeout("animateNews("+(i)+")", 0);
}
}else{
return;
//setTimeout("animateNews("+(i)+")", 500);
}
}
animateNews(0);
Может можно остановить блок другими путями (приостановить функцию), либо еще что дописать? Направьте, плиз:) |
Nina_2012,
Где-то был похожий пример от melky в июне |
К сожалению, там нет ничего по остановке текста наведением курсора
|
<html>
<head>
<script class="jsbin" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<title></title>
<meta name="author" content="#" />
<meta name="description" content="#" />
<meta name="keywords" content="#" />
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<style>
.marga {
background-color: #BADA55;
position: relative;
width: 300px;
height: 400px;
overflow: hidden;
}
.marga div {
position: relative;
border: 1px red dashed;
}
</style>
</head>
<body>
<div class="marga">
<div>предложение1</div>
<div>предложение2</div>
<div>предложение3</div>
</div>
<script>
$(function Myanim(){
var
fadeIn_time = 400,
bubble_time = 2000,
bubble_easing = "swing",
stay_time = 2000,
fadeOut_time = 800,
marga = $(".marga"),
divs = marga.find("div").hide(),
bottomeness = marga.height(),
widthness = marga.width(),
i = 0,
curr;
(function loop(next){
divs.eq(i - 1).hide();
if (!divs[i]) {
i = 0;
}
curr = divs.eq(i);
curr.
fadeIn(fadeIn_time).
css({"top": bottomeness - curr.outerHeight(), left: 0}).
animate({ top: 0 }, bubble_time, bubble_easing).
delay(stay_time).
animate({left:-widthness}, fadeOut_time).
queue(loop);
i += 1;
if (next) {
next();
}
})();
$(".marga > div").mouseover(function(){
$(this).stop(true);
}).mouseout(function(){
//Tут чот запустить с данной позиции
});
});
</script>
<script type="text/javascript">
</script>
</body>
</html>
Как запустить спрашивайте у melky |
Спасибо за ответы! Появилась другая идея, пока их смотрела:) Вроде работает идеально)) Может кому пригодится:
<div id="anim" style="height: 25px; line-height: 25px;" onmouseover="window.run = false" onmouseout="window.run = true;">
<div id="anim2" style="position: absolute;">
<a href="#">1111111</a><br />
<a href="#">2222222</a><br />
<a href="#">3333333</a>
</div>
</div>
<script>
run = true;
lenSmall = jQuery('#anim').height();
lenBig = jQuery('#anim2').height();
jQuery("#anim2").css({'bottom':'-'+(lenBig-2)+'px'});
function animateNews(){
if(run){
lenNow = parseInt(jQuery('#anim2').css('bottom'));
if(lenNow > lenSmall){
jQuery("#anim2").css({'bottom':'-'+(lenBig-2)+'px'});
}else{ // возвращаем блок вниз и цикл заново
jQuery("#anim2").animate({"bottom": "+=1px"}, 10);
}
// если прошли на высоту строки и это была не последняя строка, то делаем паузу
if((lenNow % lenSmall) == 0 && lenNow < lenSmall){
setTimeout("animateNews()", 1000);
}else{
setTimeout("animateNews()", 70);
}
}else{
setTimeout("animateNews()", 70);
}
}
animateNews();
</script>
|
Воспользуйтесь плагином на jquery
http://masscode.ru/index.php/k2/item/44-limarquee В нем есть все что вам нужно и даже больше |
| Часовой пояс GMT +3, время: 18:10. |