web项目开发之JS函数防抖与节流示例代码
更新时间:2021年9月24日 16:00 点击:2638
防抖
经典应用常见: 手风琴效果
引入
没有做防抖的网站:
做了防抖的网站:
防抖场景1(鼠标移入)
抖动 : 用户本来不想触发这个交互,但是由于鼠标不小心抖动误触发交互事件。
例子: 想看第五张图片,。不想看2 3 4张。 但是鼠标从第1张滑到第五张时候,不小心放在了2 3 4上面。误触发。
函数防抖 : 用户连续多次触发某个事件,则只执行最后一次。
解决原理: 开启定时器,间隔时间内如果多次触发事件,则每一次都清除上一次定时器。
实例及解决代码:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <title>动画-案例《手风琴》</title> <style> * { margin: 0; padding: 0; } ul { list-style: none; width: 2400px; } #box { width: 1200px; height: 400px; border: 1px solid red; margin: 100px auto; overflow: hidden; } #box li { width: 100px; height: 400px; float: left; transition: all 0.5s ease-out; } #box li.over { width: 800px; } </style> </head> <body> <div id="box"> <ul> <li v-for="(item,index) in list" :class="{over:overIndex == index}" @mouseenter="doEnter(index)"> <img :src="item" alt=""> </li> </ul> </div> <script src="./vue.js"></script> <script> let app = new Vue({ el:'#box', data:{ overIndex:0, list:[ './images/collapse/1.jpg', './images/collapse/2.jpg', './images/collapse/3.jpg', './images/collapse/4.jpg', './images/collapse/5.jpg', ], timeID:null }, methods: { doEnter(index){ /* 开启防抖 */ //1.1 先清除上一次定时器,以本次为准 clearTimeout(this.timeID) //1.2 开启定时器(防抖间隔) this.timeID = setTimeout(()=>{ this.overIndex = index; },500) } }, }) </script> </body> </html>
防抖场景2(键盘按键)
经典应用场景: 搜索联想词
-开发中, 该功能后端会使用中间件"OpenSearch"或者"Elasticsearch", 后端的逻辑处理会十分高效、快捷.
-此处只是基于前端的角度, 从减少http请求这个方面出发来进行优化
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> </head> <body> <input type="text" placeholder="请输入搜索内容"> <script> let timeID = null; document.querySelector('input').oninput = function(){ /* 函数防抖 */ //(1)先清除以前的定时器 clearTimeout(timeID) //(2)开启防抖定时器 timeID = setTimeout(() => { console.log( this.value ); }, 500); } </script> </body> </html>
函数节流
概念: 解决高频事件带来的性能问题;高频事件: 在页面中,有些事件触发频率非常的高。
例如: 鼠标移动,滚轮事件。
解决原理: 用户连续多次触发事件,指定时间内只会触发一次
实例及解决代码:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> <style> body{ height: 3000px; } </style> </head> <body> <script> let lastTime = null; let i = 1; window.onmousemove = function(){ /* 函数节流 */ //(1)判断两次触发事件的时间间隔 let time = Date.now() if( time - lastTime >= 500 ){ console.log('鼠标移动次数:' + i++); //(2)本次触发时间作为下一次参考间隔 lastTime = time } } // let j = 1; // window.onscroll = function(){ // //(1)判断两次触发事件的时间间隔 // let time = Date.now() // if( time - lastTime >= 500 ){ // console.log('鼠标滚动次数:' + j++); // //(2)本次触发时间作为下一次参考间隔 // lastTime = time // } // } </script> </body> </html>
以上就是web项目开发之JS函数防抖与节流示例代码的详细内容,更多关于web项目JS函数防抖与节流的资料请关注猪先飞其它相关文章!
相关文章
- 本篇文章主要分享了通过window.navigator来判断浏览器及其版本信息的实例代码。具有一定的参考价值,下面跟着小编一起来看下吧...2017-01-23
Springboot如何实现Web系统License授权认证
这篇文章主要介绍了Springboot如何实现Web系统License授权认证,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-05-28- 这篇文章主要介绍了js如何实现浏览器打印功能,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下...2020-07-15
C#使用Http Post方式传递Json数据字符串调用Web Service
这篇文章主要为大家详细介绍了C#使用Http Post方式传递Json数据字符串调用Web Service,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-06-25- 这篇文章主要给大家介绍了关于Nest.js参数校验和自定义返回数据格式的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-28
- 下面小编就为大家带来一篇利用JS实现点击按钮后图片自动切换的简单方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-10-25
- 这篇文章主要介绍了js实现调用网络摄像头及常见错误处理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-03-07
- 这篇文章主要为大家详细介绍了JS实现随机生成验证码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-09-06
InterlliJ IDEA2020新建java web项目找不到Static Web的解决
这篇文章主要介绍了InterlliJ IDEA2020新建java web项目找不到Static Web的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-09-02- 作为前端,一直以来都知道HTTP劫持与XSS跨站脚本、CSRF跨站请求伪造。防御这些劫持最好的方法是从后端入手,前端能做的太少。而且由于源码的暴露,攻击者很容易绕过防御手段。但这不代表我们去了解这块的相关知识是没意义的,本文的许多方法,用在其他方面也是大有作用。...2021-05-24
- 这篇文章主要介绍了js组件SlotMachine实现图片切换效果制作抽奖系统的相关资料,需要的朋友可以参考下...2016-04-19
- 这篇文章主要介绍了基于JavaScript实现文字超出部分隐藏 的相关资料,需要的朋友可以参考下...2016-03-01
- 这篇文章主要为大家详细介绍了js实现列表按字母排序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-08-11
- 这篇文章主要介绍了JS实现响应鼠标点击动画渐变弹出层效果代码,具有非常自然流畅的动画过度效果,涉及JavaScript针对鼠标事件的响应及页面元素样式的动态操作相关技巧,需要的朋友可以参考下...2016-03-28
- 本文给大家介绍的是nodejs实现使用阿里大鱼短信API发送消息的方法和代码,有需要的小伙伴可以参考下。...2016-01-20
- Vue.js通过简洁的API提供高效的数据绑定和灵活的组件系统.这篇文章主要介绍了vue.js 表格分页ajax 异步加载数据的相关资料,需要的朋友可以参考下...2016-10-20
- 这次文章要给大家介绍的是node.JS md5加密中文与php结果不一致怎么办,不知道具体解决办法的下面跟小编一起来看看。 因项目需要,需要Node.js与PHP做接口调用,发现nod...2017-07-06
- 系统的学习了一下angularjs,发现angularjs的有些思想根php的模块smarty很像,例如数据绑定,filter。如果对smarty比较熟悉的话,学习angularjs会比较容易一点,这篇文章给大家介绍angularjs filter用法详解,感兴趣的朋友一起学习吧...2015-12-29
- 这篇文章主要为大家详细介绍了js实现上传图片及时预览的相关资料,具有一定的参考价值,感兴趣的朋友可以参考一下...2016-05-09
- 为了网站的安全性,很多朋友都把密码设的比较复杂,但是如何密码不能明显示,不知道输的是对是错,为了安全起见可以把密码显示的,那么基于js代码如何实现的呢?下面通过本文给大家介绍JavaScript实现表单密码的隐藏和显示,需要的朋友参考下...2016-03-03