友情提示:閱讀本文章約須要10-15分鐘,讀完若是對您有收穫,記得點贊喲^_^css
進度條用兩個div便可實現,代碼以下:html
// 外層控制進度條底色、進度條總寬度
<div class="process-wrap">
// 內層和外層 高度保持一致,內層width = 0(體現進度條變化)
<div class="process-bar"></div>
</div>
複製代碼
/* 進度條 */
.process-wrap {
background-color: #ebebeb;
border-radius: 2px;
margin: 0 auto;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.2);
height: 10px;
/* 控制外層總寬 度*/
width: 70%;
/* 超出寬度後,隱藏,避免溢出 */
max-width: 100%;
overflow: hidden;
}
.process-bar {
background-image: -webkit-linear-gradient(45deg, #2989d8 32%,#7db9e8 33%,#7db9e8 66%,#2989d8 67%);
background-image: linear-gradient(45deg, #2989d8 32%,#7db9e8 33%,#7db9e8 66%,#2989d8 67%);
background: #6088f2;
background-size: 60px 10px;
border-radius: 3px;
height: 10px;
/* 進度條,用JS改變當前寬度 */
width: 0;
/* 控制動畫 */
transition: width 1s ease-in;
-moz-transition: width 1s ease-in; /* Firefox 4 */
-webkit-transition: width 1s ease-in; /* Safari and Chrome */
-o-transition: width 1s ease-in; /* Opera */
}
複製代碼
想一下,若是上面的進度條咱們去掉transition屬性,又會有什麼狀況發生?web
進度條會一段一段的渲染,很是突兀,用戶體驗很不友好。下面咱們一塊兒來探究一下transition屬性用了什麼魔法,讓CSS能動起來?bash
transition屬性的意義:在兩個狀態之間實現一種隱式過渡(implicit transitions)。使咱們在更改CSS屬性的時候,能夠控制時間、速度、效果等。ide
//變化的屬性、持續時間、渲染函數、過多長時間後開始
transition: property duration durationFunc delayTime;
複製代碼
property:能夠作動畫的屬性,包括width、height、background、backgorundImage、opacity、font、border、color、clip等。函數
duration:整個動畫持續的時間,以 秒 作單位。post
durationFunc:動畫變更的路徑函數,ease、linear、step-end、step(num, end)、cubic。動畫
delayTime:動畫過幾秒之後開始,以 秒 作單位。ui
若是想在transition動畫結束後,作一些動做,能夠用 transitionend事件(在transition動畫結束後觸發)spa
element.addEventListener('transitionend', callbackFunc, true);
複製代碼
<div class="multi-box"></div>
複製代碼
.multi-box {
display: block;
border: 1px solid #000;
width: 100px;
height: 100px;
background-color: #2989d8;
-webkit-transition: width 2s, height 4s, background-color 2s, -webkit-transform 2s;
transition: width 2s, height 4s, background-color 2s, transform 2s;
}
.multi-box:hover {
background-color: antiquewhite;
width: 200px;
height: 200px;
-webkit-transform: rotate(180deg);
transform: rotate(180deg);
}
複製代碼
<div class="sidebar">
<p><a class="menuButton" href="home">Home</a></p>
<p><a class="menuButton" href="about">About</a></p>
<p><a class="menuButton" href="contact">Contact</a></p>
<p><a class="menuButton" href="links">Links</a></p>
</div>
複製代碼
.menuButton {
display: block;
margin-bottom: 10px;
height: 26px;
width: 100px;
text-align: center;
border: 1px solid black;
font-size: 20px;
text-decoration: none;
padding: 2px 4px;
/* 變化的屬性:hover離開胡,恢復原來的狀態動畫 */
color: white;
background-color: grey;
transition: background-color 1s, color 1s;
}
.menuButton:hover {
/* 變化的屬性:hover時的動畫 */
color: black;
background-color: white;
transition: background-color 1s, color 1s;
}
複製代碼
// 接實例2
let animationBtn = document.querySelectorAll('.menuButton');
animationBtn.forEach(item => {
item.addEventListener('webkitTransitionEnd', () => {
console.log('動畫已結束!');
}, true);
});
複製代碼
hover後再離開,會發現有4次輸出,由於hover時有兩個屬性發生變化(background-color, color),離開後恢復原狀土,又有兩個屬性發生變化。
<div id="foo"></div>
複製代碼
#foo {
position: absolute;
width: 50px;
height: 50px;
border-radius: 50px;
background:#c00;
top: 0;
left: 0;
-moz-transition: all 1s;
-webkit-transition: all 1s;
-ms-transition: all 1s;
-o-transition: all 1s;
transition: all 1s;
}
複製代碼
var f = document.getElementById('foo');
document.addEventListener('click', function(ev){
f.style.left = (ev.clientX-25)+'px';
f.style.top = (ev.clientY-25)+'px';
},false);
複製代碼