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

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编码小技巧分享 概述 JavaScript是一门常用的脚本编程语言,用于网页前端开发。面对日益复杂的开发需求,编写高效、稳定、易于维护的JavaScript代码显得尤为重要。本文将分享一些实用的JavaScript编码小技巧,帮助你提高开发效率、提升代码质量。 小技巧一:避免使用全局变量 在JavaScript中,全局变量具有全局作用域,…

    JavaScript 2023年5月20日
    00
  • javascript 打印内容方法小结

    下面是关于“JavaScript 打印内容方法小结”的详细攻略。 一. JavaScript中的console.log() console.log()是JavaScript中最常用的输出方法,可以在控制台中打印内容。以下是使用console.log()打印的示例代码: console.log("Hello, world!"); // 打印…

    JavaScript 2023年5月28日
    00
  • JavaScript创建、读取和删除cookie

    创建、读取、删除cookie是前端JavaScript开发中常见的任务。下面,我将分别详细讲解这三个任务的步骤。 创建cookie 创建cookie的步骤如下: 使用document.cookie属性设置cookie的键值对。 设置cookie的可选参数(如过期时间、路径、域名等)。 下面是一个设置名为”username”,值为”john”的cookie: …

    JavaScript 2023年6月10日
    00
  • JavaScript 操作宏任务与微任务

    JavaScript 引擎在执行任务时,有两种类型的任务:宏任务(macro task)和微任务(micro task)。它们之间的差别在于执行顺序和触发方式,因此理解它们的区别很重要,也有助于我们编写更高效、优雅的代码。 什么是宏任务和微任务? 在 JavaScript 中,宏任务可以理解为当前执行栈中的任务,例如 script(整体代码)、setTime…

    JavaScript 2023年5月28日
    00
  • js判断鼠标位置是否在某个div中的方法

    要判断鼠标位置是否在某个div中,可以通过以下步骤实现。 第一步:获取鼠标的位置信息 要判断鼠标位置是否在某个div中,首先需要获取鼠标在页面中的位置信息。可以通过以下代码来获取: document.addEventListener(‘mousemove’, function(e) { var x = e.clientX; var y = e.clientY…

    JavaScript 2023年6月11日
    00
  • Javascript Date getTimezoneOffset() 方法

    JavaScript 中的 getTimezoneOffset() 方法用于获取本地时间与 UTC 时间之间的时差,以分钟为单位。在本教程中,我们将详细介绍 getTimezoneOffset() 方法的使用方法。 getTimezoneOffset() 方法的基本语法如下: date.getTimezoneOffset() 其中,date 是要获取时差的日…

    JavaScript 2023年5月11日
    00
  • 简单了解Backbone.js的Model模型以及View视图的源码

    下面我将详细讲解“简单了解Backbone.js的Model模型以及View视图的源码”的完整攻略。 Backbone.js简介 Backbone.js是一个轻量级的JavaScript框架,它可以帮助我们更好地组织JavaScript代码,同时提供了一套完整的MVC(Model-View-Controller)框架,使我们的代码更加简洁高效。 Model模…

    JavaScript 2023年6月11日
    00
  • Javascript中判断一个值是否为undefined的方法详解

    当我们使用JavaScript编写代码时,通常需要对变量或函数返回值是否为“未定义(undefined)”进行判断,JavaScript中判断一个值是否为undefined的方法有很多种,下面我们就逐个进行说明。 1.使用typeof typeof是用来检测变量类型的操作符,如果变量未定义,则返回”undefined”,因此可以用typeof来判断一个值是否…

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