您现在的位置是:网站首页> 编程资料编程资料
CSS3 实现童年的纸飞机 纯css3+svg实现的纸飞机飞行动画特效源码CSS3 SVG实现沿固定路径飞行的纸飞机动画效果源码纯css3制作纸飞机404动画页面模板特效源码纯CSS3实现迎着阳光飞行的3D纸飞机动画效果源码jQuery+css3实现的卡片变换成折叠纸飞机发送祝福动画特效源码CSS3实现纸飞机动画特效源码
2021-09-03
921人已围观
简介 这篇文章主要介绍了CSS3 实现童年的纸飞机 ,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
今天我们来折纸飞机(可以飞出去的那种哦)
基本全用css来实现,只有一小部分的js
首先看一下飞机的构造

灰色区域为可折叠区域
白色区域为机身
三角形由border画出来的再经过各种平移翻转变成上图
写之前再补充个知识点:
我们颜色的设置不用rgba,
用hsl() h: 色调 0- 360 0(或360)表示红色,120表示绿色,240表示蓝色
s : 饱和度 0% -100%
l : 亮度 0% - 100%
先看效果才有动力:

HTML:
fly
css:
body{ width: 100%; height: 680px; background-color: #000; background-repeat: no-repeat; overflow: hidden; transition: all 2s linear; } /*景深加在父级上*/ .airplane{ width: 100%; height: 100%; -webkit-perspective: 800px; -webkit-perspective-origin: 50% 50%; } /*纸飞机前面*/ /*一开始不旋转*/ .front-end.show-front{ transform: rotateY(0deg); } /*点击后旋转*/ .front-end{ background: rgba(255, 255, 255, 0.15); *background: hsl(0, 0%, 88%); /*绕Y轴旋转-180度*/ transform: rotateY(-180deg); position: relative; box-sizing: border-box; padding: 20px; text-align: center; backface-visibility: hidden; width: 400px; height: 260px; top: 240px; transition: all 0.8s ease-in-out; margin: auto; } /*文本框*/ .text-input{ width: 100%; max-width:360px; min-height:100px; padding: 10px; box-sizing: border-box; height: 140px; background-color: #ffffff; font-smoothing: subpixel-antialiased; font-size: 18px; text-align: left; font-family: "Microsoft YaHei",Helvetica, Arial, Verdana; line-height: 20px; } .fly{ transition: all 0.3s ease-in-out; /*hsl是色调/饱和度/亮度/*/ border: 2px solid hsl(194, 100%, 72%); margin: 15px 0; padding: 10px; outline: none; font-size: 18px; cursor: pointer; font-family: "Microsoft YaHei"; background-color: hsl(0, 0%, 94%); border-radius:4px; user-select: none; } /*点击按钮时缩小动画*/ .fly:active{ transform: scale(0.85); transition: all 10ms ease-in-out; background-color: hsl(0, 0%, 85%); border: 2px solid hsl(194, 30%, 55%); } .backup-end{ perspective: 600px; perspective-origin: 200px 131px; transform-style: preserve-3d; transition: all 0.8s ease-in-out; backface-visibility: hidden; position: relative; width: 400px; height: 260px; margin: auto; } /*一开始不显示飞机*/ .backup-end.show-backup{ transform: rotateY(180deg); } /*飞机的左右两边公共样式*/ .left-plane, .right-plane{ transform-style: preserve-3d; width: 200px; height: 260px; display: block; position: absolute; top: 0px; transition: all 1s ease-in-out; } /*左边*/ .left-plane{ transform: rotateZ(0deg); transform-origin: 100% 50% 0; left: 0; } /*右边*/ .right-plane{ transform: rotateZ(0deg); transform-origin: 0% 50%; left: 199px; } /*左右机身的公共样式*/ .wing{ position: absolute; transform-origin: 0 0 0; perspective: 1px; perspective-origin: 50% 50%; backface-visibility: hidden; transition: all 1.3s linear; box-sizing: border-box; margin: 0; padding: 0; background: none; border: none; border-top: 240px solid hsla(0, 0%, 0%, 0); border-bottom: 0px solid hsla(0, 0%, 0%, 0); border-right: 100px solid hsl(0, 0%, 88%); width: 0; height: 0; bottom: 0; } /*绘制 飞机2d 雏形*/ .wing1 { transform-origin: 100% 100%; transform: translateY(-38px) translateX(8px) rotateZ(22.62deg) skewY(-22.62deg);/*2D图像的偏移 旋转*/ } .wing2 { transform: rotateZ(22.62deg); transform-origin: 100% 100%; border-left: 100px solid hsl(0, 0%, 88%); border-right: none; left: 100px; } .wing3 { transform: rotateZ(-22.62deg); transform-origin: 0% 100%; border-right: 100px solid hsl(0, 0%, 88%); } .wing4 { transform: translateY(-38px) translateX(-8px) rotateZ(-22.62deg) skewY(22.62deg); transform-origin: 0% 100%; border-right: none; border-left: 100px solid hsl(0, 0%, 88%); left: 100px; } /*绘制可折叠区域*/ .left-top.fold{ position: absolute; transform-origin: 100px 112px; transition-delay: 1300ms; width: 0; height: 0; top: 0; border-right: 202px solid hsla(0, 0%, 0%, 0); border-bottom: 202px solid hsla(0, 0%, 0%, 0); border-top: 222px solid hsl(0, 0%, 88%); } .right-top.fold{ position: absolute; right: 0; border-left: 202px solid hsla(0, 0%, 0%, 0); border-bottom: 202px solid hsla(0, 0%, 0%, 0); border-top: 222px solid hsl(0, 0%, 88%); transform-origin: 96px 112px; transition-delay: 1650ms; } .left-bottom.fold{ position: absolute; transform-origin: 109px 0; transition-delay: 2100ms; width: 109px; height: 38px; background: hsl(0, 0%, 88%); bottom: 0; left: 0; } .right-bottom.fold{ position: absolute; transform-origin: 0 0; transition-delay: 2450ms; width: 109px; height: 38px; background: hsl(0, 0%, 88%); bottom: 0; right: 0; } /*补全 折叠尾翼 剩余 三角区域*/ .left-bottom.fold:after { position: absolute; content: ""; border-right: 92px solid hsla(0, 0%, 0%, 0); border-bottom: 39px solid hsl(0, 0%, 88%); border-top: 37px solid hsla(0, 0%, 0%, 0); left: 109px; bottom: 0; } .right-bottom.fold:after { position: absolute; content: ""; border-left: 92px solid hsla(0, 0%, 0%, 0); border-bottom: 39px solid hsl(0, 0%, 88%); border-top: 37px solid hsla(0, 0%, 0%, 0); left: -92px; bottom: 0; } /****************************/ /****此处开始配合js*****/ /*折叠效果*/ .fold { transition: transform 800ms ease-out; backface-visibility: hidden; position: absolute; background-color: transparent; z-index: 0; width: 0; } /* 折叠效果(左机翼、左尾翼) */ .left-top.fold.curved { transform: rotate3d(1,-1.11,0,180deg); } .left-bottom.fold.curved { transform: rotate3d(2.4867,1,0,-180deg); } /* 折叠效果(右机翼、右尾翼)*/ .right-top.fold.curved { transform: rotate3d(1,1.11,0,180deg); } .right-bottom.fold.curved { transform: rotate3d(-2.4867,1,0,180deg); } /* 平放一整个飞机 */ .airplane.hover { transform: rotateX(54deg) rotateY(-10deg) rotateZ(25deg); transition-delay: 0.5s; } /*放平之后 左侧整体倾斜 (体现折叠效果)*/ .backup-end.hover .left-plane { transform: rotateY(60deg); } .backup-end.hover .right-plane { transform: rotateY(-60deg); } /* 3d视觉中放平 左侧机翼*/ .backup-end.hover .wing1 { transform: translateY(-38px) translateX(8px) rotateZ(22.62deg) rotateY(-60deg) skewY(-22.62deg); border-right: 100px solid hsl(0, 0%, 95%); } /*左侧 飞机手持部位透明度降低*/ .backup-end.hover .wing2 { border-left: 100px solid hsl(0, 0%, 85%); } /* 3d视觉中放平 右侧机翼*/ .backup-end.hover .wing4 { transform: translateY(-38px) translateX(-8px) rotateZ(-22.62deg) rotateY(60deg) skewY(20deg); border-left: 100px solid hsl(0, 0%, 95%); } /*右侧 飞机手持部位透明度降低*/ .backup-end.hover .wing3 { border-right: 100px solid hsl(0, 0%, 71%); } /*机翼 折叠效果(右机翼、右尾翼) 之后 多余部分隐藏掉*/ .backup-end.hover .curved { display: none; } /* #wind_container.hover .wing { backface-visibility: visible; } */ /* 飞机后退助跑 */ .backup-end.hover.fly_away_first { transform: translateX(-100px) translateZ(300px) rotateX(42deg) rotateY(-11deg) rotateZ(27deg); transition-delay: 0ms; transition-duration: 0.4s; transition-timing-function: ease-out; } /* 飞机向前飞翔至消失 */ .backup-end.hover.fly_away_first.fly_away { transform: translateX(600px) translateY(-400px) translateZ(-5000px) rotateX(66deg) rotateY(-12deg) rotateZ(36deg); transition: transform 2s ease-out, opacity 1.5s 0.5s linear; opacity: 0; }js:
// 童年的纸飞机 const fly = document.getElementsByClassName('fly')[0]; const front = document.getElementsByClassName('front-end')[0]; const backup = document.getElementsByClassName('backup-end')[0]; const fold = document.getElementsByClassName('fold'); fly.addEventListener('click', () => { first().then(second).then(third).then(fourth).then(fifth).catch((err)=> { console.log(err) }); }, false); // 第一步 function first() { return new Promise((suc, err) => { setTimeout(() => { // 隐藏信息面板 front.classList.remove('show-front'); // 翻转至正面 backup.classList.remove('show-backup'); // 折叠效果(左翼、右翼) for (let i = 0; i < fold.length; i++) { fold[i].classList.add('curved') } // 颜色变换 document.body.style.backgroundColor = "#54575A"; suc(1) }, 200) }) } function second() { return new Promise((suc, err) => { setTimeout(function () { backup.classList.add('hover'); document.body.style.backgroundColor = "#AD8BD8"; suc(2) }, 2800); }) } //步骤三:飞机后退助跑 function third() { return new Promise((suc, err) => { setTimeout(function () { backup.classList.add('fly_away_first'); document.body.style.backgroundColor = "#6E99C4"; suc(3) }, 2000); }) } // 步骤四:飞机向前飞翔至消失 function fourth() { return new Promise((suc, err) => { setTimeout(function () { backup.classList.add('fly_away'); document.body.style.backgroundColor = "#3F9BFF"; suc(4) }, 600); }) } function fifth() { return new Promise((suc, err) => { setTimeout(function () { front.classList.add('show-front'); backup.classList.remove('fly_away','fly_away_first','hover'); backup.classList.add('show-backup'); for (let i = 0; i < fold.length; i++) { fold[i].classList.remove('curved') } document.body.style.backgroundColor = "#000"; suc(5) }, 3000); }) }总结
以上所述是小编给大家介绍的CSS3 实现童年的纸飞机 ,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!
相关内容
- CSS 模拟float实现center文字左右环绕图片的效果css实现文字居中两边横线效果的示例代码CSS设置文字图片垂直居中的方法总结深入理解CSS行高line-height与文本垂直居中的原理css实现移动端图片文字水平居中CSS实现同一行的图片和文字垂直居中对齐的方法DIV+CSS中让布局、背景图片、文字内容居中的方法css实现文字图片垂直居中效果CSS解决文字与图片不能水平居中对齐的问题纯css多种方法实现div中单行文字、多行文字及嵌套div垂直水平居中css 实现文字垂直居中
- SASS 中变量的默认值的使用方法sass(scss)的安装与使用教程sass简介_动力节点Java学院整理详解CSS的Sass框架中代码注释的编写方法利用CSS的Sass预处理器(框架)来制作居中效果深入解析CSS的Sass框架中混合宏的使用使用Sass来编写面向对象的CSS代码CSS制作框架 Sass 3.4.4 今日发布 学习CSS预处理器:Sass和less进行对比
- 纯CSS实现单一div的正多边形变换
- 使用CSS变量实现炫酷惊人的悬浮效果CSS3实现的上升悬浮的粒子闪烁发光动画特效源码纯CSS3实现发光的悬浮荧光屏动画效果源码css实现悬浮效果的阴影的方法示例jQuery+CSS3实现的可拖拽悬浮弹性菜单特效源码css3实现的鼠标悬浮3D转动二级下拉导航菜单动画特效源码css3实现的多种3d纸张鼠标悬浮特效源码CSS3按钮鼠标悬浮实现光圈效果源码CSS实现鼠标悬浮出现遮罩层示例源码基于CSS3实现右侧悬浮在线客服源码CSS3实现网页右侧悬浮固定二维码扫描与在线客服等功能特效源码
- 从css 3d说到空间坐标轴附源码纯CSS3实现的3D阴阳八卦(太极)图旋转动画效果源码纯CSS3实现的3D木质尺子旋转动画效果源码CSS3实现鼠标滑过3D样式图片层叠切换动画特效CSS3实现鼠标滑过图片3D旋转动画特效源码纯CSS3实现3D展开动画的图标菜单特效源码CSS3实现鼠标悬停展开3D图标菜单特效源码纯CSS3实现风浪中前行的3D海盗船动画效果源码纯css3实现的3D宝贝猪猡动画效果源码
- rem适配移动设备的方法示例Html5移动端适配IphoneX等机型的方法浅谈移动端适配大法详解如何使用image-set适配移动端高清屏图片移动 web 端屏幕适配(rem)详解H5 活动页之移动端 REM 布局适配方法html5实现移动端适配完美写法手机端用rem+scss做适配的详解移动端适配 使px自动转换rem
- 详解CSS实现仿Windows10鼠标照亮边框效果纯CSS3制作的鼠标悬停时边框旋转鼠标经过图片显示边框的CSS代码
- css实现发光文字及一点点js特效 CSS3制作炫酷的自定义发光文字实现带CSS混合模式的JS视觉差轮播图特效HTML+CSS+JS实现键盘导航源码特效 js和css3实现带反光特效按钮插件js和CSS3实现带详情页面的炫酷网格布局特效js和CSS3实现缩略图全屏展开特效源码JS和CSS3实现点击展开页面动画特效
- 用css实现正方形div 的两种方法css3 图片圆形显示 如何CSS将正方形图片显示为圆形图片布局CSS实现一个自适应的正方形的方法示例
- CSS3 transforms应用于背景图像的解决方法CSS控制背景图像平铺实现边框阴影效果学习CSS的背景图像属性background-CSS教程-网页制作-网页教学网css3背景图片透明叠加属性cross-fade简介及用法实例
