当前位置:首页 > 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>元素实现声音播放:

js实现闹钟

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保存闹钟设置,即使页面刷新也不会丢失:

js实现闹钟

// 保存闹钟
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,可以在闹钟触发时显示系统通知:

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实现轮播

实现基础轮播效果 使用HTML结构创建轮播容器和图片元素: <div class="carousel"> <div class="carousel-inner">…

js实现文件下载

js实现文件下载

使用 a 标签下载文件 通过动态创建 a 标签并设置 download 属性实现文件下载。适用于已知文件 URL 或 Blob 数据的情况。 function downloadFile(url, f…

js实现报表

js实现报表

使用JavaScript实现报表 在JavaScript中实现报表功能可以通过多种方式完成,常见的方法包括使用原生JavaScript、第三方库(如Chart.js、D3.js)或结合后端数据渲染。以…

js实现百叶窗

js实现百叶窗

使用CSS和JavaScript实现百叶窗效果 通过CSS动画和JavaScript事件监听可以实现百叶窗效果。核心思路是将内容区域分割为多个条状元素,通过控制它们的展开/折叠状态来模拟百叶窗。 &…

js实现vue路由

js实现vue路由

Vue 路由的基本实现 在 Vue.js 中实现路由功能通常使用 Vue Router 库。Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用(SPA)。 安装 Vue R…

js实现原理

js实现原理

JavaScript 实现原理 JavaScript 是一种解释型语言,其实现原理涉及多个核心组件和运行机制,包括引擎、运行时环境、事件循环等。 引擎与解释执行 现代 JavaScript 引擎(如…