點擊上方的語言選單以切換語言
這個問題的本質不在於「影片」,而在於: DOM 元素是否真的被移除(銷毀)。
在原生寫法中,切換分類時常見的做法是:
display: nonevisibility例如:
<video id="videoA" src="a.mp4" autoplay></video>
<script>
// 只是把影片藏起來
document.getElementById('videoA').style.display = 'none';
</script>
<video> 仍然存在於 DOM 中,
所以瀏覽器會繼續播放影片。
在原生 JS 中,瀏覽器不會幫你推論:
除非你明確寫:
video.pause();
video.currentTime = 0;
video.remove();
否則影片會照播。
Vue 會根據狀態決定: 這個 DOM 應不應該存在。
<video
v-if="currentCategory === 'A'"
src="a.mp4"
autoplay
/>
當 currentCategory 改變時:
<video> 會被 unmountpause()
| 方式 | 實際行為 |
|---|---|
| 原生 JS(常見) | 只是把影片藏起來 |
| Vue + v-if | 直接把影片從 DOM 刪掉 |
<video
v-show="currentCategory === 'A'"
src="a.mp4"
autoplay
/>
v-show 的本質是:
display: none;
👉 元素仍存在,影片仍會播放。
document.querySelectorAll('video').forEach(video => {
video.pause();
video.currentTime = 0;
});
video.remove();
切換分類時:
<video>