网站倒计时时钟清除浏览器历史后重置问题求助
解决倒计时清除浏览器记录后重置的问题
这个问题的核心原因很明确:你当前的代码每次页面加载时都会重新生成一个新的15天后的截止时间,没有把这个截止时间持久化保存下来。当你清除浏览器历史(或站点存储数据)后,页面重新加载时又会从头计算15天,自然就出现了重置的情况。
完全不用更换整个代码,只需要修改JavaScript部分,利用浏览器的localStorage来持久化存储截止时间即可。下面是修改后的完整代码,我会标注关键改动:
修改后的JavaScript代码
function getTimeRemaining(endtime) { var t = Date.parse(endtime) - Date.parse(new Date()); var seconds = Math.floor((t / 1000) % 60); var minutes = Math.floor((t / 1000 / 60) % 60); var hours = Math.floor((t / (1000 * 60 * 60)) % 24); var days = Math.floor(t / (1000 * 60 * 60 * 24)); return { 'total': t, 'days': days, 'hours': hours, 'minutes': minutes, 'seconds': seconds }; } function initializeClock(id, endtime) { var clock = document.getElementById(id); var daysSpan = clock.querySelector('.days'); var hoursSpan = clock.querySelector('.hours'); var minutesSpan = clock.querySelector('.minutes'); var secondsSpan = clock.querySelector('.seconds'); function updateClock() { var t = getTimeRemaining(endtime); daysSpan.innerHTML = t.days; hoursSpan.innerHTML = ('0' + t.hours).slice(-2); minutesSpan.innerHTML = ('0' + t.minutes).slice(-2); secondsSpan.innerHTML = ('0' + t.seconds).slice(-2); if (t.total <= 0) { clearInterval(timeinterval); // 倒计时结束后清除存储,下次加载会重新开始新的倒计时 localStorage.removeItem('countdownDeadline'); } } updateClock(); var timeinterval = setInterval(updateClock, 1000); } // 关键改动:从localStorage读取截止时间,不存在则生成新的并存储 var deadline = localStorage.getItem('countdownDeadline'); if (!deadline) { // 第一次加载页面时生成15天后的时间 deadline = new Date(Date.parse(new Date()) + 15 * 24 * 60 * 60 * 1000); localStorage.setItem('countdownDeadline', deadline); } initializeClock('clockdiv', deadline);
改动说明
- 持久化存储截止时间:页面加载时先检查
localStorage里有没有保存的countdownDeadline:- 如果有,直接使用这个已有的截止时间,不会重新计算
- 如果没有(第一次加载或者倒计时已经结束),则生成新的15天后的时间并存入
localStorage
- 倒计时结束清理:当倒计时结束后,我添加了清除
localStorage的代码,这样下次页面加载时会重新开始一个新的15天倒计时,你可以根据需求去掉这行。
注意事项
localStorage的数据会一直保存在浏览器中,除非用户手动清除站点存储数据,或者你通过代码删除。如果用户清除了浏览器的站点存储,倒计时还是会重置——这是前端存储的局限性,如果需要完全不受浏览器清除操作影响,那得把截止时间存在后端服务器,每次页面加载时从后端获取。- CSS和HTML部分不需要任何修改,保持你原来的代码即可。
内容的提问来源于stack exchange,提问作者jessie williams
相关产品推荐
相关产品推荐

