百度了一下出来的都是这个很传统的做法。
结构如下<div id="demo" style="width:800px;overflow:hidden">
<table><tr><td id="demo1">要显示的内容</td><td id="demo2"></td></tr></table>
</div>
将demo1的内容克隆一份到demo2
然后不断改变demo的scrollLeft,当滚动的宽度刚好是demo1的宽度时还原一下。
由于demo2里克隆了demo1的内容,还原的瞬间是看不出来的,从而达到“无缝”滚动的目的。
现在的问题就是当demo1的宽度小于demo的宽度的时候,滚动一会就停止了。
demo1的宽度大于demo的宽度的时候是没问题的。
我现在就是想弄清楚问题出在什么地方,调试了下发现应该没有问题才对。
结构如下<div id="demo" style="width:800px;overflow:hidden">
<table><tr><td id="demo1">要显示的内容</td><td id="demo2"></td></tr></table>
</div>
将demo1的内容克隆一份到demo2
然后不断改变demo的scrollLeft,当滚动的宽度刚好是demo1的宽度时还原一下。
由于demo2里克隆了demo1的内容,还原的瞬间是看不出来的,从而达到“无缝”滚动的目的。
现在的问题就是当demo1的宽度小于demo的宽度的时候,滚动一会就停止了。
demo1的宽度大于demo的宽度的时候是没问题的。
我现在就是想弄清楚问题出在什么地方,调试了下发现应该没有问题才对。
在贴上jsvar speed = 25;
document.getElementById("demo2").innerHTML = document.getElementById("demo2").innerHTML;
var MyMar = setInterval(Marquee, speed);
document.getElementById("demo").onmouseover = function ()
{ clearInterval(MyMar); }
document.getElementById("demo").onmouseout = function ()
{ MyMar = setInterval(Marquee, speed);}
function Marquee() {
if (document.getElementById("demo2").offsetWidth - document.getElementById("demo").scrollLeft <= 0) {
document.getElementById("demo").scrollLeft -= document.getElementById("demo1").offsetWidth
}
else {
document.getElementById("demo").scrollLeft++
}
}
原因是:如果“demo1”的宽度设置得比“demo”的小,造成在进行“document.getElementById("demo").scrollLeft -= document.getElementById("demo1").offsetWidth; ”这一步运算时,“demo”的“scrollLeft”属性值比document.getElementById("demo2").offsetWidth的值要小,所以“ if (document.getElementById("demo2").offsetWidth - document.getElementById("demo").scrollLeft <= 0)”的运算结果总是为false,也就是大于0的,因此也就不停的在执行“document.getElementById("demo").scrollLeft++;”语句,但是呢,“scrollLeft”的值是有上限的,所以反映到页面上,你就看到的是卡着不动了。
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>CSS等高布局</title>
<style type="text/css">
body { margin:0; padding:0; }
ul,li { margin:0; padding:0; }
ul li { float:left; width:100px; }
ul { list-style:none; float:left; width:300px; }
#box { width:300px; overflow:hidden; position:relative; background:#f00; height:100px; }
#boxframe { width:600px; position:absolute; top:0; }
</style>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script type="text/javascript">
function scrolls() {
if(parseInt($('#boxframe').css('left')) == -300) {
$('#boxframe').css('left', 0)
}
$('#boxframe').animate({left: '-=100px'}, 500);
}
var timer;
$(function() {
$('ul').clone().appendTo('#boxframe');
timer = setInterval('scrolls()', 2000);
$('#boxframe').hover(function() {
clearInterval(timer);
}, function() {
timer = setInterval('scrolls()', 2000);
});
});
alert(a);
</script>
</head>
<body>
<div id="box">
<div id="boxframe">
<ul>
<li><a href="#" target="_blank"><img src="1.jpg" width="100" height="100" /></a></li>
<li><a href="#" target="_blank"><img src="2.gif" width="100" height="100" /></a></li>
<li><a href="#" target="_blank"><img src="3.gif" width="100" height="100" /></a></li>
</ul>
</div>
</div>
</body>
</html>