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

如何在视频特定时间展示Snackbar?JS代码调试求助

解决视频特定时间触发Snackbar的问题

嘿,我来帮你排查下代码没生效的原因,主要有几个关键问题,咱们一步步修正:

问题1:用了赋值操作而非比较操作

你代码里的if(vidTime = 11.725395)是赋值语句(把11.725395赋值给vidTime),不是判断相等的逻辑。应该用严格相等运算符===,而且考虑到视频播放时currentTime的浮点数精度问题,直接判断绝对相等很容易错过,建议用范围判断:

// 比如判断当前时间在11.7到11.8秒之间
if(vidTime >= 11.7 && vidTime <= 11.8)

问题2:代码只执行了一次,没有实时监听时间变化

你现在的代码在页面加载时就执行了if判断,这时候视频还没开始播放,currentTime是0,自然不会触发Snackbar。需要给视频绑定timeupdate事件,每次视频时间更新时都检查当前时间:

问题3:(可选)避免重复触发Snackbar

如果不做限制,视频时间在目标区间内的每一次timeupdate都会触发Snackbar,可能导致多次弹出。可以加个变量标记是否已经显示过。

修正后的完整代码

// 获取视频元素
var vid = document.getElementById("myVideo");
// 标记是否已经显示过Snackbar
var hasShownSnackbar = false;

// 监听视频时间更新事件
vid.addEventListener('timeupdate', function() {
  var vidTime = vid.currentTime;
  // 判断时间范围,且未显示过Snackbar
  if(vidTime >= 11.7 && vidTime <= 11.8 && !hasShownSnackbar) {
    var x = document.getElementById("snackbar");
    x.className = "show";
    // 标记已显示,避免重复触发
    hasShownSnackbar = true;
    // 3秒后隐藏
    setTimeout(function(){
      x.className = x.className.replace("show", "");
    }, 3000);
  }
});

// 可选:测试用的获取当前时间函数
function getCurTime() {
  alert(vid.currentTime);
}

额外提示

  • 如果你需要在视频重新播放时再次触发Snackbar,可以监听视频的ended事件,重置hasShownSnackbar为false。
  • 调整时间范围的上下限可以适配不同的精度需求,不用卡死那一个精确的浮点数。

内容的提问来源于stack exchange,提问作者Carlos Miguel Salamat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:23:51