基于 Vue.js 2.0 酷炫自适应背景视频登录页面实现方式


Posted in Javascript onJanuary 17, 2018

本文讲述如何实现拥有酷炫背景视频的登录页面,浏览器窗口随意拉伸,背景视频及前景登录组件均能完美适配,背景视频可始终铺满窗口,前景组件始终居中,视频的内容始终得到最大限度的保留,可以得到最好的视觉效果。并且基于 Vue.js 2.0 全家桶。具体效果如下图所示:

最终效果可以翻到文章最后观看。

基于 Vue.js 2.0 酷炫自适应背景视频登录页面实现方式 

1. 背景视频 Web 页面的既有实现方式

国外有一个很好的网站 「Coverr」 ,提供了完善的教程和视频资源,帮助前端开发者构建酷炫的背景视频主页,网站效果示例如下图所示:

基于 Vue.js 2.0 酷炫自适应背景视频登录页面实现方式 

教程如下所示:

基于 Vue.js 2.0 酷炫自适应背景视频登录页面实现方式 

从图中以及我的实践可以得出以下观点:

  • 该教程使用了 jQuery 。由于我们想要使用 Vue.js,则 jQuery 可被完全替代掉。
  • 该教程的 CSS、JavaScript 代码均过于冗余。
  • 直接运行示例,发现效果并不好,浏览器窗口随意拉伸时,背景视频并不能完美适配「会出现黑边等瑕疵」,效果未达到预期。

2. 设计完美的背景视频 Web 页面

首先基于脚手架工具 vue-cli 来创建一个使用 vue-loader 的项目,构建完毕后,在相应目录下创建「.vue」文件,作为登录页面的模板文件,具体细节不再赘述。本节内容仅局限于该.vue文件。

2.1 HTML 模板

基于需求,对 Coverr 提供的 HTML 模板进行了细微修改,结果如下:

<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 标签,建议升级浏览器。
 <source src="PATH_TO_WEBM" type="video/webm"/>
 浏览器不支持 video 标签,建议升级浏览器。
 </video>
 <div class="poster hidden" v-if="!vedioCanPlay">
 <img :style="fixStyle" src="PATH_TO_JPEG" alt="">
 </div>
 </div>
 </div>
</template>

模板中, filter 类的 div 标签是一层背景视频的蒙版,可以通过蒙版控制视频的亮暗以及色温等。

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>

由于大多数样式均被项目全局修改了,所以在此专用于此模板的样式只剩下三条,简要说明如下:

  • 容器 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 事件的监听。当窗口大小更改时,程序同步修改 video 及蒙版 dom 的尺寸,使得视频的最窄的边始终撑满浏览器的窗口,而长的边左右两边被均匀地裁减。

这样操作,可以使得视频不会被拉伸,视频中心始终位于浏览器的中心,并且在随意拉伸浏览器窗口时,视频的内容始终得到最大限度的保留,并且可以得到最好的视觉效果。

最终效果如下所示:

基于 Vue.js 2.0 酷炫自适应背景视频登录页面实现方式 

参考资料

资源网站「Coverr」

Vue.js 中文官网

总结

以上所述是小编给大家介绍的基于 Vue.js 2.0 酷炫自适应背景视频登录页面实现方式,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
JavaScript 保存数组到Cookie的代码
Apr 14 Javascript
两种简单实现菜单高亮显示的JS类代码
Jun 27 Javascript
jQuery中each()方法用法实例
Dec 27 Javascript
深入理解JavaScript系列(44):设计模式之桥接模式详解
Mar 04 Javascript
JavaScript实现数组随机排序的方法
Jun 26 Javascript
浅析javascript中的事件代理
Nov 06 Javascript
Javascript 函数的四种调用模式
Nov 05 Javascript
jquery代码规范让代码越来越好看
Feb 03 Javascript
bootstrap table使用入门基本用法
May 24 Javascript
JS+H5 Canvas实现时钟效果
Jul 20 Javascript
解决React在安装antd之后出现的Can't resolve './locale'问题(推荐)
May 03 Javascript
如何在面试中手写出javascript节流和防抖函数
Oct 22 Javascript
使用Vue开发一个实时性时间转换指令
Jan 17 #Javascript
angularjs 页面自适应高度的方法
Jan 17 #Javascript
VueJs监听window.resize方法示例
Jan 17 #Javascript
详解AngularJS之$window窗口对象
Jan 17 #Javascript
React-native桥接Android原生开发详解
Jan 17 #Javascript
vue自定义指令directive实例详解
Jan 17 #Javascript
移动web开发之touch事件实例详解
Jan 17 #Javascript
You might like
PHP遍历XML文档所有节点的方法
2015/03/12 PHP
PHP设置进度条的方法
2015/07/08 PHP
laravel学习笔记之模型事件的几种用法示例
2017/08/15 PHP
国外的为初学者写的JavaScript教程
2008/06/09 Javascript
从零开始学习jQuery (十) jQueryUI常用功能实战
2011/02/23 Javascript
JavaScript中清空数组的三种方法分享
2011/04/07 Javascript
Jquery动态添加及删除页面节点元素示例代码
2014/06/16 Javascript
input:checkbox多选框实现单选效果跟radio一样
2014/06/16 Javascript
node.js中的fs.symlink方法使用说明
2014/12/15 Javascript
详解js私有作用域中创建特权方法
2016/01/25 Javascript
JS实现课堂随机点名和顺序点名
2017/03/09 Javascript
详解react-router如何实现按需加载
2017/06/15 Javascript
关于TypeScript模块导入的那些事
2018/06/12 Javascript
React 组件中的 bind(this)示例代码
2018/09/16 Javascript
2019最新21个MySQL高频面试题介绍
2020/02/06 Javascript
[02:32]“虐狗”镜头慎点 2016国际邀请赛中国区预选赛现场玩家采访
2016/06/28 DOTA
[52:10]LGD vs Optic Supermajor小组赛D组胜者组决赛 BO3 第二场 6.3
2018/06/04 DOTA
Python基础语法(Python基础知识点)
2016/02/28 Python
浅谈python字典多键值及重复键值的使用
2016/11/04 Python
python 环境变量和import模块导入方法(详解)
2017/07/11 Python
Python自定义函数实现求两个数最大公约数、最小公倍数示例
2018/05/21 Python
Keras框架中的epoch、bacth、batch size、iteration使用介绍
2020/06/10 Python
AmazeUI 导航条的实现示例
2020/08/14 HTML / CSS
Tory Burch美国官方网站:美国时尚生活品牌
2016/08/01 全球购物
加拿大健康、婴儿和美容产品在线购物:Well.ca
2016/11/30 全球购物
美德好少年事迹材料
2014/01/19 职场文书
法制宣传月活动方案
2014/05/11 职场文书
幼儿教师师德师风自我剖析材料
2014/09/29 职场文书
党支部组织生活会整改方案
2014/09/30 职场文书
烟台的海导游词
2015/02/02 职场文书
高中生个性发展自我评价
2015/03/09 职场文书
单位考核鉴定意见
2015/06/05 职场文书
乡镇干部学习心得体会
2016/01/23 职场文书
为什么中国式养孩子很累?
2019/08/07 职场文书
微软Win11什么功能最惊艳? Windows11新功能特性汇总
2021/11/21 数码科技
vue实现列表拖拽排序的示例代码
2022/04/08 Vue.js