基于 Vue.js 2.0 酷炫自適應(yīng)背景視頻登錄頁面的設(shè)計

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

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

背景視頻登錄頁面

1. 背景視頻 Web 頁面的既有實現(xiàn)方式

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

Coverr 網(wǎng)站效果展示

教程如下所示:

Coverr 提供的簡易教程

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

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

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

  • 直接運行示例,發(fā)現(xiàn)效果并不好,瀏覽器窗口隨意拉伸時,背景視頻并不能完美適配「會出現(xiàn)黑邊等瑕疵」,效果未達到預(yù)期。

2. 設(shè)計完美的背景視頻 Web 頁面

首先基于腳手架工具 vue-cli 來創(chuàng)建一個使用 vue-loader 的項目,構(gòu)建完畢后,在相應(yīng)目錄下創(chuàng)建「.vue」文件,作為登錄頁面的模板文件,具體細節(jié)不再贅述。本節(jié)內(nèi)容僅局限于該.vue文件。

2.1 HTML 模板

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

<template>
  <div class="homepage-hero-module">
    <div class="video-container">
      <div :style="fixStyle" class="filter"></div>
      <video :style="fixStyle" autoplay loop class="fillWidth" v-on:canplay="canplay">
        <source src="PATH_TO_MP4" type="video/mp4"/>
        瀏覽器不支持 video 標(biāo)簽,建議升級瀏覽器。
        <source src="PATH_TO_WEBM" type="video/webm"/>
        瀏覽器不支持 video 標(biāo)簽,建議升級瀏覽器。
      </video>
      <div class="poster hidden" v-if="!vedioCanPlay">
        <img :style="fixStyle" src="PATH_TO_JPEG" alt="">
      </div>
    </div>
  </div>
</template>

模板中,filter 類的 div 標(biāo)簽是一層背景視頻的蒙版,可以通過蒙版控制視頻的亮暗以及色溫等。

video 標(biāo)簽為標(biāo)準(zhǔn)的 HTML5 標(biāo)簽,提供兩種格式的視頻以及一張圖片占位符,背景視頻在加載完畢后即自動播放。

Coverr 提供的原始模板,直接調(diào)試,頁面只顯示圖片,而無法播放視頻,通過使用 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>

由于大多數(shù)樣式均被項目全局修改了,所以在此專用于此模板的樣式只剩下三條,簡要說明如下:

  • 容器 div 鋪滿瀏覽器窗口
  • 蒙版 div 位于視頻的上方,以起到蒙版的作用。

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 事件的監(jiān)聽。當(dāng)窗口大小更改時,程序同步修改 video 及蒙版 dom 的尺寸,使得視頻的最窄的邊始終撐滿瀏覽器的窗口,而長的邊左右兩邊被均勻地裁減。

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

最終效果如下所示:


自適應(yīng) web 頁面背景視頻

參考資料

  1. 資源網(wǎng)站「Coverr」
  2. Vue.js 中文官網(wǎng)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,323評論 25 708
  • 目錄 UI組件 開發(fā)框架 實用庫 服務(wù)端 輔助工具 應(yīng)用實例 Demo示例 UI組件 element★13489 ...
    余生社會閱讀 20,513評論 7 233
  • GPUImage接入 下載GPUImage 地址 : https://github.com/BradLarson/...
    夜空丶閱讀 3,846評論 1 1
  • 很多時候都在想,自己到底是一個什么樣的人,從小就愿意待在自己的世界里,不愿湊熱鬧,不愿趕著大家都喜歡的事情,所謂內(nèi)...
    彼哉彼哉閱讀 279評論 0 0
  • 我和男朋友都是心里藏不住事的人。每次過節(jié)日他給我從網(wǎng)上買了禮物,本來想節(jié)日時給我個驚喜,可是還沒等禮物到來,他就在...
    瀟瀟雨下閱讀 582評論 0 0

友情鏈接更多精彩內(nèi)容