原生js实现淘宝首页点击按钮缓慢回到顶部效果

实现淘宝首页点击按钮缓慢回到顶部效果可以采用原生Javascript,下面是具体的实现步骤:

1. 获取回到顶部按钮以及页面滚动条

首先,在页面中添加“回到顶部”按钮,然后使用JS代码获取该按钮以及页面滚动条的对象:

var scrollBtn = document.getElementById('scrollBtn');
var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
var clientHeight = document.documentElement.clientHeight;

2. 给回到顶部按钮添加点击事件

给回到顶部按钮添加点击事件,点击时页面回到页面最上方:

scrollBtn.onclick = function() {
    document.documentElement.scrollTop = 0;
    document.body.scrollTop = 0;
}

3. 添加平滑滚动效果

为了达到缓慢回到页面顶部的效果,我们需要利用JS实现页面的平滑滚动。这里采用requestAnimationFrame方法来实现。在页面滚动期间,使用window.requestAnimationFrame()方法设置循环函数,来不断修改页面滚动值。具体代码如下:

scrollBtn.onclick = function(){
    var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
    var clientHeight = document.documentElement.clientHeight;
    var perSpeed = Math.round(scrollTop / 10);
    function step() {
        scrollTop = scrollTop - perSpeed;
        if (scrollTop <= 0) {
            scrollTop = 0;
            window.scrollTo(0, scrollTop);
            return;
        }
        window.scrollTo(0, scrollTop);
        requestAnimationFrame(step);
    }
    requestAnimationFrame(step);
}

示例说明1

在以下代码中,点击按钮时,页面会缓慢回到页面最顶部。具体实现中,为了实现缓慢滚动效果,采用了requestAnimationFrame()方法,通过调整滚动值,不断地调用window.scrollTo()方法来实现平滑滚动效果。这里实现了同时兼容PC端和移动端。

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>淘宝首页-点击按钮缓慢回到顶部</title>
  <style>
    #scrollBtn {
      display: none;
      position: fixed;
      bottom: 80px;
      right: 50px;
      width: 44px;
      height: 44px;
      background: #666 url('http://gtms04.alicdn.com/tps/i4/TB16s.NGXXXXXbhaXXXF8YH9XXX-99-122.png') no-repeat center center;
      cursor: pointer;
    }
    #scrollBtn:hover {
      background-color: #f40;
      -webkit-transition: background-color .2s ease-in;
      -moz-transition: background-color .2s ease-in;
      -o-transition: background-color .2s ease-in;
      transition: background-color .2s ease-in;
    }
  </style>
</head>
<body>
  <div style="height:1900px; background-color: #ddd;"></div>
  <div id="scrollBtn"></div>
  <script>
    //获取回到顶部按钮以及页面滚动条
    var scrollBtn = document.getElementById('scrollBtn');
    var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
    var clientHeight = document.documentElement.clientHeight;

    //给按钮添加点击事件
    scrollBtn.onclick = function(){
      var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
      var clientHeight = document.documentElement.clientHeight;
      var perSpeed = Math.round(scrollTop / 10);

      //平滑滚动
      function step() {
        scrollTop = scrollTop - perSpeed;
        if (scrollTop <= 0) {
          scrollTop = 0;
          window.scrollTo(0, scrollTop);
          return;
        }
        window.scrollTo(0, scrollTop);
        requestAnimationFrame(step);
      }
      requestAnimationFrame(step);
    };

    //onscroll事件,判断按钮的显示与隐藏
    window.onscroll = function () {
      scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
      if (scrollTop > clientHeight) {
        scrollBtn.style.display = 'block';
      } else {
        scrollBtn.style.display = 'none';
      }
    };
  </script>
</body>
</html>

示例说明2

在以下代码中,点击按钮时,页面会缓慢回到页面最顶部。具体实现中,为了实现缓慢滚动效果,采用了requestAnimationFrame()方法,通过调整滚动值,不断地调用window.scrollTo()方法来实现平滑滚动效果。这里使用了window.onscroll事件,同时兼容了PC端和移动端。

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>淘宝首页-点击按钮缓慢回到顶部</title>
  <style>
    #scrollBtn {
      display: none;
      position: fixed;
      bottom: 80px;
      right: 50px;
      width: 44px;
      height: 44px;
      background: #666 url('http://gtms04.alicdn.com/tps/i4/TB16s.NGXXXXXbhaXXXF8YH9XXX-99-122.png') no-repeat center center;
      cursor: pointer;
    }
    #scrollBtn:hover {
      background-color: #f40;
      -webkit-transition: background-color .2s ease-in;
      -moz-transition: background-color .2s ease-in;
      -o-transition: background-color .2s ease-in;
      transition: background-color .2s ease-in;
    }
  </style>
