zoukankan      html  css  js  c++  java
  • 防抖节流?俩者区别?vue如何使用防抖、节流来解决点击问题?

    一、什么是防抖?

    防抖(debounce)

    所谓防抖,就是指触发事件后在 n 秒内函数只能执行一次,如果在 n 秒内又触发了事件,则会重新计算函数执行时间,直到执行时间结束才可以再去触发执行第二次。

    二、什么是节流?

    节流(throttle)

    所谓节流,就是指连续触发事件但是在 n 秒中只执行一次函数。节流会稀释函数的执行频率。间隔时间通常是固定的!

    三、俩者区别

    防抖与节流最大的区别在于防抖俩次成功执行的事件中间的间隔时间不一定固定不变,因为存在重置的情况,而节流的间隔时间是固定不变的,是不会受到间隔期点击而重置计时的影响

    四、vue如何使用防抖、节流来解决点击问题

    (1)防抖debounce.js(采用的简单的)

    // 防抖
    /*
    * fn [function] 需要防抖的函数
    * delay [number] 毫秒,防抖期限值
    */
    export function debounce(fn, delay) {
    
        let timer = null
        return function () {
            if (timer) {
                clearTimeout(timer)
                console.log('拦截')
            }
            timer = setTimeout(() => {
                console.log('发送')
    
                fn.apply(this, arguments)
                timer = null
            }, delay)
        }
    }

    (2)节流throttle.js(同样采用简单的)

    // 节流
    /*
    * fn [function] 需要防抖的函数
    * delay [number] 毫秒,防抖期限值
    */
    export function throttle(fn, delay) {
        let timer = null
        return function () {
            if (timer) {
                console.log('拦截');
                return
                
            }
            timer = setTimeout(() => {
                console.log('发送');
    
                fn.apply(this, arguments)
                timer = null
            }, delay)
        }
    }

    (3)按钮页

     <el-button  class="test1" @click="top1" >防抖</el-button>
     <el-button  class="test1" @click="top2" >节流</el-button>

    (4)

    // 防抖
      import{debounce} from '../../utils/debounce'
    // 节流
      import{throttle} from '../../utils/throttle'

    (5)js

    export default {
        name : 'test',
        data() {
          return {
            
            clickMe:null,
            clickMe1:null,
          }
        },
        created() {
         
          // 防抖
          
         // clickMe 接受返回的函数, 这里的function你也可以换成你的methods里面定义的函数
          this.clickMe = debounce(function(data){
            console.log('fangdou:' + data);
          }, 3000)
          // 节流
          this.clickMe1 = throttle(function(data){
            console.log('jieliu:' + data);
          }, 3000)
    
        },
       methods: {
         
        top1(){
          
          this.clickMe('防抖、再点快点我就不出来了!');
          
        },
        top2(){
          
          this.clickMe1('节流、再点快点我就不出来了!');
        },
      
       
    
        
        },
    世界上没有什么偶然,有的只有必然。——壹原侑子
  • 相关阅读:
    解决VM 安装Ubuntu64与 Device/Credential Guard 不兼容,显示不支持64位系统
    WPF处理内容溢出
    .NET Standard 2.0 是什麼?可以吃嗎?
    C#.Net]启动外部程序的几种常用方法汇总
    在C#中接收系统屏幕锁定和解锁的事件
    C#.Net]启动外部程序的几种常用方法汇总
    MongoDB索引的使用
    读取xml并将节点保存到Excal
    开学后的第一篇
    续并查集学习笔记——Gang团伙题解
  • 原文地址:https://www.cnblogs.com/liazhimao/p/14593325.html
Copyright © 2011-2022 走看看