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

编辑: admin 分类: javascript 发布时间: 2022-01-01 来源:互联网
目录
  • 前言
  • 概念
  • 防抖
    • 定义
    • 使用场景
    • 代码
    • 在vue中使用
  • 节流
    • 定义
    • 使用场景
    • 代码
    • 在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)
      },
      debounc【原URL http://www.yidunidc.com/mggfzq.html 请说明出处】e(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防抖和节流使用内容请搜索hwidc以前的文章或继续浏览下面的相关文章希望大家以后多多支持hwidc!

    【文章转自:http://www.1234xp.com/xjp.html请说明出处】