自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

滾動視頻新玩法,打造獨特的滾動視頻體驗

開發(fā) 前端
對于網(wǎng)頁而言,圖片與視頻是視覺吸引的關鍵要素,然而,僅僅依靠手動控制的靜態(tài)圖像和視頻可能會變得單調。本文打破了常規(guī)思維,探討了如何將視頻與頁面滾動完美集成。

前言

對于網(wǎng)頁而言,圖片與視頻是視覺吸引的關鍵要素,然而,僅僅依靠手動控制的靜態(tài)圖像和視頻可能會變得單調。本文打破了常規(guī)思維,探討了如何將視頻與頁面滾動完美集成。

video API

在這之前,我們需要先來了解視頻的相關屬性及方法。

簡單使用

以下是使用 HTML 元素展示視頻的簡單方法

<video controls>
  <source src="video.mp4" type="video/mp4" />
  <source src="video.webm" type="video/webm" />
</video>

這里最重要的屬性是controls, 該屬性允許用戶播放/暫停和控制其他視頻元素。如果刪除此選項,用戶將無法手動控制視頻。該<video>元素可以包含多個<source>元素,以便可以根據(jù)查看站點的瀏覽器加載不同的格式。

視頻屬性

  • 視頻持續(xù)時間:這將返回視頻的總持續(xù)時間(以秒為單位)。
const videoDuration = video.duration;
  • 控制自動播放:加載后,可以獲取或設置視頻是否應自動開始播放。
const AutoplayEnabled = video.autoplay;  // 獲取
video.autoplay = true;  // 設置
  • 獲取和設置音量:獲取當前音量并設置它(從 0.0 到 1.0)。
const currentVolume = video.volume;
video.volume = 0.75;
  • 當前時間:通過操作屬性跳轉到視頻中的特定點currentTime。
video.currentTime = 30;   // 將視頻跳轉到30s的位置

該currentTime是本文滾動效果的關鍵屬性,因為它可以鏈接到滾動值等屬性。

視頻方法

  • 播放和暫停:使用這些功能,可以播放和暫停視頻。例如,這些功能可以鏈接到自定義按鈕。
video.play(); 
video.pause();
  • 加載:可以使用此方法重新加載視頻。
video.load();
  • 操縱控件:還可以通過 JavaScript 操縱控件屬性。
video.removeAttribute("controls");

視頻事件監(jiān)聽器

  • timeupdate:當前播放位置改變時觸發(fā)。
  • ended:視頻結束時觸發(fā)。
  • loadedmetadata:加載元數(shù)據(jù)(例如持續(xù)時間或音量)時觸發(fā)。
  • progress:當瀏覽器加載視頻數(shù)據(jù)時觸發(fā)。

了解完以上視頻相關API,我們就可以來實現(xiàn)各種視頻相關效果

視頻可見時自動播放

比如網(wǎng)站上有一個視頻想要自動播放,但需要滾動到該視頻。如果我們能夠檢測到它何時進入用戶的視圖,我們就可以直接啟動它,而不是在它不可見時播放它。

const video = document.querySelector('video');
const observer = new IntersectionObserver((entries) => {
  entries.forEach(entry => {
    if (entry.isIntersecting) {
      video.play();
    } else {
      video.pause();
    }
  })
}, {
  threshold: 0.5
});
observer.observe(video);

圖片圖片

使用滾動值播放視頻

這里才是本文的重點,當用戶滾動時播放視頻。這將向前和向后進行播放。這種效果很常見,可以產(chǎn)生 3D 模態(tài)在滾動上移動的錯覺。

計算滾動條

為了實現(xiàn)滾動效果,我們需要創(chuàng)建一個反映視頻長度的滾動條,這里我們可以使用上面提到的APIloadedmetadata來實現(xiàn)

const video = document.querySelector('video');
const container = document.querySelector('.container');
const speed = 250 // 播放速度
video.addEventListener('loadedmetadata', () => {
  container.style.height = video.duration * speed + 'px';
})

計算滾動位置換算視頻進度

const scrollY = window.scrollY;

const height = document.documentElement.scrollHeight - window.innerHeight;
const percentage = (scrollY / height);

使視頻播放與滾動進度同步

使用計算出的百分比來設置currentTime視頻的播放時間

video.currentTime = video.duration * percentage;

平滑效果

使用requestAnimationFrame功能來增強滾動過程中視頻播放的平滑度。

const playVideo = () => {

  const scrollY = window.scrollY;

  const height = document.documentElement.scrollHeight - window.innerHeight;
  const percentage = (scrollY / height);

  video.currentTime = video.duration * percentage;
  window.requestAnimationFrame(playVideo);
};

圖片 圖片

責任編輯:武曉燕 來源: 前端南玖
相關推薦

2022-08-16 08:37:09

視頻插幀深度學習

2021-01-21 14:50:01

微信紅包移動應用

2015-11-23 17:44:08

微軟Azure亦非云

2011-09-02 10:14:10

JQuery滾動Xslider

2022-01-24 17:40:04

微信語音移動應用

2021-01-12 10:16:42

CSS 容器優(yōu)化滾動

2010-12-15 17:44:59

思科虛擬化視頻

2011-08-15 10:37:21

視頻極速流量

2011-02-16 11:18:15

思科無線網(wǎng)絡視頻

2013-03-30 22:27:59

2013-03-25 13:56:22

Windows Blu

2024-07-18 19:30:58

2013-02-21 16:06:50

Ubuntu上手體驗平板

2024-11-21 20:57:01

2023-11-22 07:47:34

2013-04-02 13:04:07

ListView平滑滾

2011-09-02 10:03:40

jQuery滾動圖片

2024-01-22 09:28:23

CSS前端滾動驅動
點贊
收藏

51CTO技術棧公眾號