hooks.js 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. let zIndex = 1000;
  2. /**
  3. * 各个弹层组件应用的定位层级
  4. * - 该方法调用一次之后,就会累加一次层级
  5. * - 保证所有弹层按照书写顺序去排列定位层级
  6. */
  7. export function usezIndex() {
  8. const val = zIndex;
  9. zIndex++;
  10. return val;
  11. }
  12. // 声明
  13. // data 为数据
  14. // delay 为时间。delay = null 则直接不使用 防抖 方案
  15. function debounceRef (data, delay = 300) {
  16. // 定时器
  17. let timer = null
  18. // 数据
  19. const value = {value: data}
  20. // 创建 proxy 实例
  21. const proxy = new Proxy(value, {
  22. get(target, property) {
  23. // 返回当前值
  24. return target[property]
  25. },
  26. // set 参数说明
  27. // target:目标, property:属性, newValue 值, receiver:接收者
  28. set(target, property, newValue, receiver) {
  29. // 定时器判断,如果存在则清除当前定时器
  30. if(timer != null){
  31. // 清除定时器
  32. clearTimeout(timer)
  33. // 将 timer 恢复默认值
  34. timer = null
  35. }
  36. // 赋值并创建定时器
  37. timer = setTimeout(() => {
  38. // 修改值
  39. target[property] = newValue
  40. }, delay)
  41. // 让 set 一直返回 true
  42. // 不返回 true,则会报下列错误: 'set' on proxy: trap returned falsish for property 'value'
  43. return true;
  44. }
  45. })
  46. // 判断 delay === null,等于则返回未代理的对象,反之
  47. return delay === null ?value : proxy
  48. }