| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- let zIndex = 1000;
- /**
- * 各个弹层组件应用的定位层级
- * - 该方法调用一次之后,就会累加一次层级
- * - 保证所有弹层按照书写顺序去排列定位层级
- */
- export function usezIndex() {
- const val = zIndex;
- zIndex++;
- return val;
- }
- // 声明
- // data 为数据
- // delay 为时间。delay = null 则直接不使用 防抖 方案
- function debounceRef (data, delay = 300) {
- // 定时器
- let timer = null
- // 数据
- const value = {value: data}
- // 创建 proxy 实例
- const proxy = new Proxy(value, {
- get(target, property) {
- // 返回当前值
- return target[property]
- },
- // set 参数说明
- // target:目标, property:属性, newValue 值, receiver:接收者
- set(target, property, newValue, receiver) {
- // 定时器判断,如果存在则清除当前定时器
- if(timer != null){
- // 清除定时器
- clearTimeout(timer)
- // 将 timer 恢复默认值
- timer = null
- }
- // 赋值并创建定时器
- timer = setTimeout(() => {
- // 修改值
- target[property] = newValue
- }, delay)
- // 让 set 一直返回 true
- // 不返回 true,则会报下列错误: 'set' on proxy: trap returned falsish for property 'value'
- return true;
- }
- })
- // 判断 delay === null,等于则返回未代理的对象,反之
- return delay === null ?value : proxy
- }
|