为了账号安全,请及时绑定邮箱和手机立即绑定

scrollHeight和offsetHeight

我想问下,这里为什么用scrollHeight而不用ul的offsetHeight。。。。

并且,我先获取到div里面的第一个ul,然后console.log(con1.offsetHeight),居然是0,为什么啊?

<script type="text/javascript">
 var area = document.getElementById('moocBox');
 var con1 = area.getElementsByTagName('ul')[0];
 var iliHeight = 24;//单行滚动的高度
 var speed = 50;//滚动的速度
 var time;
 var delay= 1000;
 area.scrollTop=0;
 area.innerHTML+=area.innerHTML;//克隆一份一样的内容
 function startScroll(){
	 time=setInterval("scrollUp()",speed);
	 area.scrollTop++;
	 }
 function scrollUp(){
	 if(area.scrollTop % iliHeight==0){
		 clearInterval(time);
		 setTimeout(startScroll,delay);
		 }else{
			 area.scrollTop++;
			 if(area.scrollTop >= area.scrollHeight/2){
				 area.scrollTop =0;
				 }
			 }
	 }
	 setTimeout(startScroll,delay);
	 console.log(con1.offsetHeight);
 </script>


正在回答

3 回答

间歇性滚动(源代码)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>新闻无缝向上无缝滚动</title>
<style>
body {
	font-size: 12px;
	line-height: 24px;
	text-algin: center;        /* 页面内容居中 */
}
* {
	margin: 0px;
	padding: 0px;            /*  去掉所有标签的marign和padding的值  */
}
ul {
	list-style: none;           /*  去掉ul标签默认的点样式  */
}
a img {
	border: none;        /*  超链接下,图片的边框  */
}
a {
	color: #333;
	text-decoration: none;     /* 超链接样式 */
}
a:hover {
	color: #ff0000;
}
#mooc {
	width: 399px;
	border: 5px solid #ababab;
	-moz-border-radius: 15px;      /* Gecko browsers */
	-webkit-border-radius: 15px;   /* Webkit browsers */
	border-radius: 15px;
	box-shadow: 2px 2px 10px #ababab;
	margin: 50px auto 0;
	text-align: left;               /* 让新闻内容靠左 */
}
/*  头部样式 */	
#moocTitle {
	height: 62px;
	overflow: hidden;  /* 这个一定要加上,内容超出的部分要隐藏,免得撑高头部 */
	font-size: 26px;
	line-height: 62px;
	padding-left: 30px;
	background-image: -moz-linear-gradient(top, #f05e6f, #c9394a); /* Firefox */
	background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #f05e6f), color-stop(1, #c9394a)); /* Saf4+, Chrome */
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#8fa1ff', endColorstr='#f05e6f', GradientType='0'); /* IE*/
	border: 1px solid ##f05e6f;
	-moz-border-radius: 8px 8px 0 0;      /* Gecko browsers */
	-webkit-border-radius: 8px 8px 0 0;   /* Webkit browsers */
	border-radius: 8px 8px 0 0;
	color: #fff;
	position: relative;
}
#moocTitle a {
	position: absolute;
	right: 10px;
	bottom: 10px;
	display: inline;
	color: #fff;
	font-size: 12px;
	line-height: 24px;
}
/*  底部样式 */
#moocBot {
	width: 399px;
	height: 10px;
	overflow: hidden;     /* 这个一定要加上,内容超出的部分要隐藏,免得撑高底部结构 */
}
/*  中间样式 */
#moocBox {
	height: 144px;
	width: 335px;
	margin-left: 25px;
	margin-top: 10px;
	overflow: hidden;    /*  这个一定要加,超出的内容部分要隐藏,免得撑高中间部分 */
}
#mooc ul li {
	height: 24px;
}
#mooc ul li a {
	width: 180px;
	float: left;
	display: block;
	overflow: hidden;
	text-indent: 15px;
	height: 24px;
}
#mooc ul li span {
	float: right;
	color: #999;
}
</style>
</head>

