zoukankan      html  css  js  c++  java
  • JS实现回到顶部效果

    最近在慕课网看了一个案例教程——回到顶部效果(原生js实现)。由于这个效果比较实用,而且不难,所以看后也跟着实现了一次,效果还不错,于是做做笔记,以备不时之需!

    <a href="javascript:;" id="btn" title="回到顶部"></a>

    这个a标签就是用来实现回到顶部的链接,其中 href=”javascript:;”是用来阻止a标签的默认行为,因为我们是要触发点击事件让滚动条回到顶部,而不是跳转页面。当然,如果你将其设置为 href=””,也会默认跳转到页面顶部,但是用户体验就比较差,我们主要还是想实现一种缓动的效果。OK,下面为a标签设置它的样式:

    #btn {width:40px; height:40px; position:fixed; right:25px; bottom:10px; display:none; background:url(images/top_bg.png) no-repeat left top;}
    #btn:hover {background:url(images/top_bg.png) no-repeat 0 -39px;}

    top_bg     

    这里将a标签通过 position:fixed 固定定位在页面的右下角,具体位置可以通过 right 和 bottom 细调。给a标签设置背景图像,就是上面这张图片.默认情况是显示上半部分的图像,即40 X 40,这里由于图像大小的原因(40 X 80),故可以直接将背景位置设置 left top 。并且默认先隐藏a标签,当我们滚动页面时,如果滚动高度大于我们电脑可视区域时再将a标签显示出来,这个主要是用JS实现,下面会说! a标签的悬浮效果,其实很简单,只要将背景图像的位置改一下就行了,具体参考上面css代码!

    现在回到顶部按钮的样式有了,接下来就是JS实现当点击该按钮时缓动回到顶部的效果,代码如下:

    window.onload = function(){
        var obtn = document.getElementById('btn');  //获取回到顶部按钮的ID
        var clientHeight = document.documentElement.clientHeight;   //获取可视区域的高度
        var timer = null; //定义一个定时器
        var isTop = true; //定义一个布尔值,用于判断是否到达顶部
    
        window.onscroll = function(){         //滚动条滚动事件
    
            //获取滚动条的滚动高度
            var osTop = document.documentElement.scrollTop || document.body.scrollTop; 
    
            if(osTop >= clientHeight){  //如果滚动高度大于可视区域高度,则显示回到顶部按钮
                obtn.style.display = 'block';
            }else{         //否则隐藏
                obtn.style.display = 'none';
            }
    
            //主要用于判断当 点击回到顶部按钮后 滚动条在回滚过程中,若手动滚动滚动条,则清除定时器
            if(!isTop){
    
                clearInterval(timer);
            }
            isTop = false;
    
        }
    
        obtn.onclick = function(){    //回到顶部按钮点击事件
            //设置一个定时器
            timer = setInterval(function(){
                //获取滚动条的滚动高度
                var osTop = document.documentElement.scrollTop || document.body.scrollTop;
                //用于设置速度差,产生缓动的效果
                var speed = Math.floor(-osTop / 6);
                document.documentElement.scrollTop = document.body.scrollTop = osTop + speed;
                isTop =true;  //用于阻止滚动事件清除定时器
                if(osTop == 0){
                    clearInterval(timer);
                }
            },30);
        }
    }

    那么到此,我们的回到顶部效果就可以实现了,可以拿到浏览器测试一下。其实回到顶部效果的实现方法不少,这里只是一种实现方案,以供参考!

  • 相关阅读:
    184. Department Highest Salary【leetcode】sql,join on
    181. Employees Earning More Than Their Managers【leetcode】,sql,inner join ,where
    178. Rank Scores【leetcode】,sql
    177. Nth Highest Salary【leetcode】,第n高数值,sql,limit,offset
    176. Second Highest Salary【取表中第二高的值】,sql,limit,offset
    118. Pascal's Triangle【LeetCode】,java,算法,杨辉三角
    204. Count Primes【leetcode】java,算法,质数
    202. Happy Number【leetcode】java,hashSet,算法
    41. First Missing Positive【leetcode】寻找第一个丢失的整数,java,算法
    删除
  • 原文地址:https://www.cnblogs.com/jr1993/p/4420504.html
Copyright © 2011-2022 走看看