zoukankan      html  css  js  c++  java
  • vue前台(三)函数防抖和节流,lodash

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <meta http-equiv="X-UA-Compatible" content="ie=edge">
      <title>函数节流与防抖</title>
    </head>
    <body>
    
      <button id="handle">测试不做函数节流/防抖</button>
      <button id="throttle">测试函数节流</button>
      <button id="debounce">测试函数防抖</button>
      
      <!-- 
        1. 事件频繁触发可能造成的问题?
            1). 一些浏览器事件:window.onresize、window.mousemove等,触发的频率非常高,会造成浏览器性能问题
            2). 如果向后台发送请求,频繁触发,对服务器造成不必要的压力
        
        2. 如何限制事件处理函数频繁调用
            1). 函数节流
            2). 函数防抖
    
        3. 函数节流(throttle)
            1). 理解: 
                在函数需要频繁触发时: 函数执行一次后,只有大于设定的执行时间后才会执行第二次
                适合多次事件按时间做平均分配触发
            2). 场景:
                窗口调整(resize)
                页面滚动(scroll)
                DOM 元素的拖拽功能实现(mousemove)
                抢购疯狂点击(click)
                
        4. 函数防抖(debounce)
            1). 理解:
                在函数需要频繁触发时: 在规定时间内,只让最后一次生效,前面的不生效。
                适合多次事件一次响应的情况
            2). 场景:
                输入框实时搜索联想(keyup/input)
      -->
    
      <script src="https://cdn.bootcss.com/lodash.js/4.17.15/lodash.js"></script>
      <script>
        /* 处理点击事件的回调函数 */
        function handleClick(event) { // 处理事件的回调
          console.log('处理点击事件', this, event)
        }
    
        // document.getElementById('handle').onclick = handleClick
        /* 
        _.throttle(handleFn, delay, options)返回一个新函数, 就是绑定事件监听的回调函数(它是高频调用)
          handleFn: 真正处理事件的回调函数, 由throttle()返回的函数内部间隔指定的dalay时间后调用(少量调用)
        _.debounce()语法一样
        // */
        // 每隔2s触发一次handleClick,节流操作
        document.getElementById('throttle').onclick = _.throttle(handleClick, 2000)
        //执行最后一次的handleClick,防抖操作
        document.getElementById('debounce').onclick = _.debounce(handleClick, 2000)
      </script>
    
    </body>
    </html>

    vue方式

    1. 引入lodash,脚手架中已经安装了lodash,

    // import _ from 'lodash'    //引入整体打包体积比较大
    import throttle from "lodash/throttle"; //只是引入节流功能
    对li标签添加属性
     @mouseenter="moveIn(index)",移入效果,采用节流方式
     methods: {
      
    
        moveIn: throttle(
          function(index) {
            console.log(index);
            this.currentIndex = index;
          },
          50,
          { trailing: false }
        ),
    
        //{ 'trailing': true }  拖延触发,节流操作函数触发如果是true,那么是在规定时间结束之后触发
        //{ 'trailing': false } 不拖延触发,节流操作函数触发如果是false,那么是在规定时间开始就触发
    
      
    
      
      },

  • 相关阅读:
    推荐系统 蒋凡译 第一章 引言 读书笔记
    神经网络与深度学习 邱锡鹏 第5章 卷积神经网络 读书笔记
    神经网络与深度学习 邱锡鹏 第4章 前馈神经网络 读书笔记
    神经网络与深度学习 邱锡鹏 第3章 线性模型 读书笔记
    神经网络与深度学习 邱锡鹏 第2章 机器学习概述 读书笔记
    神经网络与深度学习 邱锡鹏 第1章 绪论 作业
    神经网络与深度学习 邱锡鹏 第1章 绪论 读书笔记
    算法笔记 上机训练实战指南 第13章 专题扩展 学习笔记
    算法笔记 第13章 专题扩展 学习笔记
    算法笔记 上机训练实战指南 第11章 提高篇(5)--动态规划专题 学习笔记
  • 原文地址:https://www.cnblogs.com/fsg6/p/13305649.html
Copyright © 2011-2022 走看看