CSS3+HTML5+JS 實(shí)現(xiàn)一個塊的收縮與展開動畫效果
最近在做項(xiàng)目時,發(fā)現(xiàn)CSS3中關(guān)于動畫的技術(shù),自己很少運(yùn)用在項(xiàng)目中,平時一些列表塊的收縮和展開動畫效果,幾乎都是使用 display 的 none 和 block,或者 visibility 的 hidden 和 visible 來進(jìn)行控制。因此,在最近的項(xiàng)目中,就開始深入研究CSS3關(guān)于動畫的技術(shù),并且運(yùn)用到了項(xiàng)目中,下面是關(guān)于列表塊的收縮&展開動畫。
簡單的一個效果圖

實(shí)現(xiàn)思路
大體上我們將列表塊分割成 標(biāo)題塊 和 內(nèi)容塊
(1)標(biāo)題塊: 展示標(biāo)題和一個帶有收縮&展開動畫效果的圖標(biāo)
?、賵D標(biāo)部分,我們可以使用偽類來繪畫出箭頭,并且使用 transform 的旋轉(zhuǎn)屬性 rotate 進(jìn)行圖標(biāo)的方向控制和其動畫效果。
②動畫控制,通常點(diǎn)擊標(biāo)題部分,列表則收縮&展開,因此點(diǎn)擊標(biāo)題時,要對class進(jìn)行控制。
(2)內(nèi)容塊:內(nèi)容塊展示內(nèi)容,且該塊承載了主要的動畫效果——列表的收縮&展開
?、賱赢嬓Ч涸搲K的動畫,我們的思路是整個塊的高度收起來,里面的內(nèi)容也向左邊隱藏,因此需要控制高度和動畫的隱藏,所以使用 max-height 進(jìn)行高度控制和 transition(設(shè)置動畫時間)、transform 的屬性 translate 來進(jìn)行內(nèi)容的隱藏
完整代碼如下:
<!DOCTYPE html>
<html>
<head>
<title></title>
<style type="text/css">
.block_wrap {
width: 500px;
margin: 0 auto;
border: 1px solid #e3e3e3;
border-radius: 10px;
}
.chapter_wrap {
background: white;
text-align: left;
border-radius: 8px;
color: #333333;
margin-bottom: 15px;
font-size: 14px;
overflow: hidden;
}
.title_item_wrap {
padding: 10px 10px 10px 0;
margin: 0 10px 0 10px;
border-bottom: none;
display: flex;
align-items: center;
}
/*使用偽類進(jìn)行圖標(biāo)繪畫*/
.title_item_wrap::after {
content: '';
width: 10px;
height: 10px;
border-top: 2px solid #999999;
border-right: 2px solid #999999;
transform: rotate(-45deg);
display: inline-block;
transition: 0.3s;
float: right;
margin-top: 10px;
}
/*使用類acitve類控制圖標(biāo)的旋轉(zhuǎn)和展開時標(biāo)題的下邊界*/
.active {
border-bottom: 1px solid #F0F0F0;
}
.active::after{
transform: rotate(135deg);
margin-top: 5px;
}
.chapter_title {
font-size: 16px;
padding: 0;
margin: 0;
width: calc(100% - 30px);
}
.node_wrap {
overflow: hidden;
overflow-y: scroll;
transition: 0.3s;
}
.node_wrap p {
padding: 0 20px 5px 20px;
margin: 10px 0;
border-bottom: 1px solid #e3e3e3
}
/*隱藏內(nèi)容塊的滑動條*/
.node_wrap::-webkit-scrollbar {
display: none;
}
/*控制內(nèi)容塊隱藏 隱藏時,整塊向左邊平移200%的寬度,并且將最大高度設(shè)置為0,否則頁面會留有空白*/
.node_wrap_hide {
transform: translate(-200%, 0);
max-height: 0;
}
/*控制內(nèi)容塊顯示,顯示時,整塊向右邊復(fù)原,并且將最大高度設(shè)置為300px,里面的內(nèi)容即會將塊撐開*/
.node_wrap_show {
transform: translate(0, 0);
max-height: 300px;
}
</style>
</head>
<body>
<div class="block_wrap">
<div id="block_wrap" class="title_item_wrap active">
<p class="chapter_title">章節(jié)名稱</p>
</div>
<div id="list_wrap" class="node_wrap node_wrap_show">
<p>節(jié)名稱一</p>
<p>節(jié)名稱二</p>
<p>節(jié)名稱三</p>
<p>節(jié)名稱四</p>
<p>節(jié)名稱五</p>
<p>節(jié)名稱六</p>
<p>節(jié)名稱七</p>
<p>節(jié)名稱八</p>
<p>節(jié)名稱九</p>
<p>節(jié)名稱十</p>
</div>
</div>
</body>
<script type="text/javascript">
// 獲取標(biāo)題元素
var block_wrap = document.getElementById('block_wrap')
//給標(biāo)題元素添加點(diǎn)擊事件,通過點(diǎn)擊控制class的添加&去除達(dá)成動畫效果
block_wrap.onclick = function() {
// 獲取標(biāo)題元素className集合
let classArray = this.className.split(/\s+/)
// 獲取內(nèi)容塊元素
let list_wrap = document.getElementById('list_wrap')
// 判斷標(biāo)題元素是否有類active,如若存在,則說明列表展開,這時點(diǎn)擊則是隱藏內(nèi)容塊,否則顯示內(nèi)容塊
if (classArray.includes('active')) {
// 隱藏內(nèi)容塊
block_wrap.classList.remove('active')
list_wrap.classList.remove('node_wrap_show')
list_wrap.classList.add('node_wrap_hide')
console.log(this.className.split(/\s+/))
return
} else {
// 顯示內(nèi)容塊
block_wrap.classList.add('active')
list_wrap.classList.add('node_wrap_show')
list_wrap.classList.remove('node_wrap_hide')
return
}
}
</script>
</html>
以上代碼直接復(fù)制到HTML文件保存后即可看到效果。此動畫效果適應(yīng)移動端,PC端會有點(diǎn)瑕疵,稍微處理即可。
到此這篇關(guān)于CSS3+HTML5+JS 實(shí)現(xiàn)一個塊的收縮與展開動畫效果的文章就介紹到這了,更多相關(guān)html5展開收縮動畫內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持腳本之家!
相關(guān)文章
CSS3 實(shí)現(xiàn)側(cè)邊欄展開收起動畫
這篇文章主要介紹了如何使用CSS3 實(shí)現(xiàn)側(cè)邊欄展開收起動畫,并附上了示例代碼,非常的詳細(xì),推薦給需要的小伙伴。2014-12-22
CSS3超酷環(huán)形動畫菜單其子菜單可環(huán)繞展開
一款非常有創(chuàng)意的CSS3動畫菜單,菜單是環(huán)形的2014-05-28
CSS3華麗的Tab菜單當(dāng)鼠標(biāo)滑過時會出現(xiàn)展開動畫
這款Tab菜單的菜單項(xiàng)是一個個小圖標(biāo),鼠標(biāo)滑過時,菜單項(xiàng)展示對應(yīng)文字,并出現(xiàn)展開的動畫2014-05-04
純CSS3實(shí)現(xiàn)的橫向和縱向鼠標(biāo)滑過手風(fēng)琴自動展開效果
無需任何js代碼,純CSS3實(shí)現(xiàn),鼠標(biāo)滑過自動展開,可以實(shí)現(xiàn)橫向和縱向的手風(fēng)琴效果2013-06-07
基于jquery+css3實(shí)現(xiàn)左右搖擺可滑動展開折疊圓形導(dǎo)航菜單
CSS3實(shí)現(xiàn)的一些菜單導(dǎo)航效果,在不支持CSS3屬性的瀏覽器下效果較差一些,展開效果后會看到文字、搜索框等等2013-02-20





