<body> <div id="app" draggable="true"> 可拖拽 </div> <script> //单位时间以内,只触发一次,如果在这个单位时间之内多次触发,最终也只会执行一次 //节流:无论你拖拽一个元素多块,事件都会没间隔一毫秒触发一次 let timer =null; const app=document.querySelector('#app') app.addEventListener('drag',function(e){ if(timer){ return } timer=setTimeout(()=>{ console.log(e.offsetX,e.offsetY); timer=null },500) }) </script></body>
闭包封装函数节流
<div id="app" draggable="true"> 可拖拽 </div> <script> //单位时间以内,只触发一次,如果在这个单位时间之内多次触发,最终也只会执行一次 //节流:无论你拖拽一个元素多块,事件都会没间隔一毫秒触发一次 let timer =null; const app=document.querySelector('#app') app.addEventListener('drag',throttle(function(e){ console.log(e.offsetX,e.offsetY); })) function throttle(fn,delay=500){ let timer=null; return function(){ if(timer){ return } timer =setTimeout(()=>{ //arguments 是函数内部的一个对象,接受函数传递过来 console.log(arguments); fn.apply(this,arguments); timer=null },delay) } } </script>