1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. <style>
  9. #app{
  10. width:100px;
  11. height: 100px;
  12. border:1px solid #333;
  13. }
  14. </style>
  15. </head>
  16. <body>
  17. <div id="app" draggable="true">
  18. 可拖拽
  19. </div>
  20. <script>
  21. /* 单位时间以外,只触发一次,如果在这个单位时间之内多次触发,最终也只会执行一次
  22. 走A-DFN 打枪
  23. */
  24. /*
  25. 1、射击游戏中 鼠标事件
  26. 2、鼠标的移动距离测算
  27. 3、input http 搜索联想
  28. */
  29. /* 节流:无论你拖拽一个元素多快,事件都会每间隔200ms触发一次 */
  30. /* 节流可以让函数变得平滑 */
  31. let timer = null;
  32. const app = document.getElementById("app");
  33. app.addEventListener("drag",function(e){
  34. if(timer){
  35. return
  36. }
  37. timer = setTimeout(()=>{
  38. console.log(e.offsetX,e.offsetY)
  39. timer = null;
  40. },500)
  41. })
  42. </script>
  43. </body>
  44. </html>

封装节流函数

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. <style>
  9. #app{
  10. width:100px;
  11. height: 100px;
  12. border:1px solid #333;
  13. }
  14. </style>
  15. </head>
  16. <body>
  17. <div id="app" draggable="true">
  18. 可拖拽
  19. </div>
  20. <script>
  21. const app = document.getElementById("app");
  22. app.addEventListener("drag",throttle(function(e){
  23. console.log(e.offsetY)
  24. }))
  25. function throttle(fn,delay=500){
  26. let timer=null;
  27. return function(){
  28. // var args = arguments;
  29. // console.log(args);
  30. if(timer){
  31. return
  32. }
  33. timer = setTimeout(()=>{
  34. /* arguments是函数内部的一个对象,接收函数传递过来的参数 */
  35. console.log(arguments)
  36. fn.apply(this,arguments);
  37. timer = null;
  38. },delay)
  39. }
  40. }
  41. </script>
  42. </body>
  43. </html>