Update index.html
Browse files- index.html +35 -47
index.html
CHANGED
@@ -1407,32 +1407,29 @@ function checkSync() {
|
|
1407 |
let isCheckingSync = false;
|
1408 |
let isInBackgroundTab = false;
|
1409 |
|
1410 |
-
// visibilitychange イベントリスナーの修正
|
1411 |
document.addEventListener('visibilitychange', async () => {
|
1412 |
if (document.hidden) {
|
1413 |
// タブが非表示になった場合
|
1414 |
isInBackgroundTab = true;
|
1415 |
-
stopSyncCheck();
|
1416 |
-
|
1417 |
-
// 現在の再生状態と時間を保存
|
1418 |
-
const wasPlaying = isPlaying;
|
1419 |
-
const savedTime = video.currentTime;
|
1420 |
-
|
1421 |
-
// メディアを一時停止
|
1422 |
-
pauseMedia();
|
1423 |
|
1424 |
-
//
|
1425 |
-
|
1426 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
1427 |
|
1428 |
try {
|
1429 |
// PiP表示を試みる
|
1430 |
-
if (
|
1431 |
await enterPiP();
|
1432 |
if (document.pictureInPictureElement) {
|
1433 |
isInBackgroundTab = false;
|
1434 |
startSyncCheck();
|
1435 |
-
|
1436 |
}
|
1437 |
}
|
1438 |
} catch (e) {
|
@@ -1449,22 +1446,15 @@ document.addEventListener('visibilitychange', async () => {
|
|
1449 |
console.warn('PiP終了失敗:', e);
|
1450 |
}
|
1451 |
|
1452 |
-
//
|
1453 |
-
|
1454 |
-
|
1455 |
-
|
1456 |
-
|
1457 |
-
|
1458 |
-
video.currentTime = savedTime;
|
1459 |
-
if (combinedAudioElement) {
|
1460 |
-
combinedAudioElement.currentTime = savedTime;
|
1461 |
-
}
|
1462 |
-
|
1463 |
-
// 再生を再開
|
1464 |
-
playMedia();
|
1465 |
}
|
1466 |
|
1467 |
-
//
|
1468 |
if (isPlaying) {
|
1469 |
checkSync();
|
1470 |
startSyncCheck();
|
@@ -1472,6 +1462,7 @@ document.addEventListener('visibilitychange', async () => {
|
|
1472 |
}
|
1473 |
});
|
1474 |
|
|
|
1475 |
// 動画終了時に自動的にPiPを閉じる(次回再開のため)
|
1476 |
video.addEventListener('ended', exitPiP);
|
1477 |
// 合成後に音量と再生速度を適用
|
@@ -1709,7 +1700,6 @@ function playMedia() {
|
|
1709 |
const startTime = parseFloat(startTimeInput.value) || 0;
|
1710 |
const endTime = parseFloat(endTimeInput.value) || duration;
|
1711 |
|
1712 |
-
// 現在の時間が終了時間を超えている場合は開始時間に戻す
|
1713 |
if (video.currentTime >= endTime) {
|
1714 |
video.currentTime = startTime;
|
1715 |
}
|
@@ -1721,9 +1711,10 @@ function playMedia() {
|
|
1721 |
isPlaying = true;
|
1722 |
playPauseBtn.textContent = '⏸';
|
1723 |
|
1724 |
-
//
|
1725 |
if (isAudioCombined) {
|
1726 |
-
|
|
|
1727 |
}
|
1728 |
|
1729 |
startSyncCheck();
|
@@ -1731,34 +1722,31 @@ function playMedia() {
|
|
1731 |
video.playbackRate = currentPlaybackRate;
|
1732 |
}).catch(error => {
|
1733 |
console.error('動画再生エラー:', error);
|
1734 |
-
// 再生に失敗した場合は一時停止状態に設定
|
1735 |
isPlaying = false;
|
1736 |
playPauseBtn.textContent = '▶';
|
1737 |
});
|
1738 |
}
|
1739 |
} catch (error) {
|
1740 |
console.error('メディア再生エラー:', error);
|
1741 |
-
// エラーが発生した場合は一時停止状態に設定
|
1742 |
isPlaying = false;
|
1743 |
playPauseBtn.textContent = '▶';
|
1744 |
}
|
1745 |
}
|
1746 |
-
|
1747 |
-
|
1748 |
-
|
1749 |
-
|
1750 |
-
|
1751 |
-
|
1752 |
-
|
1753 |
-
|
1754 |
-
|
1755 |
-
|
1756 |
-
combinedAudioElement.pause();
|
1757 |
-
}
|
1758 |
-
} catch (error) {
|
1759 |
-
console.error('メディア一時停止エラー:', error);
|
1760 |
}
|
|
|
|
|
1761 |
}
|
|
|
1762 |
|
1763 |
// 時間更新時の処理
|
1764 |
video.addEventListener('timeupdate', function() {
|
|
|
1407 |
let isCheckingSync = false;
|
1408 |
let isInBackgroundTab = false;
|
1409 |
|
|
|
1410 |
document.addEventListener('visibilitychange', async () => {
|
1411 |
if (document.hidden) {
|
1412 |
// タブが非表示になった場合
|
1413 |
isInBackgroundTab = true;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1414 |
|
1415 |
+
// 動画のみ一時停止(音声は再生を続ける)
|
1416 |
+
if (isPlaying) {
|
1417 |
+
video.pause();
|
1418 |
+
|
1419 |
+
// 音声は再生を続ける
|
1420 |
+
if (combinedAudioElement && !combinedAudioElement.paused) {
|
1421 |
+
// 何もしない(再生を継続)
|
1422 |
+
}
|
1423 |
+
}
|
1424 |
|
1425 |
try {
|
1426 |
// PiP表示を試みる
|
1427 |
+
if (isPlaying) {
|
1428 |
await enterPiP();
|
1429 |
if (document.pictureInPictureElement) {
|
1430 |
isInBackgroundTab = false;
|
1431 |
startSyncCheck();
|
1432 |
+
video.play().catch(e => console.error('PiP再生エラー:', e));
|
1433 |
}
|
1434 |
}
|
1435 |
} catch (e) {
|
|
|
1446 |
console.warn('PiP終了失敗:', e);
|
1447 |
}
|
1448 |
|
1449 |
+
// 音声が再生中の場合、動画を音声に同期
|
1450 |
+
if (combinedAudioElement && !combinedAudioElement.paused) {
|
1451 |
+
video.currentTime = combinedAudioElement.currentTime;
|
1452 |
+
video.play().catch(e => console.error('動画再生エラー:', e));
|
1453 |
+
isPlaying = true;
|
1454 |
+
playPauseBtn.textContent = '⏸';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1455 |
}
|
1456 |
|
1457 |
+
// 同期チェックを再開
|
1458 |
if (isPlaying) {
|
1459 |
checkSync();
|
1460 |
startSyncCheck();
|
|
|
1462 |
}
|
1463 |
});
|
1464 |
|
1465 |
+
|
1466 |
// 動画終了時に自動的にPiPを閉じる(次回再開のため)
|
1467 |
video.addEventListener('ended', exitPiP);
|
1468 |
// 合成後に音量と再生速度を適用
|
|
|
1700 |
const startTime = parseFloat(startTimeInput.value) || 0;
|
1701 |
const endTime = parseFloat(endTimeInput.value) || duration;
|
1702 |
|
|
|
1703 |
if (video.currentTime >= endTime) {
|
1704 |
video.currentTime = startTime;
|
1705 |
}
|
|
|
1711 |
isPlaying = true;
|
1712 |
playPauseBtn.textContent = '⏸';
|
1713 |
|
1714 |
+
// 音声を同期して再生
|
1715 |
if (isAudioCombined) {
|
1716 |
+
combinedAudioElement.currentTime = video.currentTime;
|
1717 |
+
combinedAudioElement.play().catch(e => console.error('音声再生エラー:', e));
|
1718 |
}
|
1719 |
|
1720 |
startSyncCheck();
|
|
|
1722 |
video.playbackRate = currentPlaybackRate;
|
1723 |
}).catch(error => {
|
1724 |
console.error('動画再生エラー:', error);
|
|
|
1725 |
isPlaying = false;
|
1726 |
playPauseBtn.textContent = '▶';
|
1727 |
});
|
1728 |
}
|
1729 |
} catch (error) {
|
1730 |
console.error('メディア再生エラー:', error);
|
|
|
1731 |
isPlaying = false;
|
1732 |
playPauseBtn.textContent = '▶';
|
1733 |
}
|
1734 |
}
|
1735 |
+
|
1736 |
+
function pauseMedia() {
|
1737 |
+
try {
|
1738 |
+
video.pause();
|
1739 |
+
isPlaying = false;
|
1740 |
+
playPauseBtn.textContent = '▶';
|
1741 |
+
stopSyncCheck();
|
1742 |
+
|
1743 |
+
if (combinedAudioElement) {
|
1744 |
+
combinedAudioElement.pause();
|
|
|
|
|
|
|
|
|
1745 |
}
|
1746 |
+
} catch (error) {
|
1747 |
+
console.error('メディア一時停止エラー:', error);
|
1748 |
}
|
1749 |
+
}
|
1750 |
|
1751 |
// 時間更新時の処理
|
1752 |
video.addEventListener('timeupdate', function() {
|