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

求助:基于Javascript结合系统时钟实现网页端无限数字朗读功能

实现基于本地时钟的网页无限数字朗读脚本入门指南

核心技术选型

不用依赖Google TTS这类外部服务,直接用浏览器原生的Web Speech API即可实现文本朗读,结合JavaScript的本地时钟(Date对象)生成无限变化的数字序列,完全在前端运行,无需服务器支持。

分步实现指南

1. 准备数字-英文单词映射表

先定义0-9对应的英文朗读词汇,这是基础:

const numToWord = {
  '0': 'zero',
  '1': 'one',
  '2': 'two',
  '3': 'three',
  '4': 'four',
  '5': 'five',
  '6': 'six',
  '7': 'seven',
  '8': 'eight',
  '9': 'nine'
};

2. 从本地时钟生成无限数字序列

利用Date.now()获取当前时间戳(毫秒级,永远递增),把时间戳转成字符串后拆分每个数字,就能得到源源不断的数字序列。比如时间戳1718000000000会拆成['1','7','1','8','0','0','0','0','0','0','0','0'],逐个朗读这些数字对应的单词。

3. 实现朗读逻辑与循环触发

结合Web Speech API实现朗读,同时添加用户触发按钮(浏览器要求TTS必须由用户交互启动,不能自动运行),并设置循环逻辑:

<!-- 页面添加启动按钮 -->
<button id="startBtn">开始数字朗读</button>

<script>
const numToWord = {
  '0': 'zero',
  '1': 'one',
  '2': 'two',
  '3': 'three',
  '4': 'four',
  '5': 'five',
  '6': 'six',
  '7': 'seven',
  '8': 'eight',
  '9': 'nine'
};

let isRunning = false;
let intervalId;

// 朗读单个数字的函数
function speakNumber(numStr) {
  return new Promise((resolve) => {
    const utterance = new SpeechSynthesisUtterance(numToWord[numStr]);
    utterance.lang = 'en-US'; // 设置英文朗读
    utterance.onend = resolve; // 朗读完成后触发resolve
    window.speechSynthesis.speak(utterance);
  });
}

// 批量朗读一组数字
async function speakNumberSequence(numSequence) {
  for (const num of numSequence) {
    await speakNumber(num);
  }
}

// 启动朗读循环
function startReading() {
  if (isRunning) return;
  isRunning = true;

  intervalId = setInterval(async () => {
    // 获取当前时间戳,转成字符串拆分数字
    const timestampStr = Date.now().toString();
    // 每次取时间戳的最后6位数字(避免太长,可按需调整)
    const numSequence = timestampStr.slice(-6).split('');
    // 等待当前序列朗读完成再继续
    await speakNumberSequence(numSequence);
  }, 1000); // 每秒触发一次,可调整间隔
}

// 绑定按钮事件
document.getElementById('startBtn').addEventListener('click', startReading);
</script>

关键细节说明

  • 用户交互要求:浏览器出于安全和体验考虑,禁止自动播放TTS,必须通过用户点击、触摸等交互触发朗读,所以必须添加启动按钮。
  • 朗读队列控制:用async/await确保数字逐个朗读,不会出现重叠发音的情况。
  • 无限序列生成:时间戳是永远递增的,所以每次生成的数字序列都不会重复,天然实现“无限”的效果。如果想要更规整的递增数字(比如1、2、3...10、11...),也可以用一个全局计数器,每次触发时递增,结合时间戳避免页面刷新后重置。

可选优化方向

  • 自定义朗读间隔:调整setInterval的时间,或者在朗读完成后立即触发下一组,让节奏更连贯。
  • 支持中文朗读:修改numToWord的映射为中文词汇,同时把utterance.lang改成zh-CN。
  • 暂停/停止功能:添加停止按钮,清除intervalId并调用speechSynthesis.cancel()终止当前朗读。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 13:10:28