我試圖做一個自己的自定義js文本滾動(我希望文本滾動到一個div內的左側,然後重複滾動一次又一次)。試圖創建自定義jQuery文本滾動
但我有一些問題。我真的不能把我的手指放在我做錯了什麼地方,或者我需要新的功能。我能得到的所有幫助都是受歡迎的。
這裏有一個小提琴例如:http://jsfiddle.net/Na373/
的HTML:
<div class="wrap">
<div class="scroll">
<ul class="active">
<li>Hello World</li>
<li>Hello World</li>
<li>Hello World</li>
<li>Hello World</li>
<li>Hello World</li>
<li>Hello World</li>
<li>Hello World</li>
<li>Hello World</li>
<li>Hello World</li>
<li>Hello World</li>
</ul>
</div>
的JS:
$ul = $('.scroll ul');
//copys the existing ul and appends it after the existing one
$('.scroll').append($ul.clone().removeClass().addClass('not_active'));
function scroll() {
$active = $('.scroll ul.active');
$active.each(function() {
$not_active = $('.scroll ul.not_active');
// foreach time the function runs the ul goes "left: -1px;"
var current_position = parseInt($(this).css('left'));
var new_position = current_position - 1;
$(this).css('left', new_position+'px');
var parent_width = $(this).parent().outerWidth(); // gets the width of ".scroll"
var width = $(this).outerWidth(); // gets the width of the "ul"
var shown_all = current_position + width;
// if the right corner of the "ul" are att the right corner of ".scroll"
// this if statement executes and adds new existing class on the "ul.not_active"
// and adds class ".active" instead
// this means that there are 2 ul with the class active
//running simultaneously
if (shown_all == parent_width) {
$not_active.removeClass().addClass('active');
}
// here it checks if the "ul.active" have past its own length to left
// Here im trying to make it "not_active" and put it after the existing ".active"
//
// <ul class="active">....</ul> ----> <ul class="not_active">...</ul>
//
// then put it after the other "ul.active"
//
// <ul class="active
// ---------> <ul class="not_active"></ul>
//
// So it all beginns from the beginning
if (current_position == '-'+width) {
$(this).removeClass().addClass('not_active').css('left', '0');
$(this).insertAfter($('.scroll ul').next());
}
});
};
// And here I run the function
setInterval(scroll, 10);
CSS:
.wrap {
position: relative;
padding: 10px 10px 10px;
height: 18px;
background: #000;
color: #fff;
overflow: hidden;
width: 500px;
}
.scroll {
width: 500px;
white-space: nowrap;
}
.scroll ul {
left: 0;
position: relative;
margin: 0;
padding: 0;
display: inline;
list-style: none;
}
.scroll ul li {
padding: 0;
margin: 0;
display: inline;
}
我明白你的意思。但是如果這個陳述是真的,它將其他'ul'設置爲'.active'。所以有兩個'ul.active runnng同時。因爲我希望他們互相重疊,所以從來沒有空的空間。對不起,如果我沒有在描述中更好地解釋它。 – Oscar 2013-02-26 15:25:12
您希望在第一個ul即將「耗盡」時激活其他ul。你現在的方式,它永遠不會被激活。我猜你必須嘗試一下這些值才能確定它何時平穩過渡。另外,您可能還想將右邊的第二個偏移量偏移,以便過渡看起來是無縫的。 – 2013-02-26 16:14:12