<body>
<!--  慕课网课程公告开始 -->
<div  id="mooc"> 
<!--  头部 -->
<div  id="moocTitle">慕课网最新课程<a href="#" target="_self">更多>></a> </div>
<!--  头部结束 --> 
<!--  中间 -->
<div  id="moocBox">
    <ul>
        <li><a href="#">1.学会html5 绝对的屌丝逆袭(案例)</a><span>2013-09-18</span></li>
        <li><a href="#">2.tab页面切换效果(案例)</a><span>2013-10-09</span></li>
        <li><a href="#">3.圆角水晶按钮制作(案例)</a><span>2013-10-21</span></li>
        <li><a href="#">4.HTML+CSS基础课程(系列)</a><span>2013-11-01</span></li>
        <li><a href="#">5.分页页码制作(案例)</a><span>2013-11-06</span></li>
        <li><a href="#">6.导航条菜单的制作(案例)</a><span>2013-11-08</span></li>
        <li><a href="#">7.信息列表制作(案例)</a><span>2013-11-15</span></li>
        <li><a href="#">8.下拉菜单制作(案例)</a><span>2013-11-22</span></li>
        <li><a href="#">9.如何实现“新手引导”效果</a><span>2013-12-06</span></li>
    </ul>
</div>
<!--  中间结束 --> 
<!--  底部 -->
<div  id ="moocBot"> </div>
<!--  底部结束 --> 
</div>
<!--  慕课网课程公告结束 --> 

<script type="text/javascript">
 var area = document.getElementById('moocBox');
 var iliHeight = 24;//单行滚动的高度
 var con1 = area.getElementsByTagName('ul')[0];
 var speed = 50;//滚动的速度
 var time;
 var delay= 2000;
 area.scrollTop=0;
 area.innerHTML+=area.innerHTML;//克隆一份一样的内容
 function startScroll(){
	 time=setInterval("scrollUp()",speed);
	 area.scrollTop++;
	 }
 function scrollUp(){
	 if(area.scrollTop % iliHeight==0){
		 clearInterval(time);
		 setTimeout(startScroll,delay);
		 }else{
			 area.scrollTop++;
			 if(area.scrollTop >= area.scrollHeight/2){
				 area.scrollTop =0;
				 }
			 }
	 }
	 setTimeout(startScroll,delay)
	 console.log(con1.offsetHeight);
 </script>
</body>
</html>


0 回复 有任何疑惑可以回复我~

文字无缝滚动(源代码)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>向上无缝滚动</title>
<style>
body {
	font-size: 12px;
	line-height: 24px;
	text-algin: center;        /* 页面内容居中 */
}
* {
	margin: 0px;
	padding: 0px;            /*  去掉所有标签的marign和padding的值  */
}
ul {
	list-style: none;           /*  去掉ul标签默认的点样式  */
}
a img {
	border: none;        /*  超链接下,图片的边框  */
}
a {
	color: #333;
	text-decoration: none;     /* 超链接样式 */
}
a:hover {
	color: #ff0000;
}
#mooc {
	width: 399px;
	border: 5px solid #ababab;
	-moz-border-radius: 15px;      /* Gecko browsers */
	-webkit-border-radius: 15px;   /* Webkit browsers */
	border-radius: 15px;
	box-shadow: 2px 2px 10px #ababab;
	margin: 50px auto 0;
	text-align: left;               /* 让新闻内容靠左 */
}
/*  头部样式 */	
#moocTitle {
	height: 62px;
	overflow: hidden;  /* 这个一定要加上,内容超出的部分要隐藏,免得撑高头部 */
	font-size: 26px;
	line-height: 62px;
	padding-left: 30px;
	background-image: -moz-linear-gradient(top, #f05e6f, #c9394a); /* Firefox */
	background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #f05e6f), color-stop(1, #c9394a)); /* Saf4+, Chrome */
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#8fa1ff', endColorstr='#f05e6f', GradientType='0'); /* IE*/
	border: 1px solid ##f05e6f;
	-moz-border-radius: 8px 8px 0 0;      /* Gecko browsers */
	-webkit-border-radius: 8px 8px 0 0;   /* Webkit browsers */
	border-radius: 8px 8px 0 0;
	color: #fff;
	position: relative;
}
#moocTitle a {
	position: absolute;
	right: 10px;
	bottom: 10px;
	display: inline;
	color: #fff;
	font-size: 12px;
	line-height: 24px;
}
/*  底部样式 */
#moocBot {
	width: 399px;
	height: 10px;
	overflow: hidden;     /* 这个一定要加上,内容超出的部分要隐藏,免得撑高底部结构 */
}
/*  中间样式 */
#moocBox {
	height: 144px;
	width: 335px;
	margin-left: 25px;
	margin-top: 10px;
	overflow: hidden;    /*  这个一定要加,超出的内容部分要隐藏,免得撑高中间部分 */
}
#mooc ul li {
	height: 24px;
}
#mooc ul li a {
	width: 180px;
	float: left;
	display: block;
	overflow: hidden;
	text-indent: 15px;
	height: 24px;
}
#mooc ul li span {
	float: right;
	color: #999;
}
</style>
</head>

