函数防抖

  1. /**
  2. * @desc 函数防抖
  3. * @param func 目标函数
  4. * @param wait 延迟执行毫秒数
  5. * @param immediate true - 立即执行, false - 延迟执行
  6. */
  7. export const debounce = (func, wait = 1000, immediate = true) => {
  8. let timer;
  9. return function() {
  10. let context = this,
  11. args = arguments;
  12. if (timer) clearTimeout(timer);
  13. if (immediate) {
  14. let callNow = !timer;
  15. timer = setTimeout(() => {
  16. timer = null;
  17. }, wait);
  18. if (callNow) func.apply(context, args);
  19. } else {
  20. timer = setTimeout(() => {
  21. func.apply
  22. }, wait)
  23. }
  24. }
  25. }

storage过期封装

  1. class Storage {
  2. constructor(name) {
  3. this.name = 'storage';
  4. }
  5. //设置缓存
  6. setItem(params) {
  7. let obj = {
  8. name: '',
  9. value: '',
  10. expires: "",
  11. startTime: new Date().getTime() //记录何时将值存入缓存,毫秒级
  12. }
  13. let options = {};
  14. //将obj和传进来的params合并
  15. Object.assign(options, obj, params);
  16. if (options.expires) {
  17. //如果options.expires设置了的话
  18. //以options.name为key,options为值放进去
  19. localStorage.setItem(options.name, JSON.stringify(options));
  20. } else {
  21. //如果options.expires没有设置,就判断一下value的类型
  22. let type = Object.prototype.toString.call(options.value);
  23. //如果value是对象或者数组对象的类型,就先用JSON.stringify转一下,再存进去
  24. if (Object.prototype.toString.call(options.value) == '[object Object]') {
  25. options.value = JSON.stringify(options.value);
  26. }
  27. if (Object.prototype.toString.call(options.value) == '[object Array]') {
  28. options.value = JSON.stringify(options.value);
  29. }
  30. localStorage.setItem(options.name, options.value);
  31. }
  32. }
  33. //拿到缓存
  34. getItem(name) {
  35. let item = localStorage.getItem(name);
  36. //先将拿到的试着进行json转为对象的形式
  37. try {
  38. item = JSON.parse(item);
  39. } catch (error) {
  40. //如果不行就不是json的字符串,就直接返回
  41. item = item;
  42. }
  43. //如果有startTime的值,说明设置了失效时间
  44. if (item && item.startTime) {
  45. let date = new Date().getTime();
  46. //何时将值取出减去刚存入的时间,与item.expires比较,如果大于就是过期了,如果小于或等于就还没过期
  47. if (date - item.startTime > item.expires) {
  48. //缓存过期,清除缓存,返回false
  49. localStorage.removeItem(name);
  50. return false;
  51. } else {
  52. //缓存未过期,返回值
  53. return item.value;
  54. }
  55. } else {
  56. //如果没有设置失效时间,直接返回值
  57. return item;
  58. }
  59. }
  60. //移出缓存
  61. removeItem(name) {
  62. localStorage.removeItem(name);
  63. }
  64. //移出全部缓存
  65. clear() {
  66. localStorage.clear();
  67. }
  68. }