debounce实现 js_Vue.js以组件或者插件的形式实现throttle或者debounce
Vue.js以组件或者插件的形式实现throttle或者debounce
发布于 2020-3-9|
复制链接
摘记: 需求在业务中,会碰到许多点击请求的情况,在请求前改变一个lock变量(在lock变回来之前,点击无效),在请求回调中再改变lock.以确保在,请求回来之前,不会重复请求。或者类似的点击节流业务实现方式
指令
```xhtml
指令
//getData是函数名,a是传入的参数
directives: ..
需求在业务中,会碰到许多点击请求的情况,在请求前改变一个lock变量(在lock变回来之前,点击无效),在请求回调中再改变lock.以确保在,请求回来之前,不会重复请求。或者类似的点击节流业务实现方式指令
```xhtml
指令
//getData是函数名,a是传入的参数
directives: {
demo: {
bind(el: Element, binding: any, vnode: VNode) {
const that: any = vnode.context
// console.log(binding, vnode)
// console.log(binding.arg, binding.value)
if (!that[binding.arg].isBind){ // 打上标记,如果已经转换了,就不转了
that[binding.arg] = deb(that[binding.arg])
that[binding.arg].isBind = true
}
el.addEventListener('click', function T(event: Event): void{
that[binding.arg](binding.value)
})
},
},
},
```
组件子组件
```javascript
import Vue from 'vue';
import { Component, Prop } from 'vue-property-decorator';
@Component({})
export default class Child extends Vue {
@Prop({ type: Number, default: 500 }) public timeOut!: number; // 时间
@Prop({ type: String, default: 'throttle' }) public type!: string; // 类型
@Prop() public params!: any; // 传入参数
public message: string = 'Hello';
public throttleLock: boolean = false;
public debounceLock: number = 0;
public time: any;
public senClick(): void {
console.log(this.timeOut, this.type, this.params);
if (this.type === 'throttle') {
if (this.throttleLock) {
return;
}
this.throttleLock = true;
setTimeout(() => {
this.throttleLock = false;
}, this.timeOut);
this.$emit('myClick', this.params);
} else if (this.type === 'debounce') {
if (this.debounceLock) {
clearTimeout(this.debounceLock);
}
this.debounceLock = setTimeout(() => {
this.$emit('myClick', this.params);
}, this.timeOut);
} else {
this.$emit('myClick', this.params);
}
}
}
div {
width: 100%;
height: 100%;
}
```
父组件
```javascript
我是组件内容
import { Component, Vue } from 'vue-property-decorator';
import throttleAndDebounce from '@/components/throttleAndDebounce.vue';
@Component({
components: {
throttleAndDebounce,
},
})
export default class home extends Vue {
public getData(e: any){
console.log('异步数据', e)
}
}
```
plugin函数
```javascript
function deb(fn: function){
let lock: number
return (e) => {
if (lock){
clearTimeout(lock)
}
console.log('创建闭包延迟执行')
lock = setTimeout(() => {
fn(e)
}, 1500)
}
}
export {deb}
```
组件内使用
```javascript
function
import { Component, Vue } from 'vue-property-decorator';
import {deb} from '@/assets'
@Component({
components: {
throttleAndDebounce,
},
})
export default class home extends Vue {
public beforeCreate(){
this.func = deb((e: {a: number}) => {
console.log('this', e)
})
}
}
```
debounce实现 js_Vue.js以组件或者插件的形式实现throttle或者debounce相关推荐
- js插件---JS表格组件BootstrapTable行内编辑解决方案x-editable
js插件---JS表格组件BootstrapTable行内编辑解决方案x-editable 参考文章: (1)js插件---JS表格组件BootstrapTable行内编辑解决方案x-editable ...
- Bootstrap学习笔记02【全局CSS样式、组件和插件、案例_黑马旅游网_首页】
Java后端 学习路线 笔记汇总表[黑马程序员] Bootstrap学习笔记01[快速入门.栅格布局][day01] Bootstrap学习笔记02[全局CSS样式.组件和插件.案例_黑马旅游网][d ...
- Java调用 新浪微博API 接口发微博(包含js微博组件、springMVC新浪登录)详解
参考自:http://www.myexception.cn/program/1930025.html https://blog.csdn.net/qq_36580777/article/details ...
- 前端框架,库,组件,插件,控件的理解
框架就是提供了前端项目整体解决方案.库就是自己组合来实现项目. 某种层面上来说,前端库就像我平时家里的工具箱,里面有起子.锤子,我们可以通过这个工具箱来给小孩子创造玩具,我们甚至可以自己创造一些工具, ...
- 360奇舞团钟恒:选用Vue.js进行组件化开发,我们遇到了哪些坑?
责编:陈秋歌,关注前端开发领域,寻求报道或者投稿请发邮件chenqg#csdn.net. 欢迎加入"CSDN前端开发者"微信群,参与热点.难点技术交流.请加群主微信「Rachel_ ...
- 微信小程序组件和插件
微信小程序的组件和插件 一.基础组件 1.主要的基础组件 2.基础组件的使用 (1)基本用法 (2)其他用法 二.自定义组件 自定义组件的使用 (1)创建组件 (2)配置组件 (3)使用自定义组件 三 ...
- 微信小程序_文档_05_框架_组件_插件_多线程_兼容_优化
基础组件 框架为开发者提供了一系列基础组件,开发者可以通过组合这些基础组件进行快速开发. 详细介绍请参考组件文档 自定义组件 从小程序基础库版本 1.6.3 开始,小程序支持简洁的组件化编程.所有自定 ...
- Vue.js 父子组件通信的十种方式;告诉世界前端也能做 AI;你可能不知道的14个JavaScript调试技巧...
记得点击文章末尾的"阅读原文"查看哟~ 下面先一起看下本周的摘要吧~ 想了解老用户如何参与阿里云双十一1折拼团特惠主机的,可以看第二条推送,文中提供了两种方法~,一起看看本周有哪些 ...
- vue调用cordova 插件_Vue.js 使用cordova camera插件调取相机
本文给出在vue.js里如何使用cordova的插件完成调取相机及图库,并完成图片上传的操作. 具体的操作步骤如下 第一步:在cordova项目下安装cordova-plugin-camera插件 c ...
最新文章
- RotateAnimation详解
- python编程15讲答案,[Python编程:从入门到实践] 第十五章:生成数据 习题答案
- 抓到一只苍蝇 writeup
- 基因共表达聚类分析及可视化
- 把你的项目升级到IE8
- Flutter 登录页面Demo 复制可使用
- php的类图怎么生成_PHP网站怎么划UML类图?
- 精通HTML5+CSS3需要学什么?
- 《上市公司信息披露电子化规范》简介
- 数据结构顺序表的查找_数据结构1|顺序表+链表
- UVA10534 Wavio Sequence【LIS+DP】
- java.util.concurrent.atomic.AtomicBoolean 源码
- java 不同时区时间转换_Java中的时区转换小结
- 高等数学第七版同济大学课后习题讲解下册 pdf(免费)
- 用例图、功能模块图和数据库的区别
- AI语音机器人有哪些需要注意事项
- 华为手机多屏互动功能使用
- 横版射击,王者归来|Cocos精品《合金弹头OL》
- 电视端虚拟鼠标的设计
- antDesign 修改日历(Calendar) 的一二三四五六日为周一周X格式
热门文章
- Dubbo 本地存根
- java tcp ack_TCP三次握手和四次挥手以及11种状态
- 我的世界rpg服务器背包位置,我的世界:如何识别MC老玩家?看他背包中有没有这五种道具...
- SpringBoot+拦截器+自定义异常+自定义注解+全局异常处理简单实现接口权限管理...
- Kubernetes 上对应用程序进行故障排除的 6 个技巧
- Java多线程学习二十六:原子类是如何利用 CAS 保证线程安全的?
- SQL 查询笔记:子查询,分组查询,左连接查询。。。。。
- php登录 cookie,使用cookie进行简单的PHP登录
- deepin安装tomcat
- Java随机数与定时器