在项目开发中,我们经常用到的滚动事件或者用户输入事件,都是一些高频事件,如果对这类事件触发的频率没有节制,就会加重浏览器和服务器的负担。节流和防抖目的就是减少事件触发的次数。
-
- <body>
- <label> 姓名:</label><input type="text" placeholder="请输入用户名">
- </body>
- <script>
- // 防抖:短时间内触发多次,只会执行最后一次
- let input=document.querySelector('input')
- const info=function (){
- console.log(input.value);
- }
-
- input.addEventListener('input',debounce(info,1000))
-
- // 封装防抖函数
- function debounce(fn,time){
- let timer=null
- return()=>{
- // 清除上一次的计时器
- clearTimeout(timer)
- timer=setTimeout(() => {
- fn()
- }, time);
- }
- }
- </script>
- <body>
- <div></div>
- </body>
- <script>
- let div=document.querySelector('div')
-
- const info=function(){
- console.log('点击了一次');
- }
-
- div.addEventListener('click',throttle(info,5000))
-
- //封装节流的函数
- function throttle(fn,time){
- let flag=false
- return()=>{
- if(flag===true){
- return
- }
- flag=true
- setTimeout(function(){
- fn()
- flag=false
- },time)
- }
- }
- </script>
a、DOM元素的拖拽功能实现
b、射击游戏中,单位时间内只能发射一颗子弹。
c、计算鼠标移动的距离
d、监听scroll事件