欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于 Vue.js 2.0 酷炫自適應(yīng)背景視頻登錄頁面實(shí)現(xiàn)方式

 更新時(shí)間:2018年01月17日 10:53:26   投稿:mrr  
本文講述如何實(shí)現(xiàn)擁有酷炫背景視頻的登錄頁面,瀏覽器窗口隨意拉伸,背景視頻及前景登錄組件均能完美適配,背景視頻可始終鋪滿窗口,前景組件始終居中,視頻的內(nèi)容始終得到最大限度的保留,可以得到最好的視覺效果

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

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

 

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

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

 

教程如下所示:

 

從圖中以及我的實(shí)踐可以得出以下觀點(diǎn):

  • 該教程使用了 jQuery 。由于我們想要使用 Vue.js,則 jQuery 可被完全替代掉。
  • 該教程的 CSS、JavaScript 代碼均過于冗余。
  • 直接運(yùn)行示例,發(fā)現(xiàn)效果并不好,瀏覽器窗口隨意拉伸時(shí),背景視頻并不能完美適配「會(huì)出現(xiàn)黑邊等瑕疵」,效果未達(dá)到預(yù)期。

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

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

2.1 HTML 模板

基于需求,對(duì) Coverr 提供的 HTML 模板進(jìn)行了細(xì)微修改,結(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)簽,建議升級(jí)瀏覽器。
 <source src="PATH_TO_WEBM" type="video/webm"/>
 瀏覽器不支持 video 標(biāo)簽,建議升級(jí)瀏覽器。
 </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)簽,提供兩種格式的視頻以及一張圖片占位符,背景視頻在加載完畢后即自動(dòng)播放。

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

2.2 CSS

對(duì)原始模板 CSS 代碼進(jìn)行了大幅精簡,修改后的 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ù)樣式均被項(xiàng)目全局修改了,所以在此專用于此模板的樣式只剩下三條,簡要說明如下:

  • 容器 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>

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

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

最終效果如下所示:

 

參考資料

資源網(wǎng)站「Coverr

Vue.js 中文官網(wǎng)

總結(jié)

以上所述是小編給大家介紹的基于 Vue.js 2.0 酷炫自適應(yīng)背景視頻登錄頁面實(shí)現(xiàn)方式,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • vue實(shí)現(xiàn)Input輸入框模糊查詢方法

    vue實(shí)現(xiàn)Input輸入框模糊查詢方法

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)Input輸入框模糊查詢方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • vue.js路由mode配置之去掉url上默認(rèn)的#方法

    vue.js路由mode配置之去掉url上默認(rèn)的#方法

    今天小編就為大家分享一篇vue.js路由mode配置之去掉url上默認(rèn)的#方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • Vue虛擬dom被創(chuàng)建的方法

    Vue虛擬dom被創(chuàng)建的方法

    這篇文章主要介紹了Vue虛擬dom是如何被創(chuàng)建的方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-10-10
  • el-date-picker時(shí)間清空值為null處理方案

    el-date-picker時(shí)間清空值為null處理方案

    本文介紹關(guān)于Vue.js項(xiàng)目中時(shí)間選擇器組件的問題,當(dāng)選擇后清空導(dǎo)致值變?yōu)閚ull,進(jìn)而引發(fā)后臺(tái)接口報(bào)錯(cuò),通過監(jiān)聽`overallForm.time`的值并設(shè)置為空數(shù)組,成功解決此問題,確保了數(shù)據(jù)正確性,同時(shí),建議避免直接監(jiān)聽整個(gè)對(duì)象以優(yōu)化性能,感興趣的朋友一起看看吧
    2024-08-08
  • vue Watch和Computed的使用總結(jié)

    vue Watch和Computed的使用總結(jié)

    本文主要介紹Vue.js中監(jiān)聽器和計(jì)算屬性的相關(guān)知識(shí)點(diǎn),包括對(duì)普通屬性的監(jiān)聽、對(duì)對(duì)象的監(jiān)聽、對(duì)數(shù)組的監(jiān)聽,以及計(jì)算屬性的Set方法,計(jì)算屬性與監(jiān)聽器的區(qū)別等等
    2021-05-05
  • vue項(xiàng)目或網(wǎng)頁上實(shí)現(xiàn)文字轉(zhuǎn)換成語音播放功能

    vue項(xiàng)目或網(wǎng)頁上實(shí)現(xiàn)文字轉(zhuǎn)換成語音播放功能

    這篇文章主要介紹了在vue項(xiàng)目或網(wǎng)頁上實(shí)現(xiàn)文字轉(zhuǎn)換成語音,需要的朋友可以參考下
    2020-06-06
  • vue項(xiàng)目如何引入json數(shù)據(jù)

    vue項(xiàng)目如何引入json數(shù)據(jù)

    這篇文章主要介紹了vue項(xiàng)目如何引入json數(shù)據(jù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • 解決vue router組件狀態(tài)刷新消失的問題

    解決vue router組件狀態(tài)刷新消失的問題

    這篇文章主要介紹了vue router組件狀態(tài)刷新消失的問題,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-08-08
  • Vue數(shù)據(jù)監(jiān)聽方法watch的使用

    Vue數(shù)據(jù)監(jiān)聽方法watch的使用

    這篇文章主要介紹了Vue數(shù)據(jù)監(jiān)聽方法watch的使用,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-03-03
  • 解析vue的provide和inject使用方法及其原理

    解析vue的provide和inject使用方法及其原理

    這篇文章主要介紹了vue的provide和inject使用方法及其原理,本文通過源碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-10-10

最新評(píng)論