javascript【应用】debounce和throttle
debounce
防抖
在事件被触发n秒后再执行回调,如果在这n秒内又被触发,则重新计时;典型的案例就是输入搜索:输入结束后n秒才进行搜索请求,n秒内又输入的内容,就重新计时。
<div id="app">
输入内容:<input type="text" class="input" @keyup="deb"/>
<div> 输入次数:{{ num }}</div>
</div>
let time
var app = new Vue({
el: '#app',
data: {
num: 0,
},
methods: {
deb: function () {
let that = this
if (time) {
clearTimeout(time)
}
time = setTimeout(function () {
that.num++
console.log('输入了' + that.num + '次')
time = undefined;
}, 2000)
}
})
throttle
节流
规定在一个单位时间内,只能触发一次函数,如果这个单位时间内触发多次函数,只有一次生效; 典型的案例就是鼠标不断点击触发,规定在n秒内多次点击只有一次生效。
在某应用购买火车票/飞机票等商品的时候,不断地点击刷新购买,总不能一直点击一直请求吧,系统会崩掉的,所以节流就很有必要了。
<div id="app">
<button @click="thr">点击</button>
<div>实际点击:{{clicknumber}}</div>
<div>有效点击:{{num}}</div>
</div>
let time
let lastTime
var app = new Vue({
el: '#app',
data: {
num: 0,
clicknumber: 0
},
methods: {
thr: function () {
this.clicknumber++
let that = this
let now = new Date();
if (lastTime && now - lastTime < 2000) {
clearTimeout(time)
}
time = setTimeout(function () {
that.num++
console.log('点击了' + that.num + '次')
lastTime = new Date()
}, 500)
}
}
})
区别
防抖动是将多次执行变为最后一次执行
节流是将多次执行变成每隔一段时间执行
javascript【应用】debounce和throttle的更多相关文章
- Javascript中 节流函数 throttle 与 防抖函数 debounce
问题的引出 在一些场景往往由于事件频繁被触发,因而频繁地进行DOM操作.资源加载,导致UI停顿甚至浏览器崩溃. 在这样的情况下,我们实际上的需求大多为停止改变大小n毫秒后执行后续处理:而其他事件大多的 ...
- Debounce 和 Throttle 的原理及实现---防止频繁触发某事件
原文:http://blog.csdn.net/redtopic/article/details/69396722 在处理诸如 resize.scroll.mousemove 和 keydown/ke ...
- 白话debounce和throttle
遇到的问题 在开发过程中会遇到频率很高的事件或者连续的事件,如果不进行性能的优化,就可能会出现页面卡顿的现象,比如: 鼠标事件:mousemove(拖曳)/mouseover(划过)/mouseWhe ...
- debounce 与 throttle 区别
原文地址:http://undefinedblog.com/debounce-and-throttle/ 二.什么是debounce 1. 定义 如果用手指一直按住一个弹簧,它将不会弹起直到你松 ...
- 【Javascript函数】节流throttle和间隔控制dbounce
一.throttle 函数节流,指把很小时间内触发的N多事件,节流成1个事件. 我们这里说的throttle就是函数节流的意思.再说的通俗一点就是函数调用的频度控制器,是连续执行时间间隔控制.主要应用 ...
- JavaScript函数节流(throttle)与函数去抖(debounce)
对于浏览器窗口大小改变的时候,来动态改变页面元素的大小,可以采用window的resize事件,实现代码: <script type="text/javascript"> ...
- JavaScript 防抖(debounce)和节流(throttle)
防抖函数 触发高频事件后,n秒内函数只会执行一次,如果n秒内高频事件再次被触发,则重新计算时间 /** * * @param {*} fn :callback function * @param {* ...
- debounce与throttle区别
在2011年,Twitter网站曾爆出一个问题:在主页往下滚动时,页面会变得缓慢以致没有响应.John Resig发表了一篇文章< a blog post about the problem&g ...
- Debounce 和 Throttle【转载】
在处理诸如 resize.scroll.mousemove 和 keydown/keyup/keypress 等事件的时候,通常我们不希望这些事件太过频繁地触发,尤其是监听程序中涉及到大量的计算或者有 ...
- 函数防抖与函数节流 封装好的debounce和throttle函数
/** * 空闲控制 返回函数连续调用时,空闲时间必须大于或等于 wait,func 才会执行 * * @param {function} func 传入函数,最后一个参数是额外增加的this对象,. ...
随机推荐
- RESTful风格与Spring注解
RESTfulL是一种网络应用程序的设计风格和开发方式,即接口请求方式和路径的一种风格. 普通风格: localhost:8080/add?a=1&b=2 RestFul风格: localho ...
- Eclipse git提交代码 覆盖问题
创建本地分支 拉取远程分支到本地 进行代码更新 然后 commit 然后将本地代码推送到远程分支 再发起合入请求 使用elipse 提交合入代码时, 注意push 提交远程分支时, 选择中 要选 ...
- java中List的浅拷贝与深拷贝
List浅拷贝 众所周知,list本质上是数组,而数组的是以地址的形式进行存储. 如上图将list A浅拷贝给list B,由于进行的是浅拷贝,所以直接将A的内容复制给了B,java中相同内容的数组指 ...
- Java通过注解获取方法反射运行
//上下文 @Resource private ApplicationContext applicationContext; @Bean public void test(){ //扫描Control ...
- xshell 恢复窗口布局
ctrl +shift +t
- 【ADB命令】获取应用包名
打开cmd,输入命令,然后点击要查看的应用,即可获取对应包名. adb shell am monitor
- composer 换源
#首先把默认的源给禁用掉 composer config -g secure-http false #再修改镜像源 这里我使用阿里的源 composer config -g repo.packagis ...
- python批量将png图片转换为jpg图片
参考引用链接如下:https://www.freesion.com/article/1866518882
- 【实验】B站资源免费下载技巧you-get
搭建环境, python pip3 install you-get 查看可以下载格式 you-get -i https://www.bilibili.com/video/BV1yN411d7KH?p ...
- python菜鸟学习 : 16 pymongo和openpyxl的联合使用
# -*- coding: utf-8 -*-import pymongo, openpyxl, time# pymongo#条件删选mongodb数据def mongodb_expoter(db_n ...