原生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日

相关文章

  • 详解JS内存空间

    下面是详解JS内存空间的完整攻略。 什么是JS内存空间 JS内存空间是指JS程序运行时候所使用的内存区域。这个内存区域分为两个部分:栈内存和堆内存。在JS程序运行时,变量和函数都要被存储在内存空间中,以便被调用和使用。 栈内存和堆内存 栈内存 栈内存是以FIFO(先进先出)的方式存储数据的,它的存储方式和变量的生命周期有关系。当一个函数被调用时,会自动在栈内…

    JavaScript 2023年6月11日
    00
  • 微信小程序发布新版本时自动提示用户更新的方法

    下面是关于微信小程序发布新版本时自动提示用户更新的方法的完整攻略: 1. 使用微信官方提供的更新方法 微信官方提供了一个检查更新的API,可以轻松地实现版本检查功能,并自动提示用户更新。具体步骤如下: 在app.js文件中使用wx.getUpdateManager()方法获取小程序更新管理器实例。 javascript const updateManager…

    JavaScript 2023年6月10日
    00
  • java Signleton模式详解及示例代码

    当我们需要保证一个类在整个应用程序中只有一个实例时,可以采用单例模式。其中的“单例”意味着单个实例。在Java中,有多种方法可以实现单例模式,其中比较简单且常用的一种方法是使用“懒汉式”的单例模式。 什么是 Singleton 模式? Singleton 模式是设计模式的一种,它可以确保在整个应用程序中只有一个特定的实例。在Java中,Singleton模式…

    JavaScript 2023年5月28日
    00
  • JS.elementGetStyle(element, style)应用示例

    下面就详细讲解一下“JS.elementGetStyle(element, style)应用示例”的完整攻略。 标题 首先,我们需要用到的是“JS.elementGetStyle(element, style)”函数。这个函数是获取一个元素的样式属性值的通用方法。 代码示例 我们可以通过以下代码示例来说明这个函数的使用: var element = docu…

    JavaScript 2023年6月10日
    00
  • JS中异常抛出和处理方法图文详解

    JS中异常抛出和处理方法图文详解 JavaScript是一门较为灵活的语言,开发者可以根据自己的喜好和习惯写出各种风格的代码。然而,这种灵活性也增加了代码出错的可能性。当JavaScript代码遇到错误时,会发生异常抛出。本文将详细介绍JS中异常抛出和处理的方法,包括何时需要抛出异常,以及如何捕捉和处理异常。 何时需要抛出异常 在JavaScript开发中,…

    JavaScript 2023年5月18日
    00
  • javascript中 try catch用法

    关于“JavaScript中try catch用法”的完整攻略,我为您总结如下: 什么是try catch try catch 是一个 JavaScript 异常处理机制,通过 try 语句块可以捕获代码中的异常,并在 catch 语句块中对异常进行处理,保证代码的正常执行。 try catch 语句格式 try { // 可能会抛出错误的代码 } catc…

    JavaScript 2023年5月28日
    00
  • jquery判断复选框选中状态以及区分attr和prop

    当我们在开发网站时,经常需要使用jQuery来操作复选框的选中状态。但是,由于jQuery的版本和浏览器的不同,有时候我们会遇到一些坑。本次攻略就来详细讲解如何使用jQuery判断复选框的选中状态,并探讨attr和prop两种方法之间的区别与使用场景。 一、使用prop方法判断复选框选中状态 jQuery的prop方法可以获取和设置HTML元素的属性值。对于…

    JavaScript 2023年6月11日
    00
  • 在js中使用”with”语句中跨frame的变量引用问题

    在JavaScript中,我们可以使用with语句来简化某些代码块的书写,从而使得代码更加简洁易读。但是,在使用with语句时需要注意,在跨frame的情况下,可能会引起变量引用的问题,尤其是在涉及到变量作用域的问题时。 下面是在JS中使用with语句中跨frame的变量引用问题的完整攻略: 问题的表现 假设在sample.html文件中,我们有一个名为fr…

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