使用moment.js开发餐厅定时启停YouTube音乐网页遇逻辑失效问题求助
问题修复方案
首先梳理现有代码的核心问题,对应修复即可:
- 运算符使用错误:if判断逻辑中误用赋值运算符
=,没有使用比较运算符===做条件判断,导致逻辑直接改写变量值而非做匹配校验 - 时间未实时更新:定义的
timetime变量仅在页面加载时获取了一次初始时间,后续不会自动同步最新时间,判断逻辑永远用初始值做匹配 - 校验函数未触发:
checktime函数仅做了定义,没有在定时器的执行逻辑中被调用,校验逻辑永远不会运行 - 定时器未配置间隔:
setInterval没有传入第二个时间间隔参数,会导致逻辑无意义高频执行 - 缺少播放状态标记:没有记录当前播放状态,会导致到达开始时间后每秒重复给iframe赋值src,造成视频反复刷新无法正常播放
修复后可运行代码
JavaScript代码
var curtime = document.querySelector('#curtime') var starttime = "11:57" var stoptime = "11:58" var video = document.querySelector("#ytplayer") // 新增播放状态标记,避免重复操作 var isPlaying = false // 定时器设置每秒执行一次,同步时间+校验播放逻辑 setInterval(function(){ var currentTimeFull = moment().format("HH:mm:ss"); curtime.textContent = currentTimeFull; // 取当前时间的小时+分钟,和配置的时间格式统一 var currentTimeHM = moment().format("HH:mm"); checktime(currentTimeHM); }, 1000); function checktime (currentTimeHM){ // 到达开始时间且未播放时加载播放链接 if (currentTimeHM === starttime && !isPlaying){ video.src = 'https://www.youtube.com/embed/Dx5qFachd3A?autoplay=1' isPlaying = true } // 到达结束时间且正在播放时清空链接 if (currentTimeHM === stoptime && isPlaying){ video.src = '' isPlaying = false } }
HTML代码优化说明
现有HTML代码仅需删除head部分重复引入的moment.js即可,其余部分无需调整:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="./assets/CSS/style.css"> <title>Music</title> </head> <body> <header> <div class="time"> <span id="curtime"></span> </div> </header> <main> <section> <iframe id="ytplayer" type="text/html" width="720" height="405" src="" frameborder="0" allowfullscreen></iframe> </section> </main> </body> <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script> <script src="./assets/JS/main.js"></script> </html>
内容的提问来源于stack exchange,提问作者Faizan Ali
相关产品推荐
相关产品推荐

