當前位置:編程學習大全網 - 源碼破解 - 使用Vue.js2.0如何實現背景視頻登錄頁面

使用Vue.js2.0如何實現背景視頻登錄頁面

本文講述如何實現擁有酷炫背景視頻的登錄頁面,瀏覽器窗口隨意拉伸,背景視頻及前景登錄組件均能完美適配,背景視頻可始終鋪滿窗口,前景組件始終居中,視頻的內容始終得到最大限度的保留,可以得到最好的視覺效果

本文講述如何實現擁有酷炫背景視頻的登錄頁面,瀏覽器窗口隨意拉伸,背景視頻及前景登錄組件均能完美適配,背景視頻可始終鋪滿窗口,前景組件始終居中,視頻的內容始終得到最大限度的保留,可以得到最好的視覺效果。並且基於 Vue.js 2.0 全家桶。具體效果如下圖所示:

最終效果可以翻到文章最後觀看。

1. 背景視頻 Web 頁面的既有實現方式

國外有壹個很好的網站 「Coverr」 ,提供了完善的教程和視頻資源,幫助前端開發者構建酷炫的背景視頻主頁,網站效果示例如下圖所示:

教程如下所示:

從圖中以及我的實踐可以得出以下觀點:

該教程使用了 jQuery 。由於我們想要使用 Vue.js,則 jQuery 可被完全替代掉。

該教程的 CSS、JavaScript 代碼均過於冗余。

直接運行示例,發現效果並不好,瀏覽器窗口隨意拉伸時,背景視頻並不能完美適配「會出現黑邊等瑕疵」,效果未達到預期。

2. 設計完美的背景視頻 Web 頁面

首先基於腳手架工具 vue-cli 來創建壹個使用 vue-loader 的項目,構建完畢後,在相應目錄下創建「.vue」文件,作為登錄頁面的模板文件,具體細節不再贅述。本節內容僅局限於該.vue文件。

2.1 HTML 模板

基於需求,對 Coverr 提供的 HTML 模板進行了細微修改,結果如下:

<template>

<p class="homepage-hero-module">

<p class="video-container">

<p :style="fixStyle" class="filter"></p>

<video :style="fixStyle" autoplay loop class="fillWidth" v-on:canplay="canplay">

<source src="PATH_TO_MP4" type="video/mp4"/>

瀏覽器不支持 video 標簽,建議升級瀏覽器。

<source src="PATH_TO_WEBM" type="video/webm"/>

瀏覽器不支持 video 標簽,建議升級瀏覽器。

</video>

<p class="poster hidden" v-if="!vedioCanPlay">

<img :style="fixStyle" src="PATH_TO_JPEG" alt="">

</p>

</p>

</p>

</template>模板中, filter 類的 p 標簽是壹層背景視頻的蒙版,可以通過蒙版控制視頻的亮暗以及色溫等。

video 標簽為標準的 HTML5 標簽,提供兩種格式的視頻以及壹張圖片占位符,背景視頻在加載完畢後即自動播放。

Coverr 提供的原始模板,直接調試,頁面只顯示圖片,而無法播放視頻,通過使用 Vue.js 的 v-if 指令解決了該問題。

2.2 CSS

對原始模板 CSS 代碼進行了大幅精簡,修改後的 CSS 代碼如下所示:

<style scoped>

.homepage-hero-module,

.video-container {

position: relative;

height: 100vh;

overflow: hidden;

}

.video-container .poster img,

.video-container video {

z-index: 0;

position: absolute;

}

.video-container .filter {

z-index: 1;

position: absolute;

background: rgba(0, 0, 0, 0.4);

}

</style>由於大多數樣式均被項目全局修改了,所以在此專用於此模板的樣式只剩下三條,簡要說明如下:

容器 p 鋪滿瀏覽器窗口

蒙版 p 位於視頻的上方,以起到蒙版的作用。

2.3 JavaScript 代碼

<script>

export default {

name: 'login',

data() {

return {

vedioCanPlay: false,

fixStyle: ''

}

},

methods: {

canplay() {

this.vedioCanPlay = true

}

},

mounted: function() {

window.onresize = () => {

const windowWidth = document.body.clientWidth

const windowHeight = document.body.clientHeight

const windowAspectRatio = windowHeight / windowWidth

let videoWidth

let videoHeight

if (windowAspectRatio < 0.5625) {

videoWidth = windowWidth

videoHeight = videoWidth * 0.5625

this.fixStyle = {

height: windowWidth * 0.5625 + 'px',

width: windowWidth + 'px',

'margin-bottom': (windowHeight - videoHeight) / 2 + 'px',

'margin-left': 'initial'

}

} else {

videoHeight = windowHeight

videoWidth = videoHeight / 0.5625

this.fixStyle = {

height: windowHeight + 'px',

width: windowHeight / 0.5625 + 'px',

'margin-left': (windowWidth - videoWidth) / 2 + 'px',

'margin-bottom': 'initial'

}

}

}

window.onresize()

}

}

</script>以上代碼中最重要的部分是對 window 對象的 onresize 事件的監聽。當窗口大小更改時,程序同步修改 video 及蒙版 dom 的尺寸,使得視頻的最窄的邊始終撐滿瀏覽器的窗口,而長的邊左右兩邊被均勻地裁減。

這樣操作,可以使得視頻不會被拉伸,視頻中心始終位於瀏覽器的中心,並且在隨意拉伸瀏覽器窗口時,視頻的內容始終得到最大限度的保留,並且可以得到最好的視覺效果。

最終效果如下所示:

上面是我整理給大家的,希望今後會對大家有幫助。

相關文章:

在JS/jQuery中如何實現DIV延時幾秒後消失或顯示

在jQuery中如何實現定時隱藏對話框

使用原生js實現省市區三級聯動

  • 上一篇:多行不義必自斃的下壹句?
  • 下一篇:片的筆順和部首
  • copyright 2024編程學習大全網