vue封装全局的防抖节流函数

2024-06-13 03:12

本文主要是介绍vue封装全局的防抖节流函数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.在入口文件main.js中:

//防抖函数
export let debounce = (() => {let instances = []return function (fun, delay = 300) {//项目中,多个地方用到防抖,进行判断,每次调用全局的防抖函数,是否是同一块代码const stackLines = new Error().stack.split('\n');let callerLine = stackLines[2];//判断数组中是否有了let index = instances.findIndex(item => {return item.callerLine == callerLine})if (index < 0) {//没有的话,直接新增一个instances.push({ callerLine, fun, delay, timer: null })index = instances.length - 1} else {//有了的话,直接将传递的逻辑函数赋值进去instances[index].fun = fun}//找到数据中对应的对象let instance = instances[index]let ctx = thislet args = arguments//有时间间隔器,则清除if (instance.timer) {clearTimeout(instance.timer)}//进行其他逻辑instance.timer = setTimeout(() => {instance.timer = nullinstance.fun.apply(ctx, args)}, instance.delay)}
})()//节流函数
export let throttle = (() => {let instances = []return function (fun, delay = 300) {const stackLines = new Error().stack.split('\n');let callerLine = stackLines[2];let index = instances.findIndex(item => {return item.callerLine == callerLine})if (index < 0) {instances.push({ callerLine, fun, delay, timeout: null })index = instances.length - 1} else {instances[index].fun = fun}let instance = instances[index]let args = arguments;//注意如果要传参的话 这句不能省略if (!instance.timeout) {instance.timeout = setTimeout(() => {instance.timeout = null;instance.fun.apply(this, args)}, instance.delay)}}
})()Vue.prototype.$debounce = debounce;
Vue.prototype.$throttle = throttle;

2.页面中使用:

<div id="watch-example"><p>问一个是否的问题:<input v-model="question2"></p><p>{{ answer2 }}</p></div>
data() {return {question2: '',answer2: '请输入问题,否则我无法回答你!'};},

 

watch: {question2: function (newQuestion, oldQuestion) {this.answer2 = '请等待!';this.$debounce(this.getAnswer2, 1000);}},

 

getAnswer2: function() {if (this.question.indexOf('?') === -1) {this.answer2 = '请输入疑问句!';return;}else{this.answer2 = '请稍后...';setTimeout(() => {this.answer2 = '章总';}, 1000)}}

这篇关于vue封装全局的防抖节流函数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1056115

相关文章

React实现原生APP切换效果

《React实现原生APP切换效果》最近需要使用Hybrid的方式开发一个APP,交互和原生APP相似并且需要IM通信,本文给大家介绍了使用React实现原生APP切换效果,文中通过代码示例讲解的非常... 目录背景需求概览技术栈实现步骤根据 react-router-dom 文档配置好路由添加过渡动画使用

使用Vue.js报错:ReferenceError: “Vue is not defined“ 的原因与解决方案

《使用Vue.js报错:ReferenceError:“Vueisnotdefined“的原因与解决方案》在前端开发中,ReferenceError:Vueisnotdefined是一个常见... 目录一、错误描述二、错误成因分析三、解决方案1. 检查 vue.js 的引入方式2. 验证 npm 安装3.

vue如何监听对象或者数组某个属性的变化详解

《vue如何监听对象或者数组某个属性的变化详解》这篇文章主要给大家介绍了关于vue如何监听对象或者数组某个属性的变化,在Vue.js中可以通过watch监听属性变化并动态修改其他属性的值,watch通... 目录前言用watch监听深度监听使用计算属性watch和计算属性的区别在vue 3中使用watchE

python解析HTML并提取span标签中的文本

《python解析HTML并提取span标签中的文本》在网页开发和数据抓取过程中,我们经常需要从HTML页面中提取信息,尤其是span元素中的文本,span标签是一个行内元素,通常用于包装一小段文本或... 目录一、安装相关依赖二、html 页面结构三、使用 BeautifulSoup javascript

C++11的函数包装器std::function使用示例

《C++11的函数包装器std::function使用示例》C++11引入的std::function是最常用的函数包装器,它可以存储任何可调用对象并提供统一的调用接口,以下是关于函数包装器的详细讲解... 目录一、std::function 的基本用法1. 基本语法二、如何使用 std::function

Vue3 的 shallowRef 和 shallowReactive:优化性能

大家对 Vue3 的 ref 和 reactive 都很熟悉,那么对 shallowRef 和 shallowReactive 是否了解呢? 在编程和数据结构中,“shallow”(浅层)通常指对数据结构的最外层进行操作,而不递归地处理其内部或嵌套的数据。这种处理方式关注的是数据结构的第一层属性或元素,而忽略更深层次的嵌套内容。 1. 浅层与深层的对比 1.1 浅层(Shallow) 定义

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

【 html+css 绚丽Loading 】000046 三才归元阵

前言:哈喽,大家好,今天给大家分享html+css 绚丽Loading!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦 💕 目录 📚一、效果📚二、信息💡1.简介:💡2.外观描述:💡3.使用方式:💡4.战斗方式:💡5.提升:💡6.传说: 📚三、源代码,上代码,可以直接复制使用🎥效果🗂️目录✍️

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

hdu1171(母函数或多重背包)

题意:把物品分成两份,使得价值最接近 可以用背包,或者是母函数来解,母函数(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v)(1 + x^v+x^2v+.....+x^num*v) 其中指数为价值,每一项的数目为(该物品数+1)个 代码如下: #include<iostream>#include<algorithm>