JavaScript實(shí)現(xiàn)精美個(gè)性導(dǎo)航欄筋斗云效果
實(shí)現(xiàn)效果:
實(shí)現(xiàn)效果如下圖所示
實(shí)現(xiàn)原理:
什么是筋斗云效果:
•這個(gè)效果很簡(jiǎn)單,就是鼠標(biāo)移到其他導(dǎo)航目錄時(shí)會(huì)有背景圖片跟著鼠標(biāo)滑動(dòng)到當(dāng)前的目錄。
實(shí)現(xiàn)思路:
•鼠標(biāo)經(jīng)過(guò)的時(shí)候,利用offsetLeft獲得當(dāng)前盒子距離左側(cè)的距離,把這個(gè)值賦給緩動(dòng)動(dòng)畫(huà)的end值。
•當(dāng)點(diǎn)擊的時(shí)候記住當(dāng)前的offsetLeft值,當(dāng)鼠標(biāo)經(jīng)過(guò)的時(shí)候把之前點(diǎn)擊的offsetLeft給現(xiàn)在經(jīng)過(guò)時(shí)候的值。
實(shí)現(xiàn)代碼:
下面是實(shí)現(xiàn)代碼以及詳細(xì)注釋,核心設(shè)置一個(gè)position為absolute的span標(biāo)簽,通過(guò)綁定鼠標(biāo)事件,用封裝好的animate動(dòng)畫(huà)實(shí)現(xiàn)span的“筋斗云”效果。
<!DOCTYPE html> <html> <head> <title>導(dǎo)航欄筋斗云效果</title> <meta charset="utf-8"> <style type="text/css"> *{ padding: 0; margin: 0; } body{ background-color: rgba(0, 0, 0, 0.6); } .box{ width: 415px; height: 42px; margin: 200px auto; background-color: #fff; position: relative; } ul{ list-style: none; position: relative; } li{ float: left; width: 83px; height: 42px; text-align: center; font: 500 15px/42px "微軟雅黑"; cursor: pointer; } span{ position: absolute; left: 0; top: 0; width: 83px; height: 42px; background-image: linear-gradient(to right,#03c03c 50% ,#51ee5d 100%); } </style> </head> <body> <div class="box"> <span></span> <ul> <li>菜單欄1</li> <li>菜單欄2</li> <li>菜單欄3</li> <li>菜單欄4</li> <li>菜單欄5</li> </ul> </div> <script type="text/javascript"> window.onload = function(){ // 鼠標(biāo)放在哪個(gè)li上面,span對(duì)應(yīng)一道到哪里,移開(kāi)后回到原位置 var liArr = document.getElementsByTagName("li"); var liWidth = liArr[0].offsetWidth; var span = document.getElementsByTagName("span")[0]; // 計(jì)數(shù)器 var cnt = 0; // for循環(huán)綁定事件 for(var i=0; i<liArr.length; i++){ // 自定義屬性,然后綁定index屬性為索引值 liArr[i].index = i; // 鼠標(biāo)進(jìn)入事件 liArr[i].onmouseover = function(){ // 然span運(yùn)動(dòng)到該li的索引值位置 animate(span, this.index*liWidth); } // 鼠標(biāo)移開(kāi) liArr[i].onmouseout = function(){ // span運(yùn)動(dòng)到原位置 animate(span, cnt*liWidth); } // 點(diǎn)擊事件 liArr[i].onclick = function(){ // 計(jì)數(shù)器記錄當(dāng)前標(biāo)簽索引值 cnt = this.index; animate(span, cnt*liWidth); } } // 緩動(dòng)動(dòng)畫(huà)封裝 function animate(element, target){ // 清除間歇調(diào)用 clearInterval(element.timer); // 設(shè)置超時(shí)調(diào)用 element.timer = setInterval(function(){ // 設(shè)置步數(shù) var step = (target - element.offsetLeft)/10; // 調(diào)整步數(shù) step = step > 0 ? Math.ceil(step) : Math.floor(step); // 設(shè)置樣式 element.style.left = element.offsetLeft + step + "px"; // console.log(1); if(Math.abs(target - element.offsetLeft) < Math.abs(step)){ element.style.left = target + "px"; clearInterval(element.timer); } }, 20); } } </script> </body> </html>
總結(jié)
以上所述是小編給大家介紹的JavaScript實(shí)現(xiàn)精美個(gè)性導(dǎo)航欄筋斗云效果,希望對(duì)大家有所幫助!
- 原生JS實(shí)現(xiàn) MUI導(dǎo)航欄透明漸變效果
- JavaScript實(shí)現(xiàn)滑動(dòng)導(dǎo)航欄效果
- JS滾動(dòng)到指定位置導(dǎo)航欄固定頂部
- JavaScript實(shí)現(xiàn)鼠標(biāo)點(diǎn)擊導(dǎo)航欄變色特效
- js實(shí)現(xiàn)導(dǎo)航欄中英文切換效果
- js實(shí)現(xiàn)帶緩動(dòng)動(dòng)畫(huà)的導(dǎo)航欄效果
- Fullpage.js固定導(dǎo)航欄-實(shí)現(xiàn)定位導(dǎo)航欄
- 一步步教大家編寫酷炫的導(dǎo)航欄js+css實(shí)現(xiàn)
- js代碼實(shí)現(xiàn)微博導(dǎo)航欄
- js導(dǎo)航欄單擊事件背景變換示例代碼
- JavaScript滿天星導(dǎo)航欄實(shí)現(xiàn)方法
相關(guān)文章
js使用for循環(huán)與innerHTML獲取選中tr下td值
這篇文章主要與大家分享了js使用for循環(huán)與innerHTML獲取選中tr下td值的方法,很簡(jiǎn)單,但很實(shí)用,有需要的朋友可以參考下2014-09-09判斷javascript的數(shù)據(jù)類型(示例代碼)
這篇文章主要是對(duì)判斷javascript的數(shù)據(jù)類型(示例代碼)進(jìn)行了詳細(xì)的介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2013-12-12js canvas實(shí)現(xiàn)擦除效果示例代碼
擦除效果在我們?nèi)粘i_(kāi)發(fā)中也是時(shí)有見(jiàn)到的,通過(guò)擦除效果大大加強(qiáng)了與用戶的交互性,所以下面這篇文章主要給大家介紹了利用js和canvas實(shí)現(xiàn)擦除效果的相關(guān)資料,文中給出了詳細(xì)的介紹和示例代碼,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-04-04JavaScript使用Math.random()生成簡(jiǎn)單的驗(yàn)證碼
今天小編就為大家分享一篇關(guān)于JavaScript使用Math.random()生成簡(jiǎn)單的驗(yàn)證碼,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-01-01Javascript驗(yàn)證用戶輸入U(xiǎn)RL地址是否為空及格式是否正確
這篇文章主要介紹了Javascript驗(yàn)證用戶輸入U(xiǎn)RL地址是否為空及格式是否正確,很實(shí)用,需要的朋友可以參考下2014-10-10JS數(shù)組降維的實(shí)現(xiàn)Array.prototype.concat.apply([], arr)
這篇文章主要介紹了JS數(shù)組降維的實(shí)現(xiàn)Array.prototype.concat.apply([], arr),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04原生javascript+css3編寫的3D魔方動(dòng)畫(huà)旋扭特效
這篇文章主要介紹了原生javascript+css3編寫的3D魔方動(dòng)畫(huà)旋扭特效的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-03-03javascript設(shè)計(jì)模式之module(模塊)模式
這篇文章主要為大家詳細(xì)介紹了javascript設(shè)計(jì)模式之module(模塊)模式 ,感興趣的小伙伴們可以參考一下2016-08-08layui表單驗(yàn)證select下拉框?qū)崿F(xiàn)驗(yàn)證的方法
今天小編就為大家分享一篇layui表單驗(yàn)證select下拉框?qū)崿F(xiàn)驗(yàn)證的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-09-09