js+html+css筋斗雲導航欄
阿新 • • 發佈:2021-02-09
功能簡述
- 圖片隨著滑鼠位置在導航欄上變化而變化
- 當點選某個導航欄時,圖片位置遷移到當前導航欄的位置處
- 效果預覽
實現原理
- 給每個li標籤新增滑鼠事件
- 當滑鼠懸浮於li標籤的時候,將當前li標籤的offsetLeft值賦給圖片的offsetLeft使其移動
- 當滑鼠離開li標籤的時候,圖片offsetLeft的值重置為之前已點選的li標籤的offsetLeft值
- 當滑鼠點選li標籤的時候,記錄當前li標籤的offsetLeft值,並當前li標籤新增選中狀態
- 涉及到的animate函式詳見js動畫函式實現側邊欄動態顯示內容.
實現程式碼
html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>practice1</title> <link href="../css/practive1.css" rel="stylesheet"/> <script src="../js/animate.js"></script> <script type="text/javascript" src="../js/practice1.js"></script> </head> <body> <div class="cloud"> <span class="img"></span> <ul> <li class="current"><a href="javascript:;">首頁</a></li> <li><a href="javascript:;">文章</a></li> <li><a href="javascript:;">動態</a></li> <li><a href="javascript:;">關注</a></li> <li><a href="javascript:;">最新熱門</a></li> </ul> </div> </body> </html>
css
body { background-color: #a3b0b5; } .cloud { margin: 100px auto; border-radius: 5px; position: relative; width: 500px; height: 42px; background: #fff url("../imgs/pig.jpg") no-repeat right center; } .cloud ul { position: absolute; text-align: center; list-style-type: none; margin-left: 0px; padding: 0; } .cloud ul li{ top: 0; margin: 0px 15px; float: left; text-align: center; } .cloud li a{ text-decoration: none; color: #000; display: inline-block; } .cloud li:hover { color: #dc4c3f; font-weight: 600; } .cloud ul li.current a{ color: #dc4c3f; font-weight: 600; } .cloud span { position: absolute; top: 0px; background: url('../imgs/lovefly.gif') no-repeat; /* 圖片隨螢幕大小同步縮放*/ background-size: cover; /* 圖片的位置居中靠左對齊*/ background-position: center 0; width: 50px; height: 40px; }
js
window.addEventListener('pageshow',function () { var cloud = document.querySelector('.cloud'); var img = cloud.querySelector('.img'); var lis = cloud.querySelectorAll('li'); //圖片最初的位置 var imgLeft = img.offsetLeft; // 為每個li標籤新增滑鼠事件 for (var i = 0; i < lis.length; i++) { // 滑鼠懸浮事件 lis[i].addEventListener('mouseenter',function () { animate(img,this.offsetLeft,15); }) // 滑鼠離開事件 lis[i].addEventListener('mouseleave',function () { animate(img,imgLeft,15); }) // 滑鼠點選事件 lis[i].addEventListener('click',function () { imgLeft = this.offsetLeft; // 採用排他思想 去除其他的current選中樣式 for (var i = 0; i < lis.length; i++) { lis[i].className = ''; } this.className = 'current'; }) } })