本文讲述如何实现拥有酷炫背景视频的登录页面,浏览器窗口随意拉伸,背景视频及前景登录组件均能完美适配,背景视频可始终铺满窗口,前景组件始终居中,视频的内容始终得到最大限度的保留,可以得到最好的视觉效果。并且基于 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><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.clientWidthconst windowHeight = document.body.clientHeightconst windowAspectRatio = windowHeight / windowWidthlet videoWidthlet videoHeightif (windowAspectRatio < 0.5625) {videoWidth = windowWidthvideoHeight = videoWidth * 0.5625this.fixStyle = {height: windowWidth * 0.5625 + 'px',width: windowWidth + 'px','margin-bottom': (windowHeight - videoHeight) / 2 + 'px','margin-left': 'initial'}} else {videoHeight = windowHeightvideoWidth = videoHeight / 0.5625this.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 的尺寸,使得视频的最窄的边始终撑满浏览器的窗口,而长的边左右两边被均匀地裁减。

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

最终效果如下所示:

参考资料

  1. 资源网站「Coverr」
  2. Vue.js 中文官网

基于 Vue.js 2.0 酷炫自适应背景视频登录页面的设计相关推荐

  1. vue时间天气插件_基于vue.js 2.0的百度天气应用 – vue-weather

    vue-weather 基于vue.js 2.0的百度天气应用. 说明 初学vue,在看完一个简单的视频教程和走两遍完官方文档之后仍然感觉云里雾里,知其然不知其所以然(虽然现在好了点).请教了高手之后 ...

  2. 【哈士奇赠书活动 - 24期】-〖前端工程化:基于Vue.js 3.0的设计与实践〗

    文章目录 ⭐️ 赠书 - <前端工程化:基于Vue.js 3.0的设计与实践> ⭐️ 内容简介 ⭐️ 作者简介 ⭐️ 精彩书评 ⭐️ 赠书活动 → 获奖名单 ⭐️ 赠书 - <前端工 ...

  3. vue.js毕业设计,基于vue.js前后端分离在线教育视频点播小程序系统 开题报告

      毕业论文 基于Vue.js视频点播小程序系统 开题报告 学    院: 专    业: 年    级: 学生姓名: 指导教师: 黄菊华   XXXX大学本科生毕业论文(设计)开题报告书 姓   名 ...

  4. iView 3.3.0 发布,基于 Vue.js 的企业级 UI 组件库

    iView 3.3.0 发布了,代号 Transistor ,iView 是一套基于 Vue.js 的企业级 UI 组件库,主要服务于 PC 界面的中后台产品. 本次更新如下: https://www ...

  5. iView 3.4.0 发布,基于 Vue.js 的企业级 UI 组件库

    百度智能云 云生态狂欢季 热门云产品1折起>>>   iView 3.4.0 发布了,iView 是一套基于 Vue.js 的企业级 UI 组件库,主要服务于 PC 界面的中后台产品 ...

  6. Vue.js 3.0企业级管理后台开发实战:基于Element Plus UI

    Vue.js 3.0企业级管理后台开发实战:基于Element Plus UI - 每天更新 前言 文章内容 项目源码及课件 第1章 项目启动 1.1 项目原型 1.2 项目UI 1.3 项目开发流程 ...

  7. vue canvas插件_基于vue.js 制作在线桌椅定制选择交互特效源码

    码农那点事儿 关注我们,一起学习进步 基于vue.js写的在线桌子椅子垫子选择拼成的自己理想的书桌椅图像,这是一款交互式的课桌椅在线定制选择功能.非常不错,感兴趣的朋友前来下载使用. 下载源码(提取码 ...

  8. 【转】Vue.js 2.0 快速上手精华梳理

    Vue.js 2.0 快速上手精华梳理 Sandy 发掘代码技巧:公众号:daimajiqiao 自从Vue2.0发布后,Vue就成了前端领域的热门话题,github也突破了三万的star,那么对于新 ...

  9. 说说如何基于 Vue.js 实现表格组件

    我们基于 Vue.js 实现一个可根据某列进行排序的表格组件. 一个表格包含表头和数据两部分内容.因此,我们定义两个数组,columns 表示表头信息,在 <thread> 中渲染,并可在 ...

最新文章

  1. eas报错日记_金蝶EAS抓取性能日志说明
  2. 百度2020Q3财报:“十四五”规划注入新动能,百度智能云驶入快车道
  3. 斗地主案例的需求分析
  4. 一天测血压的最佳时间_高血压病患者,一天之内在什么时间点测血压最好?
  5. 数组引用--冒泡排序 数组倒置为例
  6. mysql中char存储中文_数据库中的字符类型存储字符和汉字的数量
  7. caffe matlab 重启,Matlab caffe 具体使用方法
  8. 分享7个免费学习Java的优秀在线网站
  9. 精准面试突击55:delete、drop、truncate有什么区别?
  10. Seurat-单细胞文献复现第二弹-02
  11. 文件大小单位Bytes, KB, MB, GB, TB, PB等及换算关系,英语怎么说?
  12. 【系统分析师之路】项目管理类论文写法心得
  13. 《人民的名义》如何圈粉“90后”| 大数据舆情分析
  14. 学习笔记(2):8小时学会HTML网页开发-网页布局之切切豆腐
  15. 微信小程序navigationBarTitleText导航栏标题设置
  16. 上海30K*16和深圳22K*14的offer同时揽下,真的是行情不好吗?
  17. 接入QQ互联(QQ登录)时,$_REQUEST['state'] == $_SESSION['state'] CSRF验证失败,原因是访问域名和回调域名不一致(虽然两个域名绑定的是同一个服务器的项目)
  18. 人工智能和区块链是什么关系?
  19. omnet++ 之aloha示例 的动画效果分析
  20. 自然语言处理与深度学习: 集智俱乐部活动笔记

热门文章

  1. 新规持续发力,OTC行业最严冻卡潮袭来 |链捕手
  2. xmind2testcase:高效的测试用例导出工具
  3. 俄罗斯方块_c++实现
  4. fisheye使用mysql_Dual-fisheye viewer
  5. vivo2020届春季校园招聘在线编程考试--[编程题]vivo智能手机产能
  6. 外汇天眼:FCA 警告经纪商提防差价合约的“不良做法”
  7. 字段转换工具(数据库字段与表字段互转)
  8. mongodb设置环境变量
  9. UG NX2020许可 教程笔记
  10. WARNING: export AUTOGRAPH_VERBOSITY=10