</head>
<body>
  <div style="height:1900px; background-color: #ddd;"></div>
  <div id="scrollBtn"></div>
  <script>
    //获取回到顶部按钮以及页面滚动条
    var scrollBtn = document.getElementById('scrollBtn');
    var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
    var clientHeight = document.documentElement.clientHeight;

    //给按钮添加点击事件
    scrollBtn.onclick = function(){
      var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
      var clientHeight = document.documentElement.clientHeight;
      var perSpeed = Math.round(scrollTop / 10);

      //平滑滚动
      function step() {
        scrollTop = scrollTop - perSpeed;
        if (scrollTop <= 0) {
          scrollTop = 0;
          window.scrollTo(0, scrollTop);
          return;
        }
        window.scrollTo(0, scrollTop);
        requestAnimationFrame(step);
      }
      requestAnimationFrame(step);
    };

    //onscroll事件,判断按钮的显示与隐藏
    window.onscroll = function () {
      scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
      if (scrollTop > clientHeight) {
        scrollBtn.style.display = 'block';
      } else {
        scrollBtn.style.display = 'none';
      }
    };
  </script>
</body>
</html>

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:原生js实现淘宝首页点击按钮缓慢回到顶部效果 - Python技术站

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

相关文章

  • 利用canvas实现的加载动画效果实例代码

    下面将为您详细讲解“利用canvas实现的加载动画效果实例代码”的完整攻略。 1. 创建canvas元素 首先,在HTML页面中创建canvas元素,并且为其设置宽高和样式,如下所示: <canvas id="myCanvas" width="200" height="200" style=&…

    JavaScript 2023年6月11日
    00
  • 关于ES6字符串的扩展详解

    关于ES6字符串的扩展详解 一、字面量增强 ES6的字符串新增了两个语法糖:`和`。 使用`可以很方便地定义多行字符串,例如: const str = `这是一个 多行字符串 `; 这样可以在一行中定义多行字符串,避免了手动添加换行符。 使用`可以很方便地嵌入变量或表达式,例如: const name = ‘Bob’; const str = `你好,${n…

    JavaScript 2023年5月28日
    00
  • vue使用prop可以渲染但是打印台报错的解决方式

    在Vue中,组件间的数据传递是通过props进行的。然而,有时候我们会在控制台看到如下的错误信息: [Vue warn]: Invalid prop: type check failed for prop “xxx”. Expected xxx, got xxx. 这个错误信息通常是由于在传递过程中,子组件收到的props数据类型与它预期的不符,或者缺少必要…

    JavaScript 2023年6月11日
    00
  • 获取URL地址中的文件名和参数的javascript代码

    获取URL地址中的文件名和参数是前端开发中常见的需求,通过Javascript代码可以轻松实现此操作。下面是一份完整的攻略。 步骤一:获取URL地址 首先需要获取当前页面的URL地址,可以使用Javascript中window对象的location属性来实现,代码如下: var currentUrl = window.location.href; 此处的cu…

    JavaScript 2023年5月27日
    00
  • JavaScript中Function函数与Object对象的关系

    在JavaScript中,函数和对象是密切相关的。每个函数都是一个对象,并且可以像对象一样使用和传递。在此过程中,函数在对象中的重要性很大。下面将详细讲解Function函数和Object对象之间的关系。 Function与Object 每一个函数都是一个Function类型的对象,因此具有Function所继承的方法和属性。函数的定义可以采用最简单的字面量…

    JavaScript 2023年5月27日
    00
  • vscode录音及语音实时转写插件开发并在工作区生成本地mp3文件附踩坑日记!

    vscode录音及语音实时转写插件开发并在工作区生成本地mp3文件附踩坑日记! 背景 语音识别技术的普及使得语音转写逐渐成为电脑输入的重要方式之一,而实时语音转写更是越来越多的应用场景。本文介绍如何在VS Code中开发一个语音实时转写插件,并将实时转写的结果保存到本地mp3文件中。 准备 在进行实时语音转写插件的开发之前,需要准备以下工具和环境: 麦克风及…

    JavaScript 2023年6月11日
    00
  • JS中注入eval, Function等系统函数截获动态代码

    注入eval、Function等系统函数可以使攻击者截获JS代码的执行过程,从而实现对网站的控制。以下是JS中注入eval、Function等系统函数的完整攻略: 针对eval的注入攻击 步骤1: 攻击者在代码中构造出可执行代码(即包含函数或变量)的字符串,然后通过eval这一系统函数来执行 eval("console.log(‘Hello, Wo…

    JavaScript 2023年5月27日
    00
  • Javascript 字符串模板的简单实现

    下面是详细的”Javascript 字符串模板的简单实现”攻略: 什么是Javascript字符串模板? Javascript字符串模板是一种用于创建字符串的方法,它可以将变量、表达式和逻辑语句嵌入字符串中,从而使字符串更易于阅读、维护和重用。使用字符串模板可以减少拼接字符串和字符串连接符,并可以使代码更加优雅、紧凑和易于维护。 怎样实现Javascript…

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