JavaScript实现网页带动画返回顶部的方法详解

yizhihongxing

JavaScript实现网页带动画返回顶部的方法详解

当我们浏览很长的网页时,我们会发现有时候需要快速回到页面的顶部。通常,我们可以直接点击页面的滚动条或者键盘的 Home 键,但这种方式比较突兀。另外,很多时候我们需要一个能够流畅返回顶部的效果。在这里,我们将详细讲解使用JavaScript实现网页带动画返回顶部的方法。

实现步骤

实现网页带动画返回顶部的方法,具体步骤如下:

  1. 判断页面是否需要显示“返回顶部”按钮。
  2. 给“返回顶部”按钮添加点击事件。
  3. 在点击事件中,平滑滚动页面到顶部。

下面,我们将分别介绍每个步骤的实现方法。

判断页面是否需要显示“返回顶部”按钮

首先,我们需要判断页面是否已经滚动到一定高度,如果已经滚动则需要显示“返回顶部”按钮,否则不需要。可以使用scrollTop属性获取页面当前垂直滚动的距离,如下:

// 获取窗口滚动条距离页面顶部的距离
let scrollTop = document.documentElement.scrollTop || document.body.scrollTop;

说明:上述代码可以兼容多种浏览器。

接下来,我们可以根据scrollTop的值来判断是否需要显示“返回顶部”按钮,如果大于某个阈值,则显示按钮,否则隐藏按钮。例如,下面的代码会在页面滚动超过100像素后,显示一个返回顶部的超链接:

window.onscroll = function(){
    var toTop = document.querySelector('.to-top'); // 获取返回顶部按钮的元素
    let scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
    if(scrollTop>100){
        toTop.style.display = 'block';
    } else {
        toTop.style.display = 'none';
    }
}

给“返回顶部”按钮添加点击事件

接下来,我们需要给“返回顶部”按钮添加点击事件。通过设置window.scroll()方法的第三个参数,可以实现平滑滚动页面。例如,下面的代码会在点击按钮后,平滑地滚动页面至顶部:

var toTopButton = document.querySelector('.to-top');
toTopButton.addEventListener('click',function(){
    scrollTo(0,0,{
        duration:800,
        timingFunction:function(timeFraction){
            return timeFraction;
        }
    });
});

function scrollTo(to,duration,callback){
    var element = document.documentElement;
    var from = element.scrollTop;
    var start = performance.now();

    function scroll(timestamp){
        var time = timestamp - start;
        var progress = Math.min(time/duration,1);

        function easeOutQuad(progress){
            return progress * (2 - progress);
        };

        element.scrollTop = from + (to - from) * easeOutQuad(progress);

        if(progress < 1){
            requestAnimationFrame(scroll);
        } else {
            callback();
        }
    }

    requestAnimationFrame(scroll);
}

平滑滚动页面到顶部

最后,我们需要实现一个平滑滚动页面的方法,这个方法会根据滚动距离的时间来调整滚动速度。例如,下面的代码会实现一个简单的缓动函数,根据进度值返回当前动画阶段的滚动距离:

function scrollTo(to,duration,callback){
    var element = document.documentElement;
    var from = element.scrollTop;
    var start = performance.now();

    function scroll(timestamp){
        var time = timestamp - start;
        var progress = Math.min(time/duration,1);

        function easeOutQuad(progress){
            return progress * (2 - progress);
        };

        element.scrollTop = from + (to - from) * easeOutQuad(progress);

        if(progress < 1){
            requestAnimationFrame(scroll);
        } else {
            callback();
        }
    }

    requestAnimationFrame(scroll);
}

将这段代码与“返回顶部”按钮点击事件结合使用,即可完成页面的平滑滚动到顶部。

示例

这里提供两个示例,一个是基于jQuery的示例,另一个是基于原生JavaScript的示例。

基于jQuery的示例

<!DOCTYPE html>
<html>
    <head>
        <title>返回顶部示例(jQuery)</title>
    </head>
    <body>
        <div style="height:2000px;"></div>
        <a href="#" class="back-to-top">返回顶部</a>
        <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
        <script>
            $(function(){
                // 返回顶部按钮显示/隐藏逻辑
                $(window).scroll(function(){
                    if ($(window).scrollTop()>=100){
                        $('.back-to-top').fadeIn();
                    } else {
                        $('.back-to-top').fadeOut();
                    }
                });

                // 平滑滚动至顶部
                $('.back-to-top').click(function(){
                    $('html,body').animate({scrollTop:0},500);
                    return false;
                });
            });
        </script>
    </body>
</html>

基于原生JavaScript的示例

