zoukankan      html  css  js  c++  java
  • 原生js返回顶部(匀速、由快到慢)

    在项目中我们经常有需求要求页面滚动到一定位置时出现返回顶部按钮,点击即返回顶部。

    方法一: 锚点,这是最简单的。(a标签的href属性等于一直要到达位置元素的id值)

    方法二: js直接给页面根节点设置scrollTop为0。

    // 兼容写法
    document.body.scrollTop = 0;
    document.documentElement.scrollTop = 0; 

    But,以上都是直接返回,不带任何过渡效果。作为有追求的前端,这太low了。

    以下提供两种带过渡效果的原生方法和一种jquery方法:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <style>
            li { height: 100px;border-bottom: 1px solid #ccc; }
            #toTop {display: none;position: fixed;right: 20px;bottom: 20px; background: #ccc; border-radius: 5px;padding: 10px 15px;}
        </style>
    </head>
    <body>
        <div class="demo" style="height: 2000px;">
            <ul>
                <li>demo1</li>
                <li>demo2</li>
                <li>demo3</li>
                <li>demo4</li>
                <li>demo5</li>
                <li>demo6</li>
                <li>demo7</li>
                <li>demo8</li>
                <li>demo9</li>
                <li>demo10</li>
            </ul>
        </div>
        <div id="toTop">back</div>
    </body>
    </html>
    <script>
       // 匀速返回 (定时器开启前速度已经计算好) var toTop = document.querySelector('#toTop') toTop.onclick = function(){ var dom = document.querySelector('body'); var h = dom.scrollTop; var subH = parseInt(h / 50); var timer = setInterval(function(){ h -= subH; if(h <= 0){ dom.scrollTop = 0; clearInterval(timer); }else{ dom.scrollTop = h; } },1) } window.onscroll = function(){ if(window.pageYOffset>300){ toTop.style.display = "block"; }else{ toTop.style.display = "none"; } } </script>
    function goTop() {
         // 由快到慢 (每次开启定时器都重新计算速度) timer
    = setInterval( function(){ //获取滚动条的滚动高度 var scrollTop = document.documentElement.scrollTop || document.body.scrollTop; //用于设置速度差,产生缓动的效果 var speed = Math.floor(-scrollTop / 8); document.documentElement.scrollTop = document.body.scrollTop = scrollTop + speed;//用纯数字赋值 isTop =true; //用于阻止滚动事件清除定时器 if(scrollTop == 0){ clearInterval(timer); } },50 ); }

    另外,jQuery实现方式如下

    <script>
        $(function(){
            $(window).on("scroll",function(){
                var display = window.pageYOffset > 300 ? "block" : "none";
                $("#toTop").css("display",display);
            });
            $("#toTop").on("click",function(){
                $("body").animate({
                    "scrollTop": 0
                },300);
            })
        })
    </script>
  • 相关阅读:
    deepin 配置开发环境
    Springcloud学习笔记(一)总述
    Linux(Centos7) 配置 Tomcat 开机自启
    Linux下安装JDK8
    CentOS7 防火墙和端口管理
    Linux 下安装 MySQL8 教程
    WPF使用CefSharp嵌入网页
    WPF使用第三方字体(TTF字体)
    Hive学习笔记 --Permission denied: user=anonymous, access=READ
    SpringBoot jar 注册windows服务
  • 原文地址:https://www.cnblogs.com/hcxy/p/7441439.html
Copyright © 2011-2022 走看看