CSS3 實(shí)現(xiàn)童年的紙飛機(jī)
今天我們來折紙飛機(jī)(可以飛出去的那種哦)
基本全用css來實(shí)現(xiàn),只有一小部分的js
首先看一下飛機(jī)的構(gòu)造

灰色區(qū)域?yàn)榭烧郫B區(qū)域
白色區(qū)域?yàn)闄C(jī)身
三角形由border畫出來的再經(jīng)過各種平移翻轉(zhuǎn)變成上圖
寫之前再補(bǔ)充個(gè)知識點(diǎn):
我們顏色的設(shè)置不用rgba,
用hsl() h: 色調(diào) 0- 360 0(或360)表示紅色,120表示綠色,240表示藍(lán)色
s : 飽和度 0% -100%
l : 亮度 0% - 100%
先看效果才有動(dòng)力:

HTML:
<!--童年的紙飛機(jī)-->
<div class="airplane">
<div class="front-end show-front">
<!--寬高自適應(yīng)的文本框-->
<div class="text-input" contenteditable = true></div>
<div class="fly">
fly
</div>
</div>
<div class="backup-end show-backup">
<div class="left-plane">
<!--左上角折疊區(qū)域-->
<div class="left-top fold"></div>
<!--左下角折疊區(qū)域-->
<div class="left-bottom fold"></div>
<!--機(jī)身-->
<div class="wing wing1"></div>
<div class="wing wing2"></div>
</div>
<div class="right-plane">
<!--右上角折疊區(qū)域-->
<div class="right-top fold"></div>
<!--右下角折疊區(qū)域-->
<div class="right-bottom fold"></div>
<!--機(jī)身-->
<div class="wing wing3"></div>
<div class="wing wing4"></div>
</div>
</div>
</div>
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%;
}
/*紙飛機(jī)前面*/
/*一開始不旋轉(zhuǎn)*/
.front-end.show-front{
transform: rotateY(0deg);
}
/*點(diǎn)擊后旋轉(zhuǎn)*/
.front-end{
background: rgba(255, 255, 255, 0.15);
*background: hsl(0, 0%, 88%);
/*繞Y軸旋轉(zhuǎn)-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是色調(diào)/飽和度/亮度/*/
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;
}
/*點(diǎn)擊按鈕時(shí)縮小動(dòng)畫*/
.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;
}
/*一開始不顯示飛機(jī)*/
.backup-end.show-backup{
transform: rotateY(180deg);
}
/*飛機(jī)的左右兩邊公共樣式*/
.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;
}
/*左右機(jī)身的公共樣式*/
.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;
}
/*繪制 飛機(jī)2d 雛形*/
.wing1 {
transform-origin: 100% 100%;
transform: translateY(-38px) translateX(8px) rotateZ(22.62deg) skewY(-22.62deg);/*2D圖像的偏移 旋轉(zhuǎn)*/
}
.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;
}
/*繪制可折疊區(qū)域*/
.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;
}
/*補(bǔ)全 折疊尾翼 剩余 三角區(qū)域*/
.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;
}
/* 折疊效果(左機(jī)翼、左尾翼) */
.left-top.fold.curved {
transform: rotate3d(1,-1.11,0,180deg);
}
.left-bottom.fold.curved {
transform: rotate3d(2.4867,1,0,-180deg);
}
/* 折疊效果(右機(jī)翼、右尾翼)*/
.right-top.fold.curved {
transform: rotate3d(1,1.11,0,180deg);
}
.right-bottom.fold.curved {
transform: rotate3d(-2.4867,1,0,180deg);
}
/* 平放一整個(gè)飛機(jī) */
.airplane.hover {
transform: rotateX(54deg) rotateY(-10deg) rotateZ(25deg);
transition-delay: 0.5s;
}
/*放平之后 左側(cè)整體傾斜 (體現(xiàn)折疊效果)*/
.backup-end.hover .left-plane {
transform: rotateY(60deg);
}
.backup-end.hover .right-plane {
transform: rotateY(-60deg);
}
/* 3d視覺中放平 左側(cè)機(jī)翼*/
.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%);
}
/*左側(cè) 飛機(jī)手持部位透明度降低*/
.backup-end.hover .wing2 {
border-left: 100px solid hsl(0, 0%, 85%);
}
/* 3d視覺中放平 右側(cè)機(jī)翼*/
.backup-end.hover .wing4 {
transform: translateY(-38px) translateX(-8px) rotateZ(-22.62deg) rotateY(60deg) skewY(20deg);
border-left: 100px solid hsl(0, 0%, 95%);
}
/*右側(cè) 飛機(jī)手持部位透明度降低*/
.backup-end.hover .wing3 {
border-right: 100px solid hsl(0, 0%, 71%);
}
/*機(jī)翼 折疊效果(右機(jī)翼、右尾翼) 之后 多余部分隱藏掉*/
.backup-end.hover .curved {
display: none;
}
/* #wind_container.hover .wing {
backface-visibility: visible;
} */
/* 飛機(jī)后退助跑 */
.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;
}
/* 飛機(jī)向前飛翔至消失 */
.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:
// 童年的紙飛機(jī)
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');
// 翻轉(zhuǎn)至正面
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);
})
}
//步驟三:飛機(jī)后退助跑
function third() {
return new Promise((suc, err) => {
setTimeout(function () {
backup.classList.add('fly_away_first');
document.body.style.backgroundColor = "#6E99C4";
suc(3)
}, 2000);
})
}
// 步驟四:飛機(jī)向前飛翔至消失
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);
})
}
總結(jié)
以上所述是小編給大家介紹的CSS3 實(shí)現(xiàn)童年的紙飛機(jī) ,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時(shí)回復(fù)大家的!
相關(guān)文章

