前端-弹窗公告不再提示功能

本文介绍了一种利用LocalStorage来管理网站通知Cookie的方法。通过自定义接口和函数实现通知的存储、读取及删除功能,并支持设置过期时间。文章详细展示了如何通过JavaScript操作LocalStorage来实现这些功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

完整代码就不写了, 主要是使用localStorage存储; cookie也是可以的,需要传入清除时间,请自行查找资料

interface ICookie {
    cname:string;
     value:string; 
    endTime?: string|number; //是number时为时间戳
}

const setCookie= ({cname, value, endTime}:ICookie) => {
    let date:any = 0
    if(endTime) {
        date = formatDate(endTime);
    }
    let obj:any = JSON.parse(localStorage.noticeCookie||'{}');
    obj[cname] = {
        cname,
        value: base64.encode(value),
        time: date, 
    }
    localStorage.noticeCookie = JSON.stringify(obj);
  }
  // 获取cookie,传入key以获取value
  const getCookie = (cname='') => {
      const obj:any = JSON.parse(localStorage.noticeCookie||'{}');
      removeCookie(obj, cname);
      return obj[cname]?base64.decode(get(obj[cname], 'value')):'';
  }

  const removeCookie = (obj:any={}, cname) => {
    for(let key in obj) {
        const endTime = get(obj[key], 'time') || 0;
        if(!timeFlag(endTime)) {
            obj[key] && delete obj[key]
        }
    }
    localStorage.noticeCookie = JSON.stringify(obj);
  }

  const timeFlag= (endTime) => {
    let date:any = formatDate(endTime);
    const nowTime = formatDate();
    console.log(Number(date)>nowTime,Number(date),nowTime)
    return Number(date)>nowTime;
  }


const closeModal = (item: any = {}) => {
        const key0 = get(item, 'NOTICE_ID', '');
        const key = base64.encode(key0);
        const endTime = item.TIME_END;
        setCookie({
           cname:  `closeNotice${key}`,
           value: 'N',
           endTime,
        })
        onClickClose && onClickClose();
    };

    const showModal = item => {
        const key0 = get(item, 'NOTICE_ID', '');
        const key = base64.encode(key0);
        const endTime = item.TIME_END;
        if (item.TYPE === 'POP' && key) { // 组件内自定义存储数据判断
            console.log(getCookie(`closeNotice${key}`),'getCookie(`closeNotice${key}`)')
            if (getCookie(`closeNotice${key}`) !== 'N') {
                setCookie({
                    cname:  `closeNotice${key}`,
                    value: isShow ? 'Y':'N',
                    endTime,
                 })
            }
            else {
                closeModal();
            }
        }

    };

// 使用moment方法将时间转换为时间戳:

function formatDate(endTime?:string|number) {
    let date:any = new Date();
    if(endTime) {
        date = moment(endTime).unix() * 1000
    }
    return date;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值