You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Advent Calendar设置各日历门仅指定日期可开启的功能

实现步骤

你只需要修改CSS和JavaScript两个文件即可,改动非常小:

第一步:新增未解锁门的样式(修改styles.css)

在styles.css文件末尾添加以下代码,用来区分可点击和不可点击的门:

/* 未解锁门样式 */
.text.locked {
  background-color: #cccccc;
  cursor: not-allowed;
  color: #666666;
}

第二步:添加日期判断逻辑(修改main.js)

首先在JS文件最顶部,原有变量声明的下方,新增一个获取当前可解锁最大门编号的函数:

// 获取当前可解锁的最大门编号
const getMaxÅbenDag = () => {
  const now = new Date();
  const month = now.getMonth() + 1; // getMonth返回0-11,+1后对应1-12月
  const day = now.getDate();
  // 仅12月按日期解锁,非12月默认全锁,测试时可以把返回值改成24查看所有门效果
  if (month === 12) {
    return Math.min(day, 24);
  }
  return 0;
}

然后修改原有startKalender函数里添加点击事件的逻辑,替换成以下代码:

const startKalender = () => {
  const maxUnlockDay = getMaxÅbenDag();
  for(let i = 0; i  < kalenderDage; i++) {
    const kalenderLåge = document.createElement("div");
    const kalenderLågeTekst = document.createElement("div");

    kalenderLåge.classList.add("image");
    kalenderLåge.style.gridArea = "låge" + (i +1);
    kalenderContainer.appendChild(kalenderLåge);

    kalenderLågeTekst.classList.add("text");
    kalenderLågeTekst.innerHTML = i + 1;
    kalenderLåge.appendChild(kalenderLågeTekst);

    const lågeNummer = i + 1;
    const coursePath = `./filer/låge${lågeNummer}.jpg`;

    // 判断门是否可解锁
    if (lågeNummer <= maxUnlockDay) {
      kalenderLågeTekst.addEventListener("click", åbenLåge.bind(null, coursePath));
    } else {
      kalenderLågeTekst.classList.add("locked");
      // 点击未解锁门弹出提示,不需要可以删掉这行
      kalenderLågeTekst.addEventListener("click", () => alert(`这扇门要12月${lågeNummer}号才能打开哦`));
    }
  }
}

注意:如果需要本地测试效果,只需要临时把getMaxÅbenDag函数里的返回值改成你想要测试的数字即可,比如改成5就能看到前5扇门可点击,后续门锁定的效果。

内容的提问来源于stack exchange,提问作者Freja

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 07:45:03