vue中防抖和节流的使用方法

 更新时间:2021年08月05日 15:01:41   作者:杨柒柒柒呀  
防抖和节流是我们在开发过程中常用优化性能的方式,可以减少不必要的计算,不浪费资源,只在适合的时候再进行触发计算,这篇文章主要给大家介绍了关于vue中防抖和节流使用的相关资料,需要的朋友可以参考下

前言

在一个电影项目中,我想在电影的列表中,保存下拉的当前位置,防止你切换页面后,再切换回当前的电影列表页,他就又回到电影的第一条数据。

这时候,我不想每次只要滑动一点,就保存当前位置,我想隔一段时间,保存一次,这时候,就可以使用防抖和节流。

概念

说白了, 防抖节流就是使用定时器 来实现我们的目的。

防抖(debounce):

在事件被触发n秒后再执行回调,如果在这n秒内又被触发,则重新计时。

典型的案例就是输入框搜索:输入结束后n秒才进行搜索请求,n秒内又输入的内容,则重新计时。

节流(throttle):

规定在一个单位时间内,只能触发一次函数,如果这个单位时间内触发多次函数,只有一次生效。

典型的案例就是鼠标不断点击触发,规定在n秒内多次点击只生效一次。

防抖

定义

频繁操作防止抖动,在操作后 n 秒内不操作,才触发事件,若继续操作,则重新计时

使用场景

  • 输入框输入
  • 缩放resize

代码

// utils.js
// immediate 是否开始立即执行
function debounce(func, delay = 300, immediate = false) {
    let timer = null
    return function() {
        if (timer) {
            clearTimeout(timer)
        }
        if (immediate && !timer) {
            func.apply(this, arguments)
        }
        timer = setTimeout(() => {
         func.apply(this, arguments)
        }, delay)
    }
}

在vue中使用

方法一:写在公共方法utils里引入

import { debounce } from 'utils'
methods: {
    appSearch:debounce(function(e.target.value){
        this.handleSearch(value)
    }, 1000),
    handleSearch(value) {
        console.log(value)
    }
}

方法二:写在当前vue文件中

data: () => {
  return {
    debounceInput: () => {}
  }
},
methods: {
  showApp(value) {
    console.log('value', value)
  },
  debounce(func, delay = 300, immediate = false) {
    let timer = null
    return function() {
        if (timer) {
            clearTimeout(timer)
        }
        if (immediate && !timer) {
            func.apply(this, arguments)
        }
        timer = setTimeout(() => {
         func.apply(this, arguments)
        }, delay)
    }
  }
},
mounted() {
  this.debounceInput = this.debounce(this.showApp, 1000)      
},

节流

定义

频繁操作稀释函数执行,频繁操作时,每隔n秒才触发一次

使用场景

  1. 鼠标点击,mousedown,mousemove单位时间只执行一次
  2. 滚动事件,懒加载、滚动加载、加载更多或监听滚动条位置
  3. 防止高频点击提交,防止表单重复提交

代码

// utils.js
function throttle (func, delay = 300) {    
    let prev = 0
    return function() {
        let now = Date.now()
        if ((now - prev) >= delay) {
            func.apply(this, arguments)
            prev = Date.now()
        }
    }
}

在vue中使用

使用方法与防抖相同

总结

到此这篇关于vue中防抖和节流使用的文章就介绍到这了,更多相关vue防抖和节流使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解使用vue实现tab 切换操作

    详解使用vue实现tab 切换操作

    这篇文章主要介绍了详解使用vue实现tab操作,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07
  • vue关闭eslint检查的方式

    vue关闭eslint检查的方式

    这篇文章主要介绍了vue关闭eslint检查的方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • vsCode安装配置创建Vue3项目全过程

    vsCode安装配置创建Vue3项目全过程

    本文介绍了如何在Windows系统上安装和配置Vue.js开发环境,包括安装VS Code、Node.js、Vue CLI以及创建和启动一个Vue项目
    2025-01-01
  • Vue之修改数据页面不更新的问题

    Vue之修改数据页面不更新的问题

    这篇文章主要介绍了Vue之修改数据页面不更新的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • Vue实现多个关键词高亮显示功能

    Vue实现多个关键词高亮显示功能

    在现代网页开发中,常常需要实现高亮显示关键词的功能,这篇文章将探讨如何通过 Vue.js 中的 highlightText来实现这一功能,感兴趣的可以了解下
    2024-12-12
  • Vue和relation-graph库打造高质量的关系图应用程序

    Vue和relation-graph库打造高质量的关系图应用程序

    这篇文章主要介绍了Vue和relation-graph库打造高质量的关系图应用程序,在这篇文章中,我们深入探讨了如何使用Vue和relation-graph高效打造关系图,我们详细介绍了数据准备、关系映射、点击事件等关键步骤,需要的朋友可以参考下
    2023-09-09
  • Vue2.0/3.0双向数据绑定的实现原理详解

    Vue2.0/3.0双向数据绑定的实现原理详解

    这篇文章主要给大家介绍了关于Vue2.0/3.0双向数据绑定的实现原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • 一文搞懂VueJs中customRef函数使用

    一文搞懂VueJs中customRef函数使用

    这篇文章主要为大家介绍了VueJs中customRef函数使用详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • 安装vue无法运行、此系统无法运行脚本问题及解决

    安装vue无法运行、此系统无法运行脚本问题及解决

    这篇文章主要介绍了安装vue无法运行、此系统无法运行脚本问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • Vue.js每天必学之方法与事件处理器

    Vue.js每天必学之方法与事件处理器

    Vue.js每天必学之方法与事件处理器,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-09-09

最新评论