今天做一个展开收起的一个组件,为了适应用户不停的改变窗口宽度的情况,用到了resize函数,也就是在窗口尺寸改变时不停的执行某个函数, 理论上虽然可以,但是这种高频率的触发事件,不仅会损耗页面性能,出现导致页面卡顿,页面抖动,如果你的函数中有一些异步操作时, 还可能导致结果的顺序不一致,为了防止这种情况,我找到了这个。

https://www.lodashjs.com/ (opens new window),他说它是一个一致性、模块化、高性能的 JavaScript 实用工具库,应该很有用的, 有时间研究下,但是今天我只看了他的debounce(仿抖动)函数,点击这里 (opens new window) 查看文档。

其实就一个函数:_.debounce(func, wait, options)

# 参数

  • func (Function): 要防抖动的函数。
  • [wait=0] (number): 需要延迟的毫秒数。
  • [options={}] (Object): 选项对象。
  • [options.leading=false] (boolean): 指定在延迟开始前调用。
  • [options.maxWait] (number): 设置 func 允许被延迟的最大值。
  • [options.trailing=true] (boolean): 指定在延迟结束后调用。

# 返回

(Function): 返回新的 debounced(防抖动)函数。(就是说它执行完之后会返回一个新的debounced函数)

# 例子

    var i = 0;
    //没有添加debounced
    window.addEventListener('resize',function(){
        console.log(i++)
    }, false);

    //添加了debounced仿抖动函数
    window.addEventListener('resize',_.debounce(function(){
        console.log(i++)
    },200,{
        leading:false,
        maxWait:1000,
        trailing:true
    }), false);

# 总结

它好像还有个函数throttle,下次再补~

上次更新:: 3/9/2020, 9:57:42 PM