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,那么是在规定时间开始就触发
    
      
    
      
      },

  • 相关阅读:
    使用 CountDownLatch 控制多个线程执行顺序
    define 与 inline
    虚函数 纯虚函数 抽象方法 接口
    [转]Android 超高仿微信图片选择器 图片该这么加载
    Android ImageView src与backgroud
    Android View绘制原理分析
    Android 5.0 Default SMS App以及运营商授权SMS App
    Android 5.0 双卡信息管理分析
    Android 5.1 AOSP 源码获取
    Android 5.0 Uicc框架分析
  • 原文地址:https://www.cnblogs.com/fsg6/p/13305649.html
Copyright © 2011-2022 走看看