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

  • 相关阅读:
    vue自定义指令
    ZOJ Problem Set–2104 Let the Balloon Rise
    ZOJ Problem Set 3202 Secondprice Auction
    ZOJ Problem Set–1879 Jolly Jumpers
    ZOJ Problem Set–2405 Specialized FourDigit Numbers
    ZOJ Problem Set–1874 Primary Arithmetic
    ZOJ Problem Set–1970 All in All
    ZOJ Problem Set–1828 Fibonacci Numbers
    要怎么样调整状态呢
    ZOJ Problem Set–1951 Goldbach's Conjecture
  • 原文地址:https://www.cnblogs.com/fsg6/p/13305649.html
Copyright © 2011-2022 走看看