1. <div id="app" draggable="true">
  2. 可拖拽
  3. </div>
  4. <script>
  5. // 单位时间以内只触发一次,
  6. // 鼠标移动距离测算
  7. // input http 搜索
  8. // 节流:无论你拖拽一个元素多快,时间都会每隔500ms触发一次
  9. // 节流可以让函数变得平滑
  10. let timer = null;
  11. const app = document.getElementById("app");
  12. app.addEventListener("drag",function(e){
  13. if(timer){
  14. return
  15. }
  16. timer = setTimeout(()=>{
  17. console.log(e.offsetX,e.offsetY);
  18. timer = null;
  19. },500)
  20. })
  21. </script>

封装函数节流

  1. <body>
  2. <div id="app" draggable="true">
  3. 可拖拽
  4. </div>
  5. <script>
  6. const app = document.getElementById("app");
  7. app.addEventListener("drag", throttle(function (e) {
  8. console.log(e.offsetY);
  9. }))
  10. function throttle(fn, delay = 500) {
  11. let timer = null;
  12. return function () {
  13. if (!timer) {
  14. timer = setTimeout(() => {
  15. // arguments 是函数内部的一个对象,接收函数传递过来的参数
  16. console.log(arguments);
  17. fn.apply(this, arguments);
  18. timer = null;
  19. }, 5000)
  20. }
  21. }
  22. }
  23. </script>
  24. </body>