原生JavaScript实现按钮点击 滚动到顶部效果

			window.onload = function(){
	            var btn = document.getElementById("scrollTop");
	            var timer = null;
	            var oScroll = true;
	            //滚动条事件,触发时清空定时器
	            window.onscroll = function(){
	                if(!oScroll){
	                    clearInterval(timer);
	                }
	                oScroll = false;
	            }
	            btn.onclick = function(){
	                //加入定时器让他又快到慢滚动到顶部
	                timer = setInterval(function(){
	                    //获取当前scrollTop的高度位置(兼容ie和chrom浏览器)
	                    var oTop = document.documentElement.scrollTop || document.body.scrollTop;
	                    //设置速度由快到慢
	                    var ispeed = Math.floor(-oTop / 7);
	                    document.documentElement.scrollTop = document.body.scrollTop = oTop + ispeed;
	                    oScroll = true;
	                    if(oTop == 0){
	                        clearInterval(timer);
	                    }
	                },30);
	            }
        	}

上文原文:https://blog.csdn.net/liuxin_1991/article/details/78792697

模仿上文的风格写了一个在div内的效果
首先需要弄明白这几个属性:
clientHeight:包括padding但不包括border、水平滚动条、margin的元素的高度。对于inline的元素这个属性一直是0,单位px,只读元素。
offsetHeight:包括padding、border、水平滚动条,但不包括margin的元素的高度。对于inline的元素这个属性一直是0,单位px,只读元素。
scrollHeight:因为子元素比父元素高,父元素不想被子元素撑的一样高就显示出了滚动条,在滚动的过程中本元素有部分被隐藏了,scrollHeight代表包括当前不可见部分的元素的高度。而可见部分的高度其实就clientHeight,也就是scrollHeight>=clientHeight恒成立。在有滚动条时讨论scrollHeight才有意义,在没有滚动条时scrollHeight == clientHeight恒成立。单位px,只读元素。
offsetTop:当前元素顶部距离最近父元素顶部的距离,和有没有滚动条没有关系。单位px,只读元素。
scrollTop:代表在有滚动条时,滚动条向下滚动的距离也就是元素顶部被遮住部分的高度。在没有滚动条时scrollTop==0恒成立。单位px,可读可设置。
摘自:https://www.imooc.com/article/17571

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>JS实现效果-点击按钮返回到页面顶部</title>
        <style>
           #container{
           		width: 800px;
           		height: 600px;
           		margin:auto;
           		top: 0;
           		left: 0;
           		right: 0;
           		bottom: 0;
           		background: gainsboro;
           		overflow: scroll;
           }
           
        </style>
        
        <script type="text/javascript">
        	
        	window.onload = function(){
	            var btn = document.getElementById("scrollTop");
	            var con = document.getElementById("container");
	            var timer = null;
	            var oScroll = true;
	            //滚动条事件,触发时清空定时器
	            con.onscroll = function(){
	                if(!oScroll){
	                    clearInterval(timer);
	                }
	                oScroll = false;
	            }
	            btn.onclick = function(){
	                //加入定时器让他又快到慢滚动到顶部
	                timer = setInterval(function(){
	                    var oTop = con.scrollTop;
	                 
	                    //设置速度由快到慢
	                    var ispeed = Math.floor(-oTop / 7);
	                    con.scrollTop = oTop + ispeed;
	                    oScroll = true;
	                    if(oTop == 0){
	                        clearInterval(timer);
	                    }
	                },30);
	            }
        	}
        </script>
        
    </head>
    <body>
    	<button id="scrollTop">
    		TOP
    	</button>
        <div id="container">
        	<div>
        		......//测试部分省略
        	</div>
        </div>
    </body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值