日期:2014-05-16  浏览次数:20339 次

js实现上下滚动效果

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd ">
<html xmlns="http://www.w3.org/1999/xhtml ">
<head>
<meta http-equiv="Content-Type"content="text/html; charset=GB2312" />
<title>无标题文档</title>
<style type="text/css">
<!--
#demo ul{text-align: left;margin:0;padding:0;}
#demo li{line-height:22px; padding-left:1.5em;display: block;margin-bottom: 1px;list-style:none;}
#demo{overflow:hidden; width: 243px;height: 130px; background:#FFF;margin: 5px;float: left;}
body {
font-size: 9pt;
}
-->
</style>
</head>
<body>
<div id="demo">
<div id="demo1">
<ul>
??? <li>测试11111</li>
??? <li>测试22222</li>
??? <li>测试33333</li>
??? <li>测试44444</li>
??? <li>测试55555</li>
??? <li>测试66666</li>
??? <li>测试77777</li>
??? <li>测试88888</li>
??? <li>测试99999</li>
??? <li>测试00000</li>
</ul>
</div>
<div id="demo2"></div>
<script type="text/javascript">
var speed=40;
var FGDemo=document.getElementById('demo');
var FGDemo1=document.getElementById('demo1');
var FGDemo2=document.getElementById('demo2');
FGDemo2.innerHTML=FGDemo1.innerHTML
function Marquee1(){
if(FGDemo2.offsetHeight-FGDemo.scrollTop<=0)
FGDemo.scrollTop-=FGDemo1.offsetHeight
else{
FGDemo.scrollTop++
}
}
var MyMar1=setInterval(Marquee1,speed)
FGDemo.onmouseover=function() {clearInterval(MyMar1)}
FGDemo.onmouseout=function() {MyMar1=setInterval(Marquee1,speed)}
</script>
</div>
</body>
</html>

IE里有个专用的标签:marquee可以直接设置滚动效果,但其他浏览器不怎么支持此标签,以前js实现方法,兼容各种浏览器。原理就是控制 demo自动向下滚动,滚到底部了再回置到初始状态,如此反复。

offsetHeight
IE、Opera 认为 offsetHeight = clientHeight + 滚动条 + 边框。
NS、FF 认为 offsetHeight 是网页内容实际高度,可以小于 clientHeight。

offsetHeight:各种浏览器的解释不一样,但此例中指demo2的实际高度,其实demo2开始的offsetHeight是0,经过js对其 innertext赋值后变成了和demo1一样的offsetHeight,offsetHeight指的是他们的实际高度。

scrollTop:内容被卷去的高,也就是容器上边缘距离它可视部分上边缘的距离。