当前位置:首页 > JavaScript

js实现闹钟

2026-03-01 12:08:33JavaScript

实现基本闹钟功能

使用JavaScript的Date对象和setInterval可以构建基础闹钟功能。以下代码实现了一个简单的闹钟,当到达设定时间时会触发警报:

function setAlarm(alarmTime) {
  const checkAlarm = setInterval(() => {
    const now = new Date();
    if (now.getHours() === alarmTime.getHours() && 
        now.getMinutes() === alarmTime.getMinutes()) {
      clearInterval(checkAlarm);
      alert('闹钟响了!');
    }
  }, 1000);
}

// 使用示例:设置明天上午8点的闹钟
const alarmTime = new Date();
alarmTime.setDate(alarmTime.getDate() + 1);
alarmTime.setHours(8);
alarmTime.setMinutes(0);
alarmTime.setSeconds(0);

setAlarm(alarmTime);

添加声音提示

基础警报可以使用浏览器的AudioContext或HTML5的<audio>元素实现声音播放:

function playAlarmSound() {
  const audio = new Audio('alarm_sound.mp3');
  audio.loop = true;
  audio.play();

  // 添加停止按钮功能
  document.getElementById('stopButton').onclick = () => {
    audio.pause();
    audio.currentTime = 0;
  };
}

可视化界面实现

结合HTML和CSS创建用户友好的闹钟界面:

<div id="alarm-container">
  <input type="time" id="alarm-time">
  <button id="set-alarm">设置闹钟</button>
  <button id="stop-alarm" disabled>停止</button>
</div>

<script>
  document.getElementById('set-alarm').addEventListener('click', () => {
    const timeString = document.getElementById('alarm-time').value;
    const [hours, minutes] = timeString.split(':');

    const alarmTime = new Date();
    alarmTime.setHours(parseInt(hours));
    alarmTime.setMinutes(parseInt(minutes));
    alarmTime.setSeconds(0);

    setAlarm(alarmTime);
  });
</script>

添加本地存储功能

使用localStorage保存闹钟设置,即使页面刷新也不会丢失:

// 保存闹钟
function saveAlarm(alarmTime) {
  localStorage.setItem('alarmTime', alarmTime.getTime());
}

// 加载保存的闹钟
function loadAlarm() {
  const savedTime = localStorage.getItem('alarmTime');
  if (savedTime) {
    return new Date(parseInt(savedTime));
  }
  return null;
}

完整实现示例

以下是一个完整的闹钟实现,包含设置、保存和响铃功能:

class AlarmClock {
  constructor() {
    this.alarmTime = null;
    this.alarmInterval = null;
    this.audio = new Audio('alarm.mp3');

    this.loadAlarm();
  }

  setAlarm(hours, minutes) {
    this.clearAlarm();

    const now = new Date();
    this.alarmTime = new Date();
    this.alarmTime.setHours(hours);
    this.alarmTime.setMinutes(minutes);
    this.alarmTime.setSeconds(0);

    if (this.alarmTime < now) {
      this.alarmTime.setDate(this.alarmTime.getDate() + 1);
    }

    this.saveAlarm();
    this.startAlarmCheck();
  }

  startAlarmCheck() {
    this.alarmInterval = setInterval(() => {
      const now = new Date();
      if (now >= this.alarmTime) {
        this.triggerAlarm();
      }
    }, 1000);
  }

  triggerAlarm() {
    this.audio.loop = true;
    this.audio.play();
    this.clearAlarm();
  }

  stopAlarm() {
    this.audio.pause();
    this.audio.currentTime = 0;
  }

  clearAlarm() {
    if (this.alarmInterval) {
      clearInterval(this.alarmInterval);
      this.alarmInterval = null;
    }
  }

  saveAlarm() {
    if (this.alarmTime) {
      localStorage.setItem('alarmTime', this.alarmTime.getTime());
    }
  }

  loadAlarm() {
    const savedTime = localStorage.getItem('alarmTime');
    if (savedTime) {
      this.alarmTime = new Date(parseInt(savedTime));
      this.startAlarmCheck();
    }
  }
}

浏览器通知支持

现代浏览器支持Notification API,可以在闹钟触发时显示系统通知:

js实现闹钟

function showNotification() {
  if (!("Notification" in window)) {
    console.log("浏览器不支持通知");
    return;
  }

  if (Notification.permission === "granted") {
    new Notification("闹钟时间到");
  } else if (Notification.permission !== "denied") {
    Notification.requestPermission().then(permission => {
      if (permission === "granted") {
        new Notification("闹钟时间到");
      }
    });
  }
}

这些代码示例展示了如何使用JavaScript实现各种闹钟功能,可以根据需要组合使用或扩展功能。

标签: 闹钟js
分享给朋友:

相关文章

js实现倒计时

js实现倒计时

使用 setInterval 实现倒计时 通过 setInterval 定时器每秒更新剩余时间,适用于简单倒计时场景。 function countdown(seconds, callback) {…

js实现换肤

js实现换肤

使用CSS变量实现换肤 通过CSS变量可以轻松实现主题切换功能。CSS变量在根元素中定义,通过JavaScript动态修改这些变量值。 :root { --primary-color: #349…

js实现上传文件

js实现上传文件

文件上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API可以实现文件上传功能。 <input type="file"…

js实现显示隐藏

js实现显示隐藏

显示隐藏的实现方法 在JavaScript中,实现元素的显示和隐藏可以通过多种方式完成。以下是几种常见的方法: 修改CSS的display属性 通过改变元素的display属性可以在none(隐藏)…

js分页实现

js分页实现

分页的基本原理 分页的核心是通过计算当前页码和数据偏移量,从服务器或本地数据中截取对应范围的数据进行展示。通常需要以下参数:当前页码(currentPage)、每页条数(pageSize)、总数据量(…

js实现删除

js实现删除

使用 splice 方法删除数组元素 splice 方法可以删除数组中的元素,并返回被删除的元素。它接受两个参数:起始索引和要删除的元素数量。 const array = [1, 2, 3, 4…