video标签需直接写loop属性且配合muted才能循环;loop="true"等写法无效,仅或js设video.loop=true有效;非媒体元素如img不支持loop;ios需加playsinline且依赖用户交互。

loop 属性加对位置、配好 muted,视频就能循环——但写错值、漏静音、或指望它在 <img> 上生效,就完全没反应。
video 标签里直接写 loop 就行,别赋值
浏览器只认这个属性“有没有”,不认“等于什么”。loop="true"、loop="1"、loop="" 都是无效写法;只有 <video loop></video> 或 <video loop src="x.mp4"></video> 才触发循环。
- 动态 JS 设置也一样:必须用布尔值
video.loop = true,不是字符串"true" - 修改后无需调用
load()或play(),下一次播放到末尾时自动重播 - 检查是否生效可读
video.hasAttribute('loop')或video.loop(返回布尔值)
不加 muted,loop 很可能白写
现代浏览器(Chrome、Edge、Safari iOS/macOS)普遍阻止未静音的 autoplay,而 loop 依赖播放行为才能触发重播。如果视频没播起来,循环自然不会发生。
- 背景视频场景必须组合:
<video autoplay muted loop playsinline></video> -
playsinline是 iOS 必选项,否则视频会强制全屏,破坏页面布局 - 用户后续想开声音?得等手势交互(如点击按钮)后再执行
video.muted = false; video.play()
loop 在 <img>、<canvas></canvas>、<iframe></iframe> 上完全无效
这些元素根本不解析 loop 属性——浏览器连警告都不会抛,直接忽略。GIF 动画自带循环逻辑,<img src="x.gif" loop> 中的 loop 是多余且无意义的。
- 只有原生媒体元素支持:
<video></video>和<audio></audio> - 想让 Canvas 动画循环?得靠
requestAnimationFrame或定时器 - iframe 嵌入的视频能否循环,取决于内嵌页面自身逻辑,外层加
loop没用
loop 不触发事件,也不控制次数,要精细控制就得上 JS
loop 是纯播放行为开关,不发任何事件,也不提供“播 3 次就停”这类能力。遇到以下情况,必须切到 JS 方案:
- 需要监听循环开始/结束:监听
ended事件 + 手动currentTime = 0+play() - 限制播放次数:用计数器配合
ended,第 N 次后设loop = false - iOS Safari 对
loop支持不稳定(尤其非muted场景),ended+play()更可靠 - 视频结尾有黑帧或跳变?手动
currentTime可微调起始点,比如设为0.05跳过首帧瑕疵
真正容易被忽略的是:loop 的生效前提是视频已成功进入播放状态;而这个前提,在移动端和自动播放策略收紧的今天,几乎总是依赖 muted 和用户交互时机。不验证 video.readyState 和 video.paused,光写 loop 就像锁门不关窗。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