<body>
<!--  慕课网课程公告开始 -->
<div  id="mooc"> 
<!--  头部 -->
<h3 id="moocTitle">最新课程<a href="#" target="_self">更多>></a> </h3>
<!--  头部结束 --> 
<!--  中间 -->
<div  id="moocBox">
    <ul id="con1">
        <li><a href="#">1.学会html5 绝对的屌丝逆袭(案例)</a><span>2013-09-18</span></li>
        <li><a href="#">2.tab页面切换效果(案例)</a><span>2013-10-09</span></li>
        <li><a href="#">3.圆角水晶按钮制作(案例)</a><span>2013-10-21</span></li>
        <li><a href="#">4.HTML+CSS基础课程(系列)</a><span>2013-11-01</span></li>
        <li><a href="#">5.分页页码制作(案例)</a><span>2013-11-06</span></li>
        <li><a href="#">6.导航条菜单的制作(案例)</a><span>2013-11-08</span></li>
        <li><a href="#">7.信息列表制作(案例)</a><span>2013-11-15</span></li>
        <li><a href="#">8.下拉菜单制作(案例)</a><span>2013-11-22</span></li>
        <li><a href="#">9.如何实现“新手引导”效果</a><span>2013-12-06</span></li>
    </ul>
    <ul id="con2">
    </ul>
</div>
<!--  中间结束 --> 
</div>
<!--  慕课网课程公告结束 --> 

<script type="text/javascript">
 var area = document.getElementById('moocBox');
 var con1 = document.getElementById('con1');
 var con2 = document.getElementById('con2');
 var speed = 50;
 area.scrollTop = 0;
 con2.innerHTML = con1.innerHTML;
 function scrollUp(){
	 if(area.scrollTop >= con1.scrollHeight) {
		 area.scrollTop = 0;
		 }else{
		   area.scrollTop ++; 
		 } 
}
var myScroll = setInterval("scrollUp()",speed);
area.onmouseover = function(){
	 clearInterval(myScroll);
	}
area.onmouseout = function(){
	 myScroll = setInterval("scrollUp()",speed);
	}
	console.log(con1.offsetHeight);
 </script>
</body>
</html>


0 回复 有任何疑惑可以回复我~

javascript 中 offsetHeight 是对象的可见高度,包滚动条等边线,会随窗口的显示大小改变。

因为没你有你的文档结构代码及样式,无法给出具体的结论。

但经验告知,可能是你的con1下的子元素是浮动元素,但con1未有清除浮动导致。

0 回复 有任何疑惑可以回复我~
#1

marshall_stan 提问者

你好,非常感谢你的解答,但我看了代码,不是浮动的影响,浮动是设置给li里面的<a>的。 我用的代码就是课程附件里面的两个代码。麻烦再帮我看看吧,我很困惑,谢谢! 附件1:文字无缝滚动(源代码),这个里面因为已经获取了con1,所以我加了console.log(con1.offsetHeight);结果是216; 附件2:间歇性滚动(源代码),这个里面没有获取con1,所以我加了,var con1 = area.getElementsByTagName('ul')[0]; console.log(con1.offsetHeight);但是结果是0,
2015-10-03 回复 有任何疑惑可以回复我~
#2

marshall_stan 提问者

代码我贴在下面了,谢谢
2015-10-03 回复 有任何疑惑可以回复我~
#3

marshall_stan 提问者

感谢你的回答,我自己找到问题原因了,var con1 = area.getElementsByTagName('ul')[0];这句得在window.onload = function () {}里面,DOM 加载完毕才能获取到con1。
2015-10-04 回复 有任何疑惑可以回复我~
#4

歌风on 回复 marshall_stan 提问者

把这放在</body>之前的话,程序按顺序执行,这个DOM没有加载完毕吗。按理说这个ul已经加载完成了啊 不懂。。 求楼主给讲讲
2016-01-25 回复 有任何疑惑可以回复我~
查看1条回复

举报

0/150
提交
取消
信息滚动效果制作
  • 参与学习       47751    人
  • 解答问题       321    个

萌妹子带您快速学习滚动效果,掌握无缝滚动和歇间性滚动的制作方法

进入课程

scrollHeight和offsetHeight

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信