首页 > 其他分享 >记录--Vue 3 中的极致防抖/节流(含常见方式防抖/节流)

记录--Vue 3 中的极致防抖/节流(含常见方式防抖/节流)

时间:2023-03-27 17:58:15浏览次数:46  
标签:防抖 Vue 节流 timer delay null fn

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助

今天给大家带来的是Vue 3 中的极致防抖/节流(含常见方式防抖/节流)这篇文章,文章中不仅会讲述原来使用的防抖或节流方式,还会带来新的一种封装方式,使用起来更简单、更清晰。

前言

在前端的开发过程中,在涉及到与用户交互的过程中是基本上都是需要处理的,常规操作就是在对应位置加上防抖或者节流。

加上防抖或者节流的作用:一是为了防止用户频繁操作;二是为了节约一定的服务器资源,减少资源浪费的情况。

防抖或节流原理

防抖(debounce)

如果用户多次频繁操作以最后一次为准,当然也可以以第一次为准,进行数据更新或者网络资源请求,以消除冗余的操作,或者减少一定的请求资源浪费。

示例代码

function debounce (fn, delay = 300){
    let timer = null
    return function (...args) {
        clearTimeout(timer)
        timer = setTimeout(()=>{
            fn.call(this, ...args)
        }, delay);
    }
}

使用

debounce(()=> count += 1, 1000)

节流(throttle )

在一定时间范围内,用户触发多次只会执行一次以达到防止用户频繁操作的目的。

示例代码

let timer = null
function throttle (fn, delay = 300) {
    if(timer == null){
        timer = setTimeout(() => {
            fn()

            clearTimeout(timer)
            timer = null
        }, delay);
    }
}

使用

throttle(()=> count += 1, 1000)

环境说明

  • vue 3
  • vite

新封装

这里我分两个模块来讲述。一个是防抖;另一个是节流。

虽然这两个差别不是很大,但还是有区别的。上车,兄弟们。

标签:防抖,Vue,节流,timer,delay,null,fn
From: https://www.cnblogs.com/smileZAZ/p/17262357.html

相关文章

  • Vue中路由的创建、跳转
    一、创建路由1、先创建一个route.js文件,创建路由,导出路由。//创建路由,从vue-router中导入两个方法。import{createWebHistory,createRouter}from"vue-r......
  • 使用copilot生成vue响应式原理
    //生成vue的响应式原理functiondefineReactive(obj,key,val){//递归observe(val);//创建Dep实例constdep=newDep();Object.defineProperty(obj......
  • vuex
    笔记脚手架文件结构├──node_modules├──public│├──favicon.ico:页签图标│└──index.html:主页面├──src│├──assets:存放静态......
  • vue3
    Vue3快速上手1.Vue3简介2020年9月18日,Vue.js发布3.0版本,代号:OnePiece(海贼王)耗时2年多、2600+次提交、30+个RFC、600+次PR、99位贡献者github上的tags地址:https://gi......
  • 优化 vue 使用 webpack 打包,出现的缓存问题 及 项目部署问题
    https://blog.csdn.net/qq_39264561/article/details/124844878`constpath=require("path");constwebpack=require("webpack");consttimeStamp=newDate().ge......
  • Vue根据时间戳制作倒计时15分钟
    废话不多说直接上代码<script>exportdefault{data(){return{downTimeShow:true,timer:null,......
  • vue组件化开发---插槽的使用
    插槽基本介绍在开发中,我们会经常封装一个个可复用的组件:前面我们会通过props传递给组件一些数据,让组件来进行展示;但是为了让这个组件具备更强的通用性,我们不能将组件中......
  • vue "vue-awesome-swiper": "^4.1.1" 的使用
    <!--swiper1--><swiperclass="swipergallery-top":options="swiperOptionTop"ref="swiperTop"><swiper-slidev-for="iteminimg_l......
  • vue3中在setup方法中使用 provide,inject,组件上下层,直接传值和方法
    一个简简单单的案例app.vue<template><div>app<Second/></div></template><script>import{provide}from'vue';importSecondfrom'./compon......
  • vue3获取url参数的值
    <scriptsetupname="Welcome">import{onMounted}from'vue';import{useRouter}from'vue-router';const$router=useRouter();onMounted(()=>{consol......