通过实例讲解JS如何防抖动


Posted in Javascript onJune 15, 2019

前言

这道题目经常与事件触发器同时存在,为了考察面试者在一些具体业务流程上(信息流,搜索框输入查询)等,能否综合的考虑实现思路。

题目

在某些信息列表中一般采用瀑布流,滚动一屏时加载相应的数据,请思考如何避免连续下拉时而产生的问题(可能是页面崩溃,也可能是巨卡无比)。

一般情况下,如果碰到这样的面试题,防抖动机制,就能很好的解决,这方面最早的应用实践还是Twitter,开发者写了一篇博客,详细的阐述了如何解决这样的问题。那么,说到防抖动,其核心内涵在于延迟处理,也就是将一系列的事件处理程序全部延迟,保障推送进来的第一次事件处理。

event.on('scroll', function(e){ 
var fun; 
return function(){ 
if(fun) clearTimeout(fun);
fun = setTimeout(function(){ 
// console.log('1')
},500);
}
}());

这是最常见的一种方式,如果scroll的次数较多时,可以先将真实的函数放置在定时器中。

接下来我们将它抽象一下:

function de(something,delay){ 
var fun; 
return function(){ 
if(fun) clearTimeout(fun);
fun = setTimeout(function(){ 
something();
},delay);
}
}
function scrollToList(){
}
event.on('scroll', de(scrollToList,1000))
event.on('scroll', de(scrollToList,2000))

显然这是一个弱爆了的处理,那有没有更好的方式呢?有,比如节流。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Jquery练习之表单验证实现代码
Dec 14 Javascript
JavaScript移除数组元素减少长度的方法
Sep 05 Javascript
jquery实现加载等待效果示例
Sep 25 Javascript
利用Jquery实现可多选的下拉框
Feb 21 Javascript
Javascript 实现微信分享(QQ、朋友圈、分享给朋友)
Oct 21 Javascript
js调用父框架函数与弹窗调用父页面函数的简单方法
Nov 01 Javascript
JS中数组重排序方法
Nov 11 Javascript
Jquery Easyui菜单组件Menu使用详解(15)
Dec 18 Javascript
微信小程序 实现点击添加移除class
Jun 12 Javascript
微信小程序使用radio显示单选项功能【附源码下载】
Dec 11 Javascript
详解vue-cli3使用
Aug 14 Javascript
在 Vue 中编写 SVG 图标组件的方法
Feb 24 Javascript
js笔试题-接收get请求参数
Jun 15 #Javascript
深入了解JavaScript 的 WebAssembly
Jun 15 #Javascript
通过实例了解js函数中参数的传递
Jun 15 #Javascript
RxJS的入门指引和初步应用
Jun 15 #Javascript
js中let能否完全替代IIFE
Jun 15 #Javascript
回顾Javascript React基础
Jun 15 #Javascript
详解微信小程序胶囊按钮返回|首页自定义导航栏功能
Jun 14 #Javascript
You might like
php实现的zip文件内容比较类
2014/09/24 PHP
php数组键名技巧小结
2015/02/17 PHP
thinkPHP简单遍历数组方法分析
2016/05/16 PHP
js 鼠标点击事件及其它捕获
2009/06/04 Javascript
jQuery获取Radio,CheckBox选择的Value值(示例代码)
2013/12/12 Javascript
JQuery入门基础小实例(1)
2015/09/17 Javascript
js随机生成26个大小写字母
2016/02/12 Javascript
Ext JS框架中日期函数的用法及日期选择控件的实现
2016/05/21 Javascript
微信JS-SDK坐标位置如何转换为百度地图坐标
2016/07/04 Javascript
jQuery对checkbox 复选框的全选全不选反选的操作
2016/08/09 Javascript
JS弹出新窗口被拦截的解决方法
2016/08/09 Javascript
Node+Express+MongoDB实现登录注册功能实例
2017/04/23 Javascript
JavaScript用200行代码制作打飞机小游戏实例
2017/06/21 Javascript
基于BootStrap multiselect.js实现的下拉框联动效果
2017/07/28 Javascript
Vue自定义指令使用方法详解
2017/08/21 Javascript
two.js之实现动画效果示例
2017/11/06 Javascript
详解js中Array的方法及技巧
2018/09/12 Javascript
浅谈layui里的上传控件问题
2019/09/26 Javascript
angularjs模态框的使用代码实例
2019/12/20 Javascript
详解Vue的ref特性的使用
2020/01/24 Javascript
Nuxt页面级缓存的实现
2020/03/09 Javascript
ES6新增的数组知识实例小结
2020/05/23 Javascript
部署vue+Springboot前后端分离项目的步骤实现
2020/05/31 Javascript
javascript读取本地文件和目录方法详解
2020/08/06 Javascript
js+for循环实现字符串自动转义的代码(把后面的字符替换前面的字符)
2020/12/24 Javascript
python 用下标截取字符串的实例
2018/12/25 Python
pip安装py_zipkin时提示的SSL问题对应
2018/12/29 Python
浅谈Scrapy网络爬虫框架的工作原理和数据采集
2019/02/07 Python
Python可变和不可变、类的私有属性实例分析
2019/05/31 Python
python Gabor滤波器讲解
2020/10/26 Python
使用useBean标志初始化BEAN时如何接受初始化参数
2012/02/11 面试题
META-INF文件夹中的MANIFEST.MF的作用
2016/06/21 面试题
平面设计自荐信
2013/10/07 职场文书
科研先进个人典型材料
2014/01/31 职场文书
2014年最新党员对照检查材料汇总
2014/09/15 职场文书
你知道Java Spring的两种事务吗
2022/03/16 Java/Android