基于 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笔记 数据的存储与访问性能优化
Aug 02 Javascript
JS将秒换成时分秒实现代码
Sep 03 Javascript
JS简单的图片放大缩小的两种方法
Nov 11 Javascript
JQueryiframe页面操作父页面中的元素与方法(实例讲解)
Nov 19 Javascript
javascript中attachEvent用法实例分析
May 14 Javascript
JS实现自定义简单网页软键盘效果代码
Nov 05 Javascript
Sublime Text 3常用插件及安装方法
Dec 16 Javascript
JS实现图片剪裁并预览效果
Aug 12 Javascript
javascript解析ajax返回的xml和json格式数据实例详解
Jan 05 Javascript
纯js仿淘宝京东商品放大镜功能
Mar 02 Javascript
详解如何在react中搭建d3力导向图
Jan 12 Javascript
Vant Weapp组件踩坑:picker的初始赋值解决
Nov 12 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模板技术[转]
2007/01/04 PHP
php实现文件下载简单示例(代码实现文件下载)
2014/03/10 PHP
php顺序查找和二分查找示例
2014/03/27 PHP
使用PHP处理数据库数据如何将数据返回客户端并显示当前状态
2016/02/16 PHP
Zend Framework教程之模型Model用法简单实例
2016/03/04 PHP
laravel框架查询数据集转为数组的两种方法
2019/10/10 PHP
js 距离某一时间点时间是多少实现代码
2013/10/14 Javascript
JS根据变量保存方法名并执行方法示例
2014/04/04 Javascript
JavaScript控制图片加载完成后调用回调函数的方法
2015/03/20 Javascript
jQuery使用after()方法在元素后面添加多项内容的方法
2015/03/26 Javascript
JS实现网页上随滚动条滚动的层效果代码
2015/11/04 Javascript
Javascript获取统一管理的提示语(message)
2016/02/03 Javascript
js字符串操作总结(必看篇)
2016/11/22 Javascript
一句jQuery代码实现返回顶部效果(简单实用)
2016/12/28 Javascript
js代码延迟一定时间后执行一个函数的实例
2017/02/15 Javascript
使用vue构建一个上传图片表单
2017/07/04 Javascript
JavaScript实现单击网页任意位置打开新窗口与关闭窗口的方法
2017/09/21 Javascript
Node.js创建HTTP文件服务器的使用示例
2018/05/11 Javascript
ztree加载完成后显示勾选节点的实现代码
2018/10/22 Javascript
微信小程序websocket实现即时聊天功能
2019/05/21 Javascript
ECharts地图绘制和钻取简易接口详解
2019/07/12 Javascript
jQuery实现轮播图源码
2019/10/23 jQuery
jQuery实现移动端笔触canvas电子签名
2020/05/21 jQuery
详解Python中__str__和__repr__方法的区别
2015/04/17 Python
深入讲解Python中面向对象编程的相关知识
2015/05/25 Python
Python脚本暴力破解栅栏密码
2015/10/19 Python
Python中的字符串查找操作方法总结
2016/06/27 Python
Window10下python3.7 安装与卸载教程图解
2019/09/30 Python
Python常用模块logging——日志输出功能(示例代码)
2019/11/20 Python
门卫岗位职责
2013/11/15 职场文书
保密承诺书范文
2014/03/27 职场文书
初中英语演讲稿
2014/04/29 职场文书
历史名人教你十五个读书方法,赶快Get起来!
2019/07/18 职场文书
导游词之安徽巢湖
2019/12/26 职场文书
fastdfs+nginx集群搭建的实现
2021/03/31 Servers
MySQL Router实现MySQL的读写分离的方法
2021/05/27 MySQL