当前位置:首页 > JavaScript

js实现闹钟定时

2026-02-02 20:13:39JavaScript

实现基础闹钟功能

使用JavaScript的setTimeoutsetInterval配合Date对象实现基本闹钟功能。以下是核心代码示例:

function setAlarm(targetTime, callback) {
  const now = new Date();
  const timeDiff = targetTime - now;

  if (timeDiff > 0) {
    setTimeout(() => {
      callback();
    }, timeDiff);
  } else {
    console.log('设置的时间已过去');
  }
}

// 使用示例
const alarmTime = new Date();
alarmTime.setHours(8, 30, 0); // 设置为早上8:30

setAlarm(alarmTime, () => {
  console.log('闹钟响了!');
  // 可以替换为播放音频或显示通知
});

添加重复提醒功能

对于需要每天重复的闹钟,可以结合setInterval和日期判断:

function setDailyAlarm(hour, minute, callback) {
  const checkAlarm = () => {
    const now = new Date();
    if (now.getHours() === hour && now.getMinutes() === minute) {
      callback();
    }
  };

  setInterval(checkAlarm, 60000); // 每分钟检查一次
  checkAlarm(); // 立即执行一次检查
}

// 使用示例
setDailyAlarm(7, 0, () => {
  console.log('每日闹钟:早上7点');
});

添加声音提醒

使用Web Audio API或HTML5的<audio>元素添加声音效果:

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

  // 添加停止按钮功能
  document.getElementById('stopButton').addEventListener('click', () => {
    audio.pause();
  });
}

浏览器通知集成

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

function showNotification() {
  if (!('Notification' in window)) return;

  if (Notification.permission === 'granted') {
    new Notification('闹钟提醒', { body: '时间到了!' });
  } else if (Notification.permission !== 'denied') {
    Notification.requestPermission().then(permission => {
      if (permission === 'granted') {
        new Notification('闹钟提醒', { body: '时间到了!' });
      }
    });
  }
}

完整实现示例

结合上述功能的完整闹钟组件:

js实现闹钟定时

class AlarmClock {
  constructor() {
    this.alarms = [];
    this.audio = new Audio('alarm.mp3');
    this.audio.loop = true;
  }

  addAlarm(time, repeatDaily = false) {
    const alarm = {
      time: new Date(time),
      repeatDaily,
      id: Date.now()
    };

    this.alarms.push(alarm);
    this.scheduleAlarm(alarm);
    return alarm.id;
  }

  scheduleAlarm(alarm) {
    const now = new Date();
    let triggerTime = alarm.time.getTime() - now.getTime();

    if (triggerTime < 0) {
      if (alarm.repeatDaily) {
        // 如果已经过时且需要重复,设置为明天的同一时间
        const tomorrow = new Date(alarm.time);
        tomorrow.setDate(tomorrow.getDate() + 1);
        triggerTime = tomorrow.getTime() - now.getTime();
      } else {
        return; // 不重复的过时闹钟
      }
    }

    setTimeout(() => {
      this.triggerAlarm(alarm);
      if (alarm.repeatDaily) {
        this.scheduleAlarm(alarm); // 重新安排每日闹钟
      }
    }, triggerTime);
  }

  triggerAlarm(alarm) {
    this.audio.play();
    showNotification();
    console.log(`闹钟 ${alarm.id} 响了!`);
  }

  removeAlarm(alarmId) {
    this.alarms = this.alarms.filter(a => a.id !== alarmId);
  }
}

// 使用示例
const clock = new AlarmClock();
clock.addAlarm('2023-07-20T08:00:00', true); // 每天8点

界面集成建议

  1. 创建HTML表单用于设置闹钟时间
  2. 添加开关控制闹钟启用/禁用
  3. 实现保存功能到localStorage
  4. 添加响应式设计适配移动设备
<div id="alarmApp">
  <input type="time" id="alarmTime">
  <button id="setAlarm">设置闹钟</button>
  <div id="alarmList"></div>
  <button id="stopAlarm" style="display:none;">停止</button>
</div>

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

相关文章

js实现分页

js实现分页

实现分页的基本思路 分页功能通常需要处理数据分割、页码生成和用户交互。核心逻辑包括计算总页数、根据当前页截取数据、渲染页码按钮等。 前端分页实现(静态数据) 假设已有全部数据,仅需前端分页展示:…

js实现倒计时

js实现倒计时

实现倒计时的基本方法 使用 JavaScript 实现倒计时功能可以通过 setInterval 或 setTimeout 结合日期计算来完成。以下是几种常见的实现方式: 使用 setInterva…

原生js实现轮播图

原生js实现轮播图

基本结构搭建 HTML部分需要包含轮播图容器、图片列表及导航按钮。结构示例如下: <div class="slider-container"> <div class="slid…

js实现验证

js实现验证

验证表单输入 使用JavaScript验证表单输入是常见的需求。可以通过监听表单提交事件,检查输入字段是否符合要求。 document.getElementById('myForm').addEve…

js jquery

js jquery

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够…

使用js实现

使用js实现

使用JavaScript实现 JavaScript可以通过Math.random()函数生成随机数,结合其他方法可以实现多种随机数生成需求。 // 生成0到1之间的随机小数 const random…