Update index.html
Browse files- index.html +60 -18
index.html
CHANGED
@@ -1088,6 +1088,9 @@
|
|
1088 |
<button class="time-set-button" id="reset-end-time" disabled>動画の長さに戻す</button>
|
1089 |
</div>
|
1090 |
</div>
|
|
|
|
|
|
|
1091 |
<h2>設定</h2>
|
1092 |
<div class="setting-item">
|
1093 |
<label for="start-time">再生開始秒数:</label>
|
@@ -1278,6 +1281,7 @@
|
|
1278 |
const tempoInput = document.getElementById('tempo');
|
1279 |
const tempoSpeedValue = document.getElementById('tempo-speed-value');
|
1280 |
const videoControls = document.querySelector('.video-controls');
|
|
|
1281 |
|
1282 |
// 音声オブジェクトを作成
|
1283 |
const audioElements = {};
|
@@ -1373,7 +1377,42 @@
|
|
1373 |
syncAudioWithVideo();
|
1374 |
}
|
1375 |
}
|
1376 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1377 |
// 音声を動画に同期させる関数
|
1378 |
function syncAudioWithVideo() {
|
1379 |
if (!isAudioCombined || !isPlaying) return;
|
@@ -1684,6 +1723,7 @@
|
|
1684 |
setStartTimeBtn.disabled = false;
|
1685 |
setEndTimeBtn.disabled = false;
|
1686 |
playbackSpeedSlider.disabled = false;
|
|
|
1687 |
}
|
1688 |
|
1689 |
// プレビュー再生
|
@@ -1852,23 +1892,25 @@
|
|
1852 |
}
|
1853 |
|
1854 |
// 時間更新時の処理
|
1855 |
-
|
1856 |
-
|
1857 |
-
|
1858 |
-
|
1859 |
-
|
1860 |
-
|
1861 |
-
|
1862 |
-
|
1863 |
-
|
1864 |
-
|
1865 |
-
|
1866 |
-
|
1867 |
-
|
1868 |
-
|
1869 |
-
|
1870 |
-
|
1871 |
-
|
|
|
|
|
1872 |
|
1873 |
// プログレスバークリックでシーク
|
1874 |
progressContainer.addEventListener('click', function(e) {
|
|
|
1088 |
<button class="time-set-button" id="reset-end-time" disabled>動画の長さに戻す</button>
|
1089 |
</div>
|
1090 |
</div>
|
1091 |
+
<div class="setting-item">
|
1092 |
+
<button class="combine-button" id="apply-time-btn" disabled>時間設定を適用</button>
|
1093 |
+
</div>
|
1094 |
<h2>設定</h2>
|
1095 |
<div class="setting-item">
|
1096 |
<label for="start-time">再生開始秒数:</label>
|
|
|
1281 |
const tempoInput = document.getElementById('tempo');
|
1282 |
const tempoSpeedValue = document.getElementById('tempo-speed-value');
|
1283 |
const videoControls = document.querySelector('.video-controls');
|
1284 |
+
const applyTimeBtn = document.getElementById('apply-time-btn');
|
1285 |
|
1286 |
// 音声オブジェクトを作成
|
1287 |
const audioElements = {};
|
|
|
1377 |
syncAudioWithVideo();
|
1378 |
}
|
1379 |
}
|
1380 |
+
|
1381 |
+
applyTimeBtn.addEventListener('click', function() {
|
1382 |
+
// 現在再生中なら一時停止
|
1383 |
+
const wasPlaying = isPlaying;
|
1384 |
+
if (isPlaying) {
|
1385 |
+
pauseMedia();
|
1386 |
+
}
|
1387 |
+
|
1388 |
+
// 開始時間と終了時間を取得
|
1389 |
+
const startTime = parseFloat(startTimeInput.value) || 0;
|
1390 |
+
const endTime = parseFloat(endTimeInput.value) || video.duration;
|
1391 |
+
|
1392 |
+
// 現在位置が開始時間より前なら開始時間に移動
|
1393 |
+
if (video.currentTime < startTime) {
|
1394 |
+
video.currentTime = startTime;
|
1395 |
+
if (combinedAudioElement) {
|
1396 |
+
combinedAudioElement.currentTime = startTime;
|
1397 |
+
}
|
1398 |
+
}
|
1399 |
+
// 現在位置が終了時間より後なら開始時間に移動
|
1400 |
+
else if (video.currentTime > endTime) {
|
1401 |
+
video.currentTime = startTime;
|
1402 |
+
if (combinedAudioElement) {
|
1403 |
+
combinedAudioElement.currentTime = startTime;
|
1404 |
+
}
|
1405 |
+
}
|
1406 |
+
|
1407 |
+
// 再生中だった場合は再開
|
1408 |
+
if (wasPlaying) {
|
1409 |
+
playMedia();
|
1410 |
+
}
|
1411 |
+
|
1412 |
+
// マーカーを更新
|
1413 |
+
updateProgressMarkers();
|
1414 |
+
});
|
1415 |
+
|
1416 |
// 音声を動画に同期させる関数
|
1417 |
function syncAudioWithVideo() {
|
1418 |
if (!isAudioCombined || !isPlaying) return;
|
|
|
1723 |
setStartTimeBtn.disabled = false;
|
1724 |
setEndTimeBtn.disabled = false;
|
1725 |
playbackSpeedSlider.disabled = false;
|
1726 |
+
applyTimeBtn.disabled = false;
|
1727 |
}
|
1728 |
|
1729 |
// プレビュー再生
|
|
|
1892 |
}
|
1893 |
|
1894 |
// 時間更新時の処理
|
1895 |
+
video.addEventListener('timeupdate', function() {
|
1896 |
+
const duration = video.duration || videoDuration;
|
1897 |
+
const endTime = parseFloat(endTimeInput.value) || duration;
|
1898 |
+
|
1899 |
+
if (video.currentTime >= endTime && endTime > 0) {
|
1900 |
+
if (loopCheckbox.checked) {
|
1901 |
+
const startTime = parseFloat(startTimeInput.value) || 0;
|
1902 |
+
video.currentTime = startTime;
|
1903 |
+
if (combinedAudioElement) {
|
1904 |
+
combinedAudioElement.currentTime = startTime;
|
1905 |
+
}
|
1906 |
+
} else {
|
1907 |
+
pauseMedia();
|
1908 |
+
video.currentTime = endTime;
|
1909 |
+
}
|
1910 |
+
}
|
1911 |
+
|
1912 |
+
updateTimeDisplay();
|
1913 |
+
});
|
1914 |
|
1915 |
// プログレスバークリックでシーク
|
1916 |
progressContainer.addEventListener('click', function(e) {
|