純css3+svg實(shí)現(xiàn)的紙飛機(jī)飛行動(dòng)畫特效源碼
這是一款基于純css3+svg實(shí)現(xiàn)的紙飛機(jī)飛行動(dòng)畫特效源碼。畫面中一個(gè)紙飛機(jī)在空中上下漂浮著向前飛行,天空中漂浮著卡通效果的云,畫面下方是綠色的樹木。天空中的云與下方的2019-04-10
CSS3 SVG實(shí)現(xiàn)沿固定路徑飛行的紙飛機(jī)動(dòng)畫效果源碼
這是一款基于CSS3 SVG實(shí)現(xiàn)沿固定路徑飛行的紙飛機(jī)動(dòng)畫效果源碼。藍(lán)色背景畫面上有一條白色的曲線運(yùn)動(dòng)軌跡,在運(yùn)動(dòng)軌跡上有一個(gè)紙飛機(jī)沿著虛線軌跡勻速飛行2018-12-13
純css3制作紙飛機(jī)404動(dòng)畫頁面模板特效源碼
css3 404動(dòng)畫頁面,卡通紙飛機(jī)地球背景的404頁面動(dòng)畫模板下載。有需要的朋友可以直接下載使用2018-08-01
純CSS3實(shí)現(xiàn)迎著陽光飛行的3D紙飛機(jī)動(dòng)畫效果源碼
這是一款基于純CSS3實(shí)現(xiàn)迎著陽光飛行的3D紙飛機(jī)動(dòng)畫效果源碼。蔚藍(lán)的天空上太陽閃耀出一道道光線,太陽的正前方一個(gè)紙飛機(jī)朝太陽飛去,隨著鼠標(biāo)超各個(gè)方向移動(dòng),紙飛機(jī)也相2018-04-04
jQuery+css3實(shí)現(xiàn)的卡片變換成折疊紙飛機(jī)發(fā)送祝福動(dòng)畫特效源碼
這是一款基于jQuery+css3實(shí)現(xiàn)的卡片變換成折疊紙飛機(jī)發(fā)送祝福動(dòng)畫特效源碼。畫面上初始顯示一個(gè)對話框,供用戶輸入祝福信息,信息編輯完成后點(diǎn)擊下方的“發(fā)送”按鈕即可看2018-01-09
CSS3實(shí)現(xiàn)紙飛機(jī)動(dòng)畫特效源碼
CSS3實(shí)現(xiàn)紙飛機(jī)動(dòng)畫特效源碼是一款可以應(yīng)用于登錄頁面,信息發(fā)送成功,如果填的信息有誤,可以使用Shake模式,代表信息輸入有誤,需要的朋友前來下載源碼2016-03-08







