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) {
|