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

单页多案例模块时getElementById控制Vimeo视频失效如何解决

修改方案

第一步:修正HTML重复ID问题

首先把重复的ID替换为class,符合HTML规范:

<div class="caseStudy">
  <button class="playButton"></button>
  <div class="caseStudy_poster"></div>
  
  <iframe class="caseStudy_video" src="<vimeo-url-here>" width="100%" height="100%" frameborder="0" allow="autoplay; fullscreen; picture-in-picture" webkitallowfullscreen mozallowfullscreen allowfullscreen>
  </iframe>
</div>

第二步:替换JavaScript代码

// 获取所有案例研究模块
const caseStudyModules = document.querySelectorAll('.caseStudy');

// 逐个初始化每个模块的播放逻辑
caseStudyModules.forEach(module => {
  // 只在当前模块内查询对应的元素,避免和其他模块混淆
  const poster = module.querySelector('.caseStudy_poster');
  const button = module.querySelector('.playButton');
  const iframe = module.querySelector('.caseStudy_video');
  const player = new Vimeo.Player(iframe); // 提前初始化播放器,不用每次点击都新建

  // 绑定点击事件
  [poster, button].forEach(el => {
    el.addEventListener('click', () => {
      // 隐藏当前模块的封面和按钮
      poster.style.visibility = 'hidden';
      button.style.visibility = 'hidden';
      // 播放当前模块的视频
      player.play();
    })
  })

  // 监听当前视频的播放结束事件
  player.on('ended', () => {
    // 恢复当前模块的封面和按钮显示
    poster.style.visibility = 'visible';
    button.style.visibility = 'visible';
  })
})

核心修改逻辑说明

  • 不再全局查询元素,改为每个caseStudy模块内部查询子元素,从根源上避免多个模块之间的元素混淆
  • 提前初始化每个模块的Vimeo播放器实例,不用每次点击都重复创建,性能更好
  • 每个模块的事件绑定独立,播放、结束逻辑互不影响

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 19:24:04