soiz1 commited on
Commit
1846b2d
·
verified ·
1 Parent(s): 6f9b6b5

Update index.html

Browse files
Files changed (1) hide show
  1. index.html +80 -5
index.html CHANGED
@@ -977,7 +977,58 @@ function updateVolume(value) {
977
  }
978
  }
979
 
980
- // 動画変更処理
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
981
  function handleVideoChange() {
982
  const selected = videoSelect.value;
983
 
@@ -990,12 +1041,36 @@ function handleVideoChange() {
990
  }
991
 
992
  video.src = selected;
993
- previewVideo.src = selected;
994
- video.load();
995
- previewVideo.load();
996
- video.play().catch(e => console.log(e));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
997
  }
998
 
 
 
999
  // 再生/一時停止を切り替え
1000
  function togglePlayPause() {
1001
  if (video.paused) {
 
977
  }
978
  }
979
 
980
+
981
+ // プレビュー用動画のソースをメイン動画と同期
982
+ previewVideo.src = video.src;
983
+
984
+ // ホバー時のプレビュー更新関数(メイン動画を操作しない)
985
+ function updateHoverPreview(e) {
986
+ if (!video.duration) return;
987
+
988
+ const rect = progressContainer.getBoundingClientRect();
989
+ const pos = Math.min(Math.max((e.clientX - rect.left) / rect.width, 0), 1);
990
+ const time = pos * video.duration;
991
+
992
+ // 時間表示更新
993
+ const minutes = Math.floor(time / 60);
994
+ const seconds = Math.floor(time % 60).toString().padStart(2, '0');
995
+ hoverTime.textContent = `${minutes}:${seconds}`;
996
+ hoverTime.style.display = 'block';
997
+ hoverTime.style.left = `${e.clientX - rect.left}px`;
998
+
999
+ // プレビュー動画のみを更新(メイン動画は変更しない)
1000
+ if (previewVideo.readyState > 0) {
1001
+ previewVideo.currentTime = time;
1002
+ }
1003
+
1004
+ // プレビュー動画の位置調整
1005
+ previewVideo.style.display = "block";
1006
+ previewVideo.style.left = `${e.clientX}px`;
1007
+ }
1008
+
1009
+ // ホバーイベントリスナーの設定
1010
+ function setupHoverEvents() {
1011
+ const hoverTime = document.createElement('div');
1012
+ hoverTime.className = 'hover-time';
1013
+ progressContainer.appendChild(hoverTime);
1014
+
1015
+ let hoverTimeout;
1016
+
1017
+ progressContainer.addEventListener("mousemove", (e) => {
1018
+ clearTimeout(hoverTimeout);
1019
+ hoverTimeout = setTimeout(() => {
1020
+ updateHoverPreview(e);
1021
+ }, 30); // 30msのデバウンス
1022
+ });
1023
+
1024
+ progressContainer.addEventListener("mouseleave", () => {
1025
+ hoverTime.style.display = "none";
1026
+ previewVideo.style.display = "none";
1027
+ clearTimeout(hoverTimeout);
1028
+ });
1029
+ }
1030
+
1031
+ // 動画変更時の処理(プレビュー動画も同期)
1032
  function handleVideoChange() {
1033
  const selected = videoSelect.value;
1034
 
 
1041
  }
1042
 
1043
  video.src = selected;
1044
+ previewVideo.src = selected; // プレビュー動画も更新
1045
+
1046
+ // 両方の動画をロード
1047
+ const loadVideo = video.load();
1048
+ const loadPreview = previewVideo.load();
1049
+
1050
+ Promise.all([loadVideo, loadPreview])
1051
+ .then(() => video.play())
1052
+ .catch(e => console.error("動画読み込みエラー:", e));
1053
+ }
1054
+
1055
+ // 初期化関数
1056
+ function init() {
1057
+ setupHoverEvents();
1058
+
1059
+ // プレビュー動画のメタデータが読み込まれたら準備完了
1060
+ previewVideo.addEventListener('loadedmetadata', () => {
1061
+ console.log("プレビュー動画の準備が完了しました");
1062
+ });
1063
+
1064
+ // メイン動画のイベントリスナー設定
1065
+ video.addEventListener('loadedmetadata', () => {
1066
+ previewVideo.src = video.src; // ソースを再度同期
1067
+ updatePlaybackRate(speedRange.value);
1068
+ updateVolume(volumeRange.value);
1069
+ });
1070
  }
1071
 
1072
+ // 初期化を実行
1073
+ init();
1074
  // 再生/一時停止を切り替え
1075
  function togglePlayPause() {
1076
  if (video.paused) {