js防抖节流
防抖(debounce)
所谓防抖,就是指触发事件后在 n 秒内函数只能执行一次,如果在 n 秒内又触发了事件,则会重新计算函数执行时间。
防抖函数分为非立即执行版和立即执行版。
非立即执行版:
第一种
function debounce (fn, delay) {
let timer = null
return function (...args) {
timer && clearTimeout(timer)
timer = setTimeout(() => {
fn.apply(this, args)
}, delay)
}
}
第二种
function debounce(fn,delay){
var timer = null
return function(){
var ctx = this;
var args = arguments;
timer && clearTimeout(timer)
timer = setTimeout(function(){
fn.apply(ctx,args)
},delay)
}
}
立即执行
立即执行就是事件触发后立即执行,然后超过一段时间没有触发事件,执行函数才会被触发执行;
function(fn,delay){
var timer = null;
return function(){
var ctx = this;
var args = arguments;
timer && clearTimeout(timer);
var immediate = !timer
if(immediate){
fn.apply(ctx,args)
}
timer = setTimeout(function(){
timer = null;
},delay)
}
}
两种合并
/**
* fn 执行函数
* delay 延迟时间
* immediate 是否立即执行 true:立即执行,false:非立即执行
* */
function debounce(fn,delay,immediate){
var timer =null;
return function(){
var ctx = this,
args = arguments;
timer&&clearTimeout(timer)
if(immediate){
var immediate = !timer;
immediate && fn.apply(ctx,args);
timer = setTimeout(()=>{
timer=null
},delay)
}else{
timer=setTimeout(()=>{
fn.apply(ctx,args);
},delay)
}
}
}
节流
所谓节流就是在连续触发事件过程中,程序会稀释执行的次数,程序会在规定时间内ns内只执行一次
节流 一般有两种方式:时间戳和定时器
第一种时间戳
function throttle(fn,delay){
var previous = new Date().getTime();
return function(){
var ctx = this,
args = arguments,
now = new Date().getTime();
if(now-previous>delay){
fn.apply(ctx,args);
previous = new Date().getTime();
}
}
}
第二种定时器
function throttle(fn,delay){
var timer = null;
return function(){
var ctx = this,
args = arguments;
if(!timer){
timer= setTimeout(function(){
fn.apply(ctx,args);
timer=null;
},delay)
}
}
}
js防抖节流的更多相关文章
- JS: 防抖节流
防抖节流 防抖(debounce) 先来看看下面的代码: //触发滚动事件,num 就加1 let num = 0; function incNum() { console.log('鼠标滚动中'); ...
- js 防抖 节流 JavaScript
实际工作中,通过监听某些事件,如scroll事件检测滚动位置,根据滚动位置显示返回顶部按钮:如resize事件,对某些自适应页面调整DOM的渲染:如keyup事件,监听文字输入并调用接口进行模糊匹配等 ...
- js 防抖 节流
函数防抖:将几次操作合并为一此操作进行.原理是维护一个计时器,规定在delay时间后触发函数,但是在delay时间内再次触发的话,就会取消之前的计时器而重新设置.这样一来,只有最后一次操作能被触发.( ...
- 深入理解JS防抖与节流
参考博客:JS防抖和节流,感谢作者的用心分享 日常开发过程中,滚动事件做复杂计算频繁调用回调函数很可能会造成页面的卡顿,这时候我们更希望把多次计算合并成一次,只操作一个精确点,JS把这种方式称为deb ...
- js 函数节流和防抖
js 函数节流和防抖 throttle 节流 事件触发到结束后只执行一次. 应用场景 触发mousemove事件的时候, 如鼠标移动. 触发keyup事件的情况, 如搜索. 触发scroll事件的时候 ...
- js防抖和节流优化浏览器滚动条滚动到最下面时加载更多数据
防抖和节流,主要是用来防止过于平凡的执行某个操作,如浏览器窗口变化执行某个操作,监听某个input输入框keyup变化,瀑布流布局时Y轴滚动,图片加载. js函数的防抖 经过一段事件才执行某个操作,如 ...
- 因为它,我差点删库跑路:js防抖与节流
前言 前端踩雷:短时间内重复提交导致数据重复. 对于前端大佬来说,防抖和节流的技术应用都是基本操作.对于"兼职"前端开发的来说,这些都是需要躺平的坑. 我们今天就来盘一盘js防抖与 ...
- 面试必问题:JS防抖与节流
摘要:防抖与节流可谓是面试常见,其实很好理解,下面带你分分钟了解防抖与节流的基本思想与写法~ 本文分享自华为云社区<JS防抖与节流快速了解与应用>,作者:北极光之夜. . 一.速识防抖: ...
- vue防抖节流之v-debounce--throttle使用指南
最新封装了一个vue防抖节流自定义指令,发布到npm上,有用欢迎star,谢谢! npm地址:https://www.npmjs.com/package/v-debounce-throttle git ...
随机推荐
- webpack 相关文章
webpack loader原理 由于webpack是基于Node的所以webpack只能识别.js文件,所以针对其他的文件就需要转译,这时候就需要用到我们的loader了. https://blog ...
- PPT插件(islide)
https://www.islide.cc/features iSlide 主要功能模块 一键优化 将PPT中不规则的字体,段落,色彩,参考线布局,风格样式等一键化全局统一设置,构建专业和规范. ...
- ckpt pb
(t20190518) luo@luo-All-Series:/dev/disk_2019/mask_rcnn_20190518/Mask_RCNN_20190902/models/research$ ...
- 泡泡一分钟:SceneCut: Joint Geometric and Object Segmentation for Indoor Scenes
张宁 SceneCut: Joint Geometric and Object Segmentation for Indoor Scenes "链接:https://pan.ba ...
- 深入学习c++--智能指针(四)--使用建议
1. 不要自己手动管理资源 2. 一个裸指针不要用两个shared_ptr管理,unique_ptr 3. 使用shared_ptr作为函数的接口,如果有可能用 const shared_ptr&am ...
- Qt编写气体安全管理系统11-数据打印
一.前言 在各种软件系统中,数据打印也是常用的功能之一,一般来说会对查询的数据结果导出到excel,还会对查询的数据结果直接打印,在Qt中提供了打印机类QPrinter,在printsupport组件 ...
- Python初级 3 基本数学运算
一. 四大基本运算操作符 1 加+ print(3 + 2) 2 减- print(3 - 2) 3 乘:* print(3 * 2) 4 除/, // print(3 / 2) print(3 // ...
- 构造方法(和python初始化变量类似)
public class Demo1 { int name2=1; public Demo1(int name) { name=name2; } public Demo1() { } public ...
- mybatis 枚举typeHandler
枚举typeHandler 在绝大多数情况下,typeHandler因为枚举而使用,MyBatis已经定义了两个类作为枚举类型的支持,这两个类分别是: •EnumOrdinalTypeHandler. ...
- AI佳作解读系列(六) - 生成对抗网络(GAN)综述精华
注:本文来自机器之心的PaperWeekly系列:万字综述之生成对抗网络(GAN),如有侵权,请联系删除,谢谢! 前阵子学习 GAN 的过程发现现在的 GAN 综述文章大都是 2016 年 Ian G ...