videoタグの動画が再生できなかった時(または再生されるまでの間)、poster画像が表示されます。
ある日、autoplayの箇所で「再生アイコン」を非表示にしたいと来ました。もちろん自動再生箇所なので再生アイコンは必要なく、配置もしていません。
「自動再生されてますよ。」というと、「低電力モードにした時です。」と言うのです。
え?なんで省電力モードに。
poster画像を確認するのに省電力モードにしているのでしょう。
【調査】Safariだけにある現象かもしれない
検索したところ、どうしても出力されてしまうようです。
参考:iOS11の「低電力モード」で、HTML5 videoのautoplayが動作しない
https://qiita.com/gecko655/items/a25f25ce9e30d64f3dde
再生をするかどうか「選択をさせるモード」に切り替わるようです。
videoタグのposterのど真ん中に再生ボタンを表示させるというもの。
cssとかで非表示にできないのか
cssで-webkit-media-controls: none !important;を試す。
<video>にcontrols=”false”付けて試す。とかしてみましたが、controls=”false”付けると、再生マークから変わって一時停止アイコンが表示される始末です。
何をやってもダメでイライラ。
AIの返答はvideoの仕様は清くあきらめるに1票でした。
【葛藤】どうでもいい自分の気持ち
葛藤が生まれました。
Safariだけとはいえ仕様ですし、こんなアイコン1つを非表示にすることに時間を割いていいのかと。しかし。。
画像のど真ん中にある再生マークは、ブランドの価値を下げる恐れもあります。
メインビジュアルのような部分ですからね。
疑問も浮かびます。はたしてブランド物を買うような人達に、スマホを省電力モードにするような人はいるのでしょうか。
そしてブランド物なんて買えないレベルにある自分に、悲壮感のような気持ちも芽生えます。1人でよかった。
あなたはユニクロでいいんじゃないですかw
【共有】回避ソースコード
別立てで画像を用意して差し替えるいう内容になります。
consoleログ付き。
要件は以下です。
- videoタグのposter画像と、別立ての画像、両方を準備
- Safari検出(Safari以外では処理をスキップ)
- autoplay試行(成功/失敗で分岐)
- 自動切り替え(低電力モード検出時は即座に静止画表示)
<video data-poster-pc="sample_pc.jpg" poster="sample_sp.jpg" muted="" playsinline="" loop="loop" class="js-about-video" autoplay>
<source media="(max-width: 767px)" src="sample_sp.mp4" type="video/mp4">
<source media="(min-width: 768px)" src="sample_pc.mp4" type="video/mp4"></source>
</video>
<!-- 低電力モード時の代替画像 -->
<div class="low-power-fallback" style="display: none;">
<picture>
<source media="(max-width: 767px)" srcset="sample_sp.jpg">
<img src="sample_pc.jpg" alt="" style="width: 100%; height: 100%; object-fit: cover;">
</picture>
</div>
<script>
document.addEventListener('DOMContentLoaded', function() {
// Safari低電力モード検出とフォールバック処理
function detectLowPowerMode() {
const video = document.querySelector('.js-about-video');
const fallback = document.querySelector('.low-power-fallback');
if (!video || !fallback) return;
// Safari検出
const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);
if (!isSafari) return; // Safari以外では処理しない
// autoplay試行による低電力モード検出
let lowPowerDetected = false;
// 1. autoplay Promise ベースの検出
const playPromise = video.play();
if (playPromise !== undefined) {
playPromise.then(() => {
// autoplay成功 - 通常モード
console.log('Safari autoplay成功 - 通常モード');
video.style.display = 'block';
fallback.style.display = 'none';
}).catch(error => {
// autoplay失敗 - 低電力モードの可能性
console.log('Safari autoplay失敗 - 低電力モード検出:', error);
showFallbackImage();
});
}
// 2. 再生状態監視による検出
let playCheckTimeout = setTimeout(() => {
if (video.paused && video.currentTime === 0) {
console.log('Safari 再生開始されず - 低電力モード検出');
showFallbackImage();
}
}, 1000);
// 3. 再生開始イベント監視
video.addEventListener('playing', () => {
clearTimeout(playCheckTimeout);
video.style.display = 'block';
fallback.style.display = 'none';
console.log('Safari 動画再生開始 - 通常モード');
});
// 4. エラーイベント監視
video.addEventListener('error', () => {
console.log('Safari 動画エラー - フォールバック表示');
showFallbackImage();
});
function showFallbackImage() {
if (!lowPowerDetected) {
lowPowerDetected = true;
video.style.display = 'none';
fallback.style.display = 'block';
console.log('Safari 低電力モード対応: 静止画像を表示');
// body にクラスを追加してCSS制御も可能
document.body.classList.add('safari-low-power-mode');
}
}
}
// 検出実行
detectLowPowerMode();
});
</script>
</div>以上になります。
iosがいつまでこの仕様なのかわかりませんし、探せば方法は色々とあるとは思いますが。
参考程度にどうぞ。
星間旅路のメロディ
「宇宙の静けさに包まれながら、漂流する過去の音楽を捜し求め、銀河の奥底でその旋律に耳を傾ける。」
「この電波はどこの星からきたのだろうか。」
どこかで聞いたことがあるような。



