首頁  >  文章  >  web前端  >  基於 Vue.js 2.0實作酷炫自適應背景影片登入頁面

基於 Vue.js 2.0實作酷炫自適應背景影片登入頁面

小云云
小云云原創
2018-01-18 09:03:071729瀏覽

本文講述如何實現擁有酷炫背景視頻的登錄頁面,瀏覽器窗口隨意拉伸,背景視頻及前景登錄組件均能完美適配,背景視頻可始終鋪滿窗口,前景組件始終居中,視頻的內容始終得到最大限度的保留,可以得到最好的視覺效果。並且基於 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 + &#39;px&#39;,
  width: windowWidth + &#39;px&#39;,
  &#39;margin-bottom&#39;: (windowHeight - videoHeight) / 2 + &#39;px&#39;,
  &#39;margin-left&#39;: &#39;initial&#39;
  }
 } else {
  videoHeight = windowHeight
  videoWidth = videoHeight / 0.5625
  this.fixStyle = {
  height: windowHeight + &#39;px&#39;,
  width: windowHeight / 0.5625 + &#39;px&#39;,
  &#39;margin-left&#39;: (windowWidth - videoWidth) / 2 + &#39;px&#39;,
  &#39;margin-bottom&#39;: &#39;initial&#39;
  }
 }
 }
 window.onresize()
 }
 }
</script>

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

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

最終效果如下所示:

 

相關建議:

微信小程式實作image元件圖片自適應寬度比例實例分享

實例詳解Javascript防止圖片拉伸的自適應處理

怎麼實作圖片大小自適應

以上是基於 Vue.js 2.0實作酷炫自適應背景影片登入頁面的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn