滚动宽高scrollheight
scrollheight表示元素的总高度,包括由于溢出而无法展示在网页的不可见部分
scrollwidth
scrollwidth表示元素的总宽度,包括由于溢出而无法展示在网页的不可见部分
[注意]ie7-浏览器返回值是不准确的
【1】没有滚动条时,scrollheight与clientheight属性结果相等,scrollwidth与clientwidth属性结果相等
<div id="test" ></div><script>//120 120console.log(test.scrollheight,test.scrollwidth);//120 120console.log(test.clientheight,test.clientwidth);</script>
【2】存在滚动条时,但元素设置宽高大于等于元素内容宽高时,scroll和client属性的结果相等
<div id="test" > 内容<br>内容<br></div><script>//103(120-17) 103(120-17)console.log(test.scrollheight,test.scrollwidth);//103(120-17) 103(120-17)console.log(test.clientheight,test.clientwidth);</script>
【3】存在滚动条,但元素设置宽高小于元素内容宽高,即存在内容溢出的情况时,scroll属性大于client属性
[注意]scrollheight属性存在兼容性问题,chrome和safari浏览器中,scrollheight包含padding-bottom;而ie和firefox不包含padding-bottom
<div id="test" > 内容</div><script>//chrome/safari:220(200+10+10)//firefox/ie:210(200+10)console.log(test.scrollheight);//103(120-17)console.log(test.clientheight);</script>
页面尺寸document.documentelement.clientheight表示页面的可视区域的尺寸,而document.documentelement.scrollheight表示html元素内容的实际尺寸。但是由于各个浏览器表现不一样,分为以下几种情况
【1】html元素没有滚动条时,ie和firefox的client和scroll属性始终相同,且返回可视区的尺寸大小;而safari和chrome表现正常,clientheight返回可视区域大小,而scrollheight返回元素内容大小
//firefox: 755 755//chrome: 947 8(body元素的margin)//safari: 744 8(body元素的margin)//ie: 768 768console.log(document.documentelement.clientheight,document.documentelement.scrollheight)
【2】html元素存在滚动条时,各个浏览器都表现正常。clientheight提供了视口区域的尺寸,而scrollheight则提供了元素内容的尺寸
<body ><script>//firefox: 755 1016(1000+8*2)//chrome: 947 1016(1000+8*2)//safari: 744 1016(1000+8*2)//ie: 768 1016(1000+8*2)console.log(document.documentelement.clientheight,document.documentelement.scrollheight)</script>
兼容
因此要取得文档实际高度时,要取得<html>元素的scrollheight和clientheight的最大值
var docheight = math.max(document.documentelement.scrollheight,document.documentelement.clientheight);var docwidth = math.max(document.documentelement.scrollwidth,document.documentelement.clientwidth);
滚动长度scrolltop
scrolltop属性表示被隐藏在内容区域上方的像素数。元素未滚动时,scrolltop的值为0,如果元素被垂直滚动了,scrolltop的值大于0,且表示元素上方不可见内容的像素宽度
scrollleft
scrollleft属性指示内容区域左侧隐藏的像素数量。元素未滚动时,scrollleft的值为0,如果元素被水平滚动了,scrollleft的值大于0,且表示元素左侧不可见内容的像素宽度
当滚动条滚动到内容底部时,符合以下等式
scrollheight == scrolltop + clientheight
<div id="test" > 内容</div><button id='btn1'>点击</button><div id="result"></div><script>btn1.onclick = function(){ result.innerhtml = 'scrolltop:' + test.scrolltop+';clientheight:' + test.clientheight + ';scrollheight:' + test.scrollheight}</script>
与scrollheight和scrollwidth属性不同的是,scrollleft和scrolltop是可写的
[注意]为scrollleft和scrolltop赋值为负值时,并不会报错,而是静默失败
<div id="test" > 内容</div><button id='btn1'>向下滚动</button><button id='btn2'>向上滚动</button><script>btn1.onclick = function(){test.scrolltop += 10;}btn2.onclick = function(){test.scrolltop -= 10;}</script>
页面滚动理论上,通过document.documentelement.scrolltop和scrollleft可以反映和控制页面的滚动;但是chrome和safari浏览器是通过document.body.scrolltop和scrollleft来控制的
<body ><button id='btn1' >点击</button><div id="result" ></div><script>btn1.onclick = function(){ result.innerhtml = 'html的scrolltop:' + document.documentelement.scrolltop +';body的scrolltop:' + document.body.scrolltop;}</script> </body>
所以,页面的滚动高度兼容写法是
var docscrolltop = document.documentelement.scrolltop || document.body.scrolltop
回到顶部
可以利用scrolltop来实现回到顶部的功能
function scrolltop(){ if((document.body.scrolltop || document.documentelement.scrolltop) != 0){ document.body.scrolltop = document.documentelement.scrolltop = 0; }}
<body ><button id='btn' >回到顶部</button><script>function scrolltop(){ if((document.body.scrolltop || document.documentelement.scrolltop) != 0){ document.body.scrolltop = document.documentelement.scrolltop = 0; }}btn.onclick = scrolltop;</script></body>
还有两个window的只读属性可以获取整个页面滚动的像素值,它们是pagexoffset和pageyoffset
pagexoffset
pagexoffset表示水平方向上页面滚动的像素值
pageyoffset
pageyoffset表示垂直方向上页面滚动的像素值
[注意]ie8-浏览器不支持
<body ><button id='btn1' >点击</button><div id="result" ></div><script>btn1.onclick = function(){ result.innerhtml = 'pageyoffset:' + window.pageyoffset;}</script> </body>
滚动方法scrollto(x,y)
scrollto(x,y)方法滚动当前window中显示的文档,让文档中由坐标x和y指定的点位于显示区域的左上角
<body ><button id='btn' >滚动</button><script>btn.onclick = function(){scrollto(0,0);}</script>
scrollby(x,y)
scrollby(x,y)方法滚动当前window中显示的文档,x和y指定滚动的相对量
<body ><button id='btn1' >向下滚动</button><button id='btn2' >向上滚动</button><script>btn1.onclick = function(){scrollby(0,100);}btn2.onclick = function(){scrollby(0,-100);}</script>
【小应用】
利用scrollby()加setinterval计时器实现简单的快速滚动功能
<body ><button id='btn1' >开始滚动</button><button id='btn2' >停止滚动</button><script>var timer = 0;btn1.onclick = function(){ timer = setinterval(function(){ scrollby(0,10); },100)}btn2.onclick = function(){ clearinterval(timer); timer = 0;}</script>
scrollintoview()
element.scrollintoview方法滚动当前元素,进入浏览器的可见区域
该方法可以接受一个布尔值作为参数。如果为true,表示元素的顶部与当前区域的可见部分的顶部对齐(前提是当前区域可滚动);如果为false,表示元素的底部与当前区域的可见部分的尾部对齐(前提是当前区域可滚动)。如果没有提供该参数,默认为true
<body ><div id="test" ></div><button id='btn1' >滚动到页面开头</button><button id='btn2' >滚动到页面结尾</button><script>btn1.onclick = function(){ test.scrollintoview();};btn2.onclick = function(){ test.scrollintoview(false);}</script>
scrollintoviewifneeded()
scrollintoviewifneeded(true)方法只在当前元素在视口中不可见的情况下,才滚动浏览器窗口或容器元素,最终让它可见。如果当前元素在视口中可见,这个方法什么也不做
当aligncenter参数设置为true时,元素会尽可能地显示在视口的垂直中心位置上
[注意]该方法只有chrome和safari支持
<body ><div id="test" ></div><button id='btn' >滚动到页面中间</button><script>btn.onclick = function(){ test.scrollintoviewifneeded(true)};</script>
scrollbylines(linecount)
scrollbylines(linecount)方法将元素的内容滚动指定的行髙,linecount值可以是正值, 也可以是负值
[注意]该方法只有safari支持
<div id="test" > 内容</div><button id='btn1'>向下滚动</button><button id='btn2'>向上滚动</button><script>btn1.onclick = function(){test.scrollbylines(1);}btn2.onclick = function(){test.scrollbylines(-1);}</script>
scrollbypages(pagecount)
scrollbypages(pagecount)方法将元素的内容滚动指定的页面高度,具体高度由元素的高度决定
[注意]该方法只有safari支持
<div id="test" > 内容</div><button id='btn1'>向下滚动</button><button id='btn2'>向上滚动</button><script>btn1.onclick = function(){test.scrollbypages(1);}btn2.onclick = function(){test.scrollbypages(-1);}</script>
滚动事件在页面中相应元素发生变化时,scroll事件会在window对象上触发。当然,scroll事件也可以用在有滚动条的元素上
<body ><div id="result" ></div><script>window.onscroll = function(){ result.innerhtml = '页面的scrolltop:' + (document.documentelement.scrolltop||document.body.scrolltop);}</script> </body>
以上就是滚动scroll如何理解的详细内容。