javascript设计模式——节流模式

节流模式:对重复的业务逻辑进行节流控制,执行最后一次操作并取消其他操作,以提高性能
代码实现:监听滚动事件,出现卡顿问题,因为scorll事件频繁调用回调。可以通过节流模式,减少回调次数。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>节流器模式</title>
  <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
  <script>
    var throttle = function () {
      var isClear = arguments[0], fn
      // 如果第一个参数是boolean烈性,那么第一个参数则表示是否清除计时器
      if (typeof isClear === 'boolean') {
        fn = arguments[1]
        fn._throttleID && clearTimeout(fn._throttleID)
      } else {
        fn = isClear
        // 第二个参数为函数执行参数
        param = arguments[1]
        arguments.callee(true, fn)
        fn._throttleID = setTimeout(function () {
          fn.apply(null, param)
        }, 300)
      }
    }

    function moveScroll () {
      var top = $(document).scrollTop()
      console.log(top)
    }
    $(window).on('scroll', function () {
      throttle(moveScroll)
    })

  </script>
</head>
<body>
  <div style="height: 2000px;"></div>
</body>
</html>
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,404评论 25 708
  • java 接口的意义-百度 规范、扩展、回调 抽象类的意义-乐视 为其子类提供一个公共的类型封装子类中得重复内容定...
    交流电1582阅读 2,279评论 0 11
  • 跟我同辈以上的人都叫我傻儿,冤死了,我老想用臭袜子堵上那些人的嘴,包括我妈。可是我不敢,前天还挨了我妈一记耳光,就...
    枚雨阅读 545评论 9 5
  • 一直想写一下莹的故事,为了方便起见,就用第一人称来代替吧! 我出生在美丽的江城武汉,从小就跟着外公外婆一起生活,我...
    亦为清心阅读 271评论 5 2