vue自定义指令:防抖与节省

访客4年前黑客文章664

防抖

注释:触发事宜后,一段时间内没有再次触发则执行,若此时间段内再次触发重新延时!

v-antiShake

// 实现

Vue.directive('antiShake', {
  // 被绑定米素插入父节点时挪用 (仅保证父节点存在,但不一定已 *** 入文档中)。
  /**
  * el 指令所绑定的米素,可以用来直接操作 DOM 。
  * binding 一个工具,包罗绑定的值
  */
  
  inserted: function(el, binding) {
    const { callback, time } = binding.value
    el.callback = callback
    el.time = time
    el.timeCall = null
    el.addEventListener('click', () => {
      clearTimeout(el.timeCall)
      el.timeCall = setTimeout(() => {
        el.callback()
      }, el.time || 500)
    })
  },
  // 所在组件的 VNode 更新时挪用
  update: function(el, binding) {
    console.log('update')
    const { callback, time } = binding.value
    el.callback = callback
    el.time = time
  },
})

焦点原理

     const { callback, time } = binding.value
    el.callback = callback
    el.time = time
    el.timeCall = null
    el.addEventListener('click', () => {
      clearTimeout(el.timeCall)
      el.timeCall = setTimeout(() => {
        el.callback()
      }, el.time || 500)
    })

通过定时器setTimeout延时执行click回调,当el.time || 500 时间内,再次触发时 clearTimeout(el.timeCall)关闭定时器,再次重新延时

el.callback = callback 和 el.time = time 挂在el上是为了,当v-antiShake绑定的值更新后,事宜触发更新后的callback

 update: function(el, binding) {
    console.log('update')
    const { callback, time } = binding.value
    el.callback = callback
    el.time = time
  },
使用

指令的值testClick未做深watch,只有工具整体改变才会触发指令中update钩子函数

 <button v-antiShake="testClick">click</button>
 
 // testClick
  testClick: {
     time: 1000,
     callback: () => {
        console.log(1111)
        console.log(this.test)
      }
  }


节省

一段时间内首次触发时立刻执行,此时间段内再次触发,不会执行!

实现:

Vue.directive('throttling', {
  // 被绑定米素插入父节点时挪用 (仅保证父节点存在,但不一定已 *** 入文档中)。
  inserted: function(el, binding) {
    const { callback, time } = binding.value
    el.callback = callback
    el.time = time
    el.addEventListener('click', () => {
      const nowTime = new Date().getTime()
      if (!el.preTime || nowTime - el.preTime > el.time) {
        el.preTime = nowTime
        el.callback()
      }
    })
  },
  update: function(el, binding) {
    console.log('update')
    const { callback, time } = binding.value
    el.callback = callback
    el.time = time
  }
})

el.preTime 纪录上次触发事宜,每次触发对照nowTime(当前时间) 和 el.preTime 的差是否大于指定的时间段!


思源资源网:分类流动

1.阿里云: 本站现在使用的是阿里云主机,平安/可靠/稳固。点击领取2000米代金券、领会最新阿里云产物的种种优惠流动点击进入

相关文章

粉色高帮搭配什么裤子好看吗(粉色鞋子搭配示

粉色高帮搭配什么裤子好看吗(粉色鞋子搭配示

帆布鞋是非常休闲运动的一款鞋子,设计简单,却代表着青春潮流和个性,每个年龄层都很喜欢穿帆布鞋,也是非常百搭的款式。 帆布鞋搭配牛仔裤、阔腿裤、运动裤都很不错,搭配起来更为轻松一点。今天说一下高帮...

如何把自己伪装成电脑黑客(电脑代码指令伪装黑客)

如何把自己伪装成电脑黑客(电脑代码指令伪装黑客)

     年轻的程序猿朋友们,从东岸、中部、南加……迁徙到硅谷的你,是否希望远处的美女向你投来崇拜的目光希望身边的朋友觉得你很酷很牛逼今天我们来聊聊如何在硅谷装成一个牛逼的程序猿。   初级版   ...

网站关键字要怎么写?

网站关键字要怎么写?

网站关键字(Keywords),或叫网站关键词,就是一个网站设定出来,以便用户通过搜索引擎能搜到本网站的词汇,网站关键字代表了我们企业网站的市场定位。好的关键字设置,是我们的企业网站提升用户访问量的关...

找几部黑客系列的美剧(黑客美剧)

龙胆虎威里面好像有一集恐怖分子控制了整个美国的计算机系统!·最后主角在两名黑客的帮助下成功破案很经典值得一看! 疑犯追踪personofinterest(POI) 虎胆威龙4,这末简单,不会是刷吧...

车管所黑客攻击,查看老婆的微信记录黑客技术,黑客最近破解wif密码 软件

一些公共WHOIS服务器支撑高档查询,咱们能够运用这些查询来搜集方针安排的各种信息。 咱们必定见过许多Magento电商网站,其间一些受害者包含新闻门户、律所、软件公司以及小型典型运营商,都运转着CM...

黑客帝国矩阵重启1080p无水印图片下载(黑客帝国重访矩阵)

黑客帝国矩阵重启1080p无水印图片下载(黑客帝国重访矩阵)

本文目录一览: 1、电影 黑客帝国全集下载,要带字幕 2、能发下[影视帝国黑客帝国:矩阵革命.The.Matrix.Revolutions.2003.480p.Bluray的种子或下载链接么?...