前端|3D立体视频翻转动画
时间:2022-07-22
本文章向大家介绍前端|3D立体视频翻转动画,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
基本介绍
HTML5 3D立方体翻转动画特效是一款基于TweenMax制作多张图片拼接的3D立方体正方形旋转动画特效。
图1.1 效果图
思路分析
制作3D立体视频翻转动画网页时,主要用到以下方法:
1、使用animation: rotate linear ns infinite属性来设置动画播放样式:动画对象,播放速度,时间,播放次数。
2、使用transform属性向元素应用2D或者3D转换。transform:rotateX() rotateY() rotateZ()让我们能够对元素进行翻转; ransform: scaleX()通过设置X轴的值来定义缩放转换。
3、添加鼠标移上效果hover。
制作过程
(1)创建一个父容器和立方体容器。在立方体容器里面创建小立方体,并插入视频,让视频自动播放(autoplay:自动播放;loop:循环播放;muted:静音)。
<div>
<div>
<!--小立方体-->
<ul>
<li><video src="video.mp4" autoplay loop muted></video></li>
<li><video src="video.mp4" autoplay loop muted></video></li>
<li><video src="video.mp4" autoplay loop muted></video></li>
<li><video src="video.mp4" autoplay loop muted></video></li>
<li><video src="video.mp4" autoplay loop muted></video></li>
<li><video src="video.mp4" autoplay loop muted></video></li>
</ul>
</div>
</div>
(2)调整视频大小,将视频整体居中,调整视距为800。
*{
margin: 0;
padding: 0;
}
li{
list-style: none;/*去除list前面的修饰*/
}html,body{
width: 100%;
height: 100%;
overflow: hidden;
}
.main{
width: 100%;
height: 100%;
perspective: 800;/*调整视距大小*/
}
.cubeBox{ /*整体立方体*/
width: 200px;
height: 200px;
position: absolute;
top: 50%;
left: 50%;
margin: -100px 0 0 -100px;
transform-style: preserve-3d;/*调整方位居中;变化类型为3D*/
}
.cube{
width: 100px;
height: 100px;
position: absolute;
top: 50%;
left: 50%;
margin: -50px 0 0 -50px;
transform-style: preserve-3d;/*调整方位居中;变化类型为3D*/
transform: rotateX(-10deg)rotateY(45deg);
animation: move 4s linear infinite;/*复合方式设置动画 :动画名 执行一次时间 执行方式 使动画永远的执行下去*/
}
(3)修饰小方块的六个面和它的视频大小位置。
.cube li{
width: 100%;
height: 100%;
position: absolute;
top: 0;
left: 0;
transition: all 1s ease;/*设置动画过渡:全部样式 1秒 缓动*/
}
.cube li video{
width: 100%;
height: 100%;
}
.cube li:nth-child(1){
transform: rotateX(0deg)translateZ(50px);
}
.cube li:nth-child(2){
transform: rotateX(180deg)translateZ(50px);
}
.cube li:nth-child(3){
transform: rotateX(-90deg)translateZ(50px);
}
.cube li:nth-child(4){
transform: rotateX(90deg)translateZ(50px);
}
.cube li:nth-child(5){
transform: rotateY(-90deg)translateZ(50px);
}
.cube li:nth-child(6){
transform: rotateY(90deg)translateZ(50px);
}
(4)设置外面的大立方体以及对应的效果。
<!--大立方体-->
<ul class="cube bigCube">
<li><video src="video.mp4" autoplay loop muted></video></li>
<li><video src="video.mp4" autoplay loop muted></video></li>
<li><video src="video.mp4" autoplay loop muted></video></li>
<li><video src="video.mp4" autoplay loop muted></video></li>
<li><video src="video.mp4" autoplay loop muted></video></li>
<li><video src="video.mp4" autoplay loop muted></video></li>
</ul>
/*大立方体*/
.bigCube{
width: 200px;
height: 200px;
margin: -100px 0 0 -100px;
}
.bigCube li:nth-child(1){
transform: rotateX(0deg)translateZ(100px);
}
.bigCube li:nth-child(2){
transform: rotateX(180deg)translateZ(100px);
}
.bigCube li:nth-child(3){
transform: rotateX(-90deg)translateZ(100px);
}
.bigCube li:nth-child(4){
transform: rotateX(90deg)translateZ(100px);
}
.bigCube li:nth-child(5){
transform: rotateY(-90deg)translateZ(100px);
}
.bigCube li:nth-child(6){
transform: rotateY(90deg)translateZ(100px);
}
(5)调用动画名字,设置动画旋转效果(@keyframe效果:实现动画效果;使用方法:@keyframe 后+动画名{from:初始状态;to:末状态})。
@keyframes move{
from{transform: rotateX(-13deg) rotateY(0deg);}
to{transform: rotateX(-13deg) rotateY(360deg);}/*添加3D旋转效果 让其绕X、Y轴同时旋转90度*/
}
(6)为立方体添加鼠标移上的效果。
.cubeBox:hover .bigCube li:nth-child(1){
transform: rotateX(0deg)translateZ(200px);
}
.cubeBox:hover .bigCube li:nth-child(2){
transform: rotateX(180deg)translateZ(200px);
}
.cubeBox:hover .bigCube li:nth-child(3){
transform: rotateX(-90deg)translateZ(200px);
}
.cubeBox:hover .bigCube li:nth-child(4){
transform: rotateX(90deg)translateZ(200px);
}
.cubeBox:hover .bigCube li:nth-child(5){
transform: rotateY(-90deg)translateZ(200px);
}
.cubeBox:hover .bigCube li:nth-child(6){
transform: rotateY(90deg)translateZ(200px);
}
(7)在父容器后面添加背景播放器并设置其格式。
<!--背景播放器-->
<video src="video.mp4" autoplay loop muted></video>
.bg{
width: 100%;
height: 100%;
object-fit: fill;/*设置背景全填充*/
}
效果图:
图1.2 效果图
图1.3 效果图
END
主 编 | 王楠岚
责 编 | 江南沐雪
- 正则表达式提取指定内容
- mysql数据库误删除后的数据恢复操作说明
- 在.NET平台上运行Java程序-IKVM.NET入门
- ArraySegment<T>泛型结构示例
- SwitchButton 开关按钮 的多种实现方式
- SVN和Git对比梳理
- linux下expect环境安装以及简单脚本测试
- 泛型List<T>使用示例
- linux系统最小化安装后的初始化脚本
- 简单对比git pull和git pull --rebase的使用
- VS 2010一步步开发windows服务(windows service)
- 运算符重载,以及迭代器[foreach]示例
- 牛津大学王宁博士:大数据与有限理性
- 侃哥:苹果服软了就“降速门”公开致歉并祭出优惠
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- redis高并发高可用
- 嵌入式linux之go语言开发(九)关于嵌入式GUI
- docker入门总结,从使用的角度谈起
- 使用 Go 语言开发 Android 应用的正确姿势探索
- Android的配置文件操作的完美封装(使用注解 反射让配置文件操作如此清晰和简单)
- Android中protobuf的使用
- 疫情监控三部曲——在STM32F103 MCU上实现(裸机版)
- Android配置文件操作模块封装,全互联网最简单好用的封装
- 使用logcat让Android应用支持查看实时日志并输出至界面显示功能
- 如何处理redis集群的hot key和big key
- 嵌入式linux之go语言开发(十一)让web服务器跑在终端上,通过网页配置终端参数
- 嵌入式linux之go语言开发(十二)参数配置文件存储模块开发
- 嵌入式linux之go语言开发(十三)LittlevGL,漂亮的嵌入式GUI的go语言绑定
- 同事问我MySQL怎么递归查询,我懵逼了...
- RocketMQ学习四-生产者producer