js节流函数 + 过渡动画实现回到顶部效果

节流函数: 我理解的节流就是减少代码的执行频率,保证一段时间内只执行一次代码。

一个返回顶部的案例

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
      * {
        margin: 0;
        padding: 0;
      }
      img {
        max-width: 99%;
        max-height: 500px;
        float: left;
        padding: 20px;
        box-sizing: border-box;
      }
      .backTop {
        position: fixed;
        bottom: 50px;
        right: -150px;
        padding: 10px;
        background-color: #ccc;
        cursor: pointer;
        display: none;
        transition: all 0.5s;
      }
      .backTop:hover {
        background-color: blueviolet;
        color: #fff;
      }
      .box {
        width: 100%;
        height: 550px;
        overflow-y: auto;
        padding-bottom: 10px;
      }
    </style>
  </head>
  <body>
    <div class="box"></div>
    <div class="backTop">
      回到顶部
    </div>
    <script>
      setTimeout(() => {
        document.querySelector(".box").innerHTML = `
      <img src="http://pic.topmeizi.com/wp-content/uploads/2017a/04/08/01.jpg"><br>
        <img src="http://pic.topmeizi.com/wp-content/uploads/2017a/04/08/02.jpg"><br>
        <img src="http://pic.topmeizi.com/wp-content/uploads/2017a/04/08/03.jpg"><br>
        <img src="http://pic.topmeizi.com/wp-content/uploads/2017a/04/08/04.jpg"><br>
        <img src="http://pic.topmeizi.com/wp-content/uploads/2017a/04/08/05.jpg"><br>
        <img src="http://pic.topmeizi.com/wp-content/uploads/2017a/04/08/06.jpg"><br>
        <img src="http://pic.topmeizi.com/wp-content/uploads/2017a/04/08/07.jpg"><br>
        <img src="http://pic.topmeizi.com/wp-content/uploads/2017a/04/08/08.jpg"><br>
        <img src="http://pic.topmeizi.com/wp-content/uploads/2017a/04/08/09.jpg"><br>
        <img src="http://pic.topmeizi.com/wp-content/uploads/2017a/01/07/01.jpg"><br>
          <img src="http://pic.topmeizi.com/wp-content/uploads/2017a/01/07/02.jpg"><br>
          <img src="http://pic.topmeizi.com/wp-content/uploads/2017a/01/07/03.jpg"><br>
          <img src="http://pic.topmeizi.com/wp-content/uploads/2017a/01/07/04.jpg"><br>
          <img src="http://pic.topmeizi.com/wp-content/uploads/2017a/01/07/05.jpg"><br>
          <img src="http://pic.topmeizi.com/wp-content/uploads/2017a/01/07/06.jpg"><br>
          <img src="http://pic.topmeizi.com/wp-content/uploads/2017a/01/07/07.jpg"><br>
          <img src="http://pic.topmeizi.com/wp-content/uploads/2017a/01/07/08.jpg"><br>
          <img src="http://pic.topmeizi.com/wp-content/uploads/2017a/01/07/09.jpg"><br>
          <img src="http://pic.topmeizi.com/wp-content/uploads/2017a/01/07/10.jpg"><br>
          <img src="http://pic.topmeizi.com/wp-content/uploads/2017a/01/07/11.jpg"><br>
          <img src="http://pic.topmeizi.com/wp-content/uploads/2017a/04/06/01.jpg"><br>
      <img src="http://pic.topmeizi.com/wp-content/uploads/2017a/04/06/02.jpg"><br>
      <img src="http://pic.topmeizi.com/wp-content/uploads/2017a/04/06/03.jpg"><br>
      <img src="http://pic.topmeizi.com/wp-content/uploads/2017a/04/06/04.jpg"><br>
      <img src="http://pic.topmeizi.com/wp-content/uploads/2017a/04/06/05.jpg"><br>
      <img src="http://pic.topmeizi.com/wp-content/uploads/2017a/04/06/06.jpg"><br>
      <img src="http://pic.topmeizi.com/wp-content/uploads/2017a/04/06/07.jpg"><br>
      <img src="http://pic.topmeizi.com/wp-content/uploads/2017a/04/06/08.jpg"><br>
      <img src="http://pic.topmeizi.com/wp-content/uploads/2017a/04/06/09.jpg">
      `;
      }, 100);
      const box = document.querySelector(".box");
      const backTop = document.querySelector(".backTop");
      let flag = true;
      box.onscroll = () => {
        if (flag) {
          console.log("滚动事件执行代码");
          if (box.scrollTop > 1300) {
            backTop.style.right = "50px";
            backTop.style.display = "block";
          } else {
            backTop.style.right = "-150px";
            backTop.style.display = "block";
          }
          flag = false;
          setTimeout(() => {
            flag = true;
          }, 300);
        }
      };
      backTop.onclick = () => {
        let scrollToptimer = setInterval(function () {
          var top = box.scrollTop;
          var speed = top / 5;
          if (box.scrollTop != 0) {
            box.scrollTop -= speed;
          }
          if (top == 0) {
            clearInterval(scrollToptimer);
          }
        }, 30);
      };
    </script>
  </body>
</html>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当我们在JavaScript中处理一些频繁触发的事件时,比如窗口调整大小、滚动等,防抖函数节流函数可以帮助我们优化性能。 防抖函数(Debounce)是指在事件触发后等待一段时间后再执行回调函数,如果在等待时间内再次触发了该事件,则重新计时。这样可以避免频繁触发事件导致的性能问题。 以下是一个简单的JavaScript实现防抖函数的例子: ```javascript function debounce(func, delay) { let timer; return function() { clearTimeout(timer); timer = setTimeout(func, delay); }; } ``` 在上面的例子中,`debounce`函数接受两个参数:`func`是要执行的回调函数,`delay`是等待的时间间隔。返回的函数会在事件触发后等待`delay`毫秒后执行回调函数节流函数(Throttle)是指在一定时间间隔内只执行一次回调函数,无论事件触发多频繁。这样可以控制事件的触发频率,避免过多的计算和渲染。 以下是一个简单的JavaScript实现节流函数的例子: ```javascript function throttle(func, delay) { let timer; return function() { if (!timer) { timer = setTimeout(() => { func(); timer = null; }, delay); } }; } ``` 在上面的例子中,`throttle`函数接受两个参数:`func`是要执行的回调函数,`delay`是时间间隔。返回的函数会在事件触发后等待`delay`毫秒后执行回调函数,但如果在等待时间内再次触发了该事件,则不会重新计时。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值