高频事件

  • window对象的resize、scroll和拖拽时的mousemove事件
  • 射击游戏中的mousedow、keydown事件
  • 类似百度搜索提示的keyup事件

    防抖

    在事件多次触发时,通过防抖,只执行最后一次处理程序; ```javascript var delay = 300; var common = document.getElementById(‘common’) // 获取页面的左边 var special = document.getElementById(‘special’) // 获取页面的右边

var timeid;

function debounce(fn, delay) { // 定义一个debounce函数 clearTimeout(timeid) timeid = setTimeout(function () { fn() }, delay) }

function addlist() { // 监听事件的响应事件,执行dom操作。 special.innerHTML += ‘

  • k
  • ‘ }

    function commonWay() { // 这是执行了普通的函数 common.innerHTML += ‘

  • k
  • ‘ } // 这是执行debounce的。 window.onresize = function () { debounce(addlist, delay) //这一个防抖设置 commonWay() // 这个是普通的函数执行 }

    1. <a name="xLw6N"></a>
    2. ## 节流
    3. 降低事件处理程序执行的频率。比如:onmousemove事件如果每秒执行200次,通过节流使他只执行20次。
    4. ```javascript
    5. var delay = 300;
    6. var common = document.getElementById('common') // 获取页面的左边
    7. var special = document.getElementById('special') // 获取页面的右边
    8. function addlist() { // 监听事件的响应事件,执行dom操作。
    9. special.innerHTML += '<li>k</li>'
    10. }
    11. function commonWay() { // 这是执行了普通的函数
    12. common.innerHTML += '<li>k</li>'
    13. }
    14. // tottle的实现,也就是节流的实现,就是设置了一个一开始函数运行的时间戳进行执行
    15. var startTime, timestamp, timer;
    16. function throttle(fn, delay) {
    17. timestamp = +new Date()
    18. clearTimeout(timer)
    19. if (!startTime) {
    20. startTime = timestamp
    21. }
    22. if (timestamp - startTime >= delay) {
    23. fn()
    24. startTime = timestamp
    25. } else {
    26. timer = setTimeout(function () {
    27. fn()
    28. }, delay)
    29. }
    30. }
    31. function debounce(fn, delay) { // 定义一个debounce函数
    32. clearTimeout(fn.timeid)
    33. fn.timeid = setTimeout(function () {
    34. fn()
    35. }, delay)
    36. }
    37. window.addEventListener('resize', function () {
    38. throttle(commonWay, 100);
    39. debounce(addlist, delay);
    40. })