JS新手求助:实现每周五自动切换任务负责人并修改HTML元素类
实现每周五自动切换任务负责人的调度功能
先给你捋清楚原代码里的几个基础错误,再补上核心逻辑:
原代码的问题
Date.getDay()写错了,getDay()是Date实例的方法,应该用new Date().getDay()或者你已经创建的date变量调用:date.getDay()- if条件里用了
=赋值符号,判断相等应该用===(严格相等)或者== - 10秒一次的定时器太浪费资源,毕竟一周才切换一次,改成每天检查一次更合理
- 你只在初始化时获取了一次星期几,定时器里不会更新日期,永远是页面加载那天的星期数,必须每次检查时重新获取日期
完整实现代码
下面是带持久化(页面刷新不重置状态)的完整逻辑,假设你用active类标记当前负责人:
// 获取三个任务元素 const kestrals = document.getElementById("k"); const eagles = document.getElementById("e"); const merlins = document.getElementById("m"); // 把元素放进数组方便轮询 const dutyTeams = [kestrals, eagles, merlins]; // 用本地存储保存当前负责人的索引,页面刷新也不会丢 let currentIndex = parseInt(localStorage.getItem("currentDutyIndex")) || 0; // 页面加载时先设置好初始状态 setActiveDuty(); // 每天检查一次(86400000毫秒 = 24小时) const checkInterval = setInterval(checkForFriday, 86400000); function checkForFriday() { const today = new Date(); const dayOfWeek = today.getDay(); // 5代表周五 // 如果今天是周五,切换负责人 if (dayOfWeek === 5) { // 切换到下一个,循环轮询(到最后一个回到第一个) currentIndex = (currentIndex + 1) % dutyTeams.length; // 把新的索引存到本地存储 localStorage.setItem("currentDutyIndex", currentIndex); // 更新页面显示 setActiveDuty(); } } function setActiveDuty() { // 先移除所有元素的active类 dutyTeams.forEach(team => team.classList.remove("active")); // 给当前负责人的元素加上active类 dutyTeams[currentIndex].classList.add("active"); } // 页面加载完成后立即检查一次,避免要等24小时才触发 checkForFriday();
关键逻辑说明
- 持久化状态:用
localStorage保存当前负责人的索引,就算用户关闭页面再打开,也能接着上次的状态继续轮询 - 类操作分离:把添加/移除类的逻辑单独放在
setActiveDuty函数里,代码更清晰,也方便后续修改样式规则 - 合理的检查频率:每天检查一次是否是周五,既保证不会错过切换时间,又不会浪费浏览器资源
- 初始检查:页面加载时立即执行一次检查,如果当天就是周五,会直接切换负责人,不用等24小时
内容的提问来源于stack exchange,提问作者william j
相关产品推荐
相关产品推荐