<!DOCTYPE html>
<html>
    <head>
        <title>返回顶部示例(JavaScript)</title>
    </head>
    <body>
        <div style="height:2000px;"></div>
        <a href="#" class="back-to-top">返回顶部</a>
        <script>
            // 返回顶部按钮显示/隐藏逻辑
            window.onscroll = function(){
                var toTop = document.querySelector('.back-to-top');
                let scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
                if(scrollTop>100){
                    toTop.style.display = 'block';
                } else {
                    toTop.style.display = 'none';
                }
            }

            // 平滑滚动至顶部
            document.querySelector('.back-to-top').onclick = function(){
                var scrollTop = window.scrollY;
                scrollTo(scrollTop,0,500);
            }

            function scrollTo(from,to,duration){
                var start = performance.now();
                var element = document.documentElement;

                function scroll(timestamp){
                    var time = timestamp - start;
                    var progress = Math.min(time/duration,1);

                    function easeOutQuad(progress){
                        return progress * (2 - progress);
                    };

                    element.scrollTop = from + (to - from) * easeOutQuad(progress);

                    if(progress < 1){
                        requestAnimationFrame(scroll);
                    }
                }

                requestAnimationFrame(scroll);
            }
        </script>
    </body>
</html>

通过以上示例,你可以学习到如何使用jQuery或原生JavaScript实现平滑滚动页面回到顶部的效果。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript实现网页带动画返回顶部的方法详解 - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • JavaScript中数组对象的那些自带方法介绍

    下面就为大家详细介绍JavaScript中数组对象的自带方法。 1. 增加、删除、修改元素 push、pop、shift、unshift方法 push方法:在数组的末尾插入一个或多个元素,并返回数组新的长度。 pop方法:删除数组的最后一个元素,并返回该元素的值。 shift方法:删除数组的第一个元素,并返回该元素的值。 unshift方法:在数组的开头插入…

    JavaScript 2023年5月27日
    00
  • JavaScript 数组基本操作全解

    JavaScript 数组基本操作全解 什么是 JavaScript 数组? JavaScript 数组是存储值的有序集合。它可以存储任何类型的值,例如数字、字符串和对象。 数组的每个元素都有一个数字索引,用于访问数组中的元素。 如何创建 JavaScript 数组? 可以使用以下两种方式创建 JavaScript 数组: 1.直接赋值 let fruits…

    JavaScript 2023年5月18日
    00
  • javascript dom 基本操作小结

    Javascript DOM 基本操作小结 在编写基于Web的Javascript应用程序时,经常需要对Document Object Model(DOM)进行操作。本文将介绍DOM基本操作的相关知识,并提供一些示例。 什么是DOM? DOM是指文档对象模型(Document Object Model),用于在HTML或XML文档中表示和操作元素。DOM将整…

    JavaScript 2023年6月10日
    00
  • JavaScript高级程序设计之变量与作用域

    JavaScript高级程序设计中的变量和作用域是一个基础而又重要的概念。下面是一个详细的攻略,帮助你深入理解变量和作用域。 变量 声明变量 声明变量是在程序中创建变量的过程。在JavaScript中,可以使用三种关键字来声明变量: var let const 其中,var是ES5的语法,let和const是ES6的语法。使用var定义的变量的作用域是在函数…

    JavaScript 2023年5月27日
    00
  • 利用JS实现文字的聚合动画效果

    下面是“利用JS实现文字的聚合动画效果”的完整攻略: 1. 需求 我们需要实现一个文字聚合的动画效果,即文字以某种规律逐渐聚拢到一起,并最终形成一个整体。 2. 实现步骤 要实现这样的效果,我们可以按照以下步骤进行: 2.1. 准备工作 首先,我们需要一些基础的HTML和CSS来构造页面,同时需要引入动画所需的JS文件,例如TweenMax或Anime.js…

    JavaScript 2023年6月10日
    00
  • 使用JavaScript实现ajax的实例代码

    使用JavaScript实现ajax的攻略分为以下几个步骤: 1. 准备工作 使用ajax需要使用XMLHttpRequest(XHR)对象,该对象是JavaScript中的原生对象,所以无需下载或引入其他插件。在使用前,需要实例化一个XHR对象,方法如下: var xhr = new XMLHttpRequest(); 2. 发送请求 XHR对象通过ope…

    JavaScript 2023年6月11日
    00
  • AJAX的使用方法详解

    关于”AJAX的使用方法详解”,我可以给你提供以下信息: AJAX的使用方法详解 基本概念 AJAX(Asynchronous JavaScript and XML)是一种用于创建快速动态网页的技术。它通过异步的方式与服务器进行数据交互,不需要刷新整个页面就可以实现部分内容的更新和任意的服务器通信。 AJAX的优点 可以部分更新网页,提高用户的操作体验; 可…

    JavaScript 2023年6月11日
    00
  • ES6基础语法之对象介绍

    ES6基础语法之对象介绍 在ES6中,新的语法规范,对象展开操作符、对象方法、计算属性名以及内置Object属性等,在对象的定义与操作中起到了很大的作用。 对象基础 在ES6中,我们可以通过对象字面量的方式来创建一个对象,如下所示: let obj = { name: ‘张三’, age: 18, sex: ‘男’ }; ES6还引入了一个新的关键字let来…

    JavaScript 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部