透明層滑動跟隨導航選單
分享一段程式碼例項,它實現了滑鼠懸浮導航選單,有透明層滑動跟隨的效果。
程式碼例項如下:
[HTML] 純文字檢視 複製程式碼執行程式碼<!doctype html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style type="text/css"> ul,li { padding: 0; margin: 0; } li { list-style: none; } #box{ height: 48px; width: 900px; background-color: #459DF5; margin: 50px auto; position: relative; } #caution { width: 150px; height: 48px; background-color: #4B92D8; position: absolute; top: 0; left: 0; } #list { position: absolute; } #list li { width: 150px; height: 48px; float: left; color: #fff; font: 500 20px/48px "微軟雅黑"; text-align: center; cursor: pointer; } </style> <script> window.onload = function() { var oUl = document.getElementById("list"); var caution = document.getElementById("caution"); var aLi = oUl.children; var timer = null; var leader = 0; var target = 0; var current = 0; for (var index = 0; index < aLi.length; index++) { aLi[index].onmouseover = function () { clearInterval(timer); target = this.offsetLeft; timer = setInterval(autoCaution, 20); } aLi[index].onmousedown = function () { for (var j = 0; j < aLi.length; j++) { aLi[j].style.color = "#fff"; } this.style.color = "#ccc"; current = this.offsetLeft; caution.style.left = current + "px"; } } oUl.onmouseout = function() { clearInterval(timer); target = current; timer = setInterval(autoCaution, 20); } function autoCaution() { leader = leader + (target - leader) / 10; caution.style.left = leader + "px"; } } </script> </head> <body> <div id="box"> <span id="caution"></span> <ul id="list"> <li>首頁</li> <li>螞蟻部落一</li> <li>螞蟻部落二</li> <li>螞蟻部落三</li> <li>螞蟻部落四</li> </ul> </div> </body> </html>
上面的程式碼實現了我們的要求,下面介紹一下它的實現過程。
一.程式碼註釋:
[CSS] 純文字檢視 複製程式碼ul,li { padding: 0; margin: 0; }
進行簡單的初始化操作,將外邊距和內邊距都設定為0。
[CSS] 純文字檢視 複製程式碼li { list-style: none; }
刪除列表預設的樣式效果。
[CSS] 純文字檢視 複製程式碼#box{ height: 48px; width: 900px; background-color: #459DF5; margin: 50px auto; position: relative; }
導航選單的容器元素,通過margin設定它為水平居中效果。
並且設定它為相對定位,這一點很重要,那麼它內部的定位子元素就以它為定位參考物件。
[CSS] 純文字檢視 複製程式碼#caution { width: 150px; height: 48px; background-color: #4B92D8; position: absolute; top: 0; left: 0; }
這個就是我們所看到的"透明層",然而事實它並不是透明的,它採用定位,會被導航選單所覆蓋。同時又由於導航選單是透明的,當我們滑鼠懸浮的時候,此元素會跟隨移動,在外觀上就實現了透明層滑動跟隨效果。
[CSS] 純文字檢視 複製程式碼#list { position: absolute; }
設定它為絕對定位,這樣此元素就可以覆蓋在#caution之上。
[CSS] 純文字檢視 複製程式碼#list li { width: 150px; height: 48px; float: left; color: #fff; font: 500 20px/48px "微軟雅黑"; text-align: center; cursor: pointer; }
設定li元素的相關樣式,比較簡單。
[JavaScript] 純文字檢視 複製程式碼window.onload = function() { //code }
等文件內容完全載入完畢再去執行函式中的程式碼。
[JavaScript] 純文字檢視 複製程式碼var oUl = document.getElementById("list"); var caution = document.getElementById("caution");
獲取對應id屬性值的元素物件。
[JavaScript] 純文字檢視 複製程式碼var aLi = oUl.children;
獲取元素物件下面的子元素物件結合。
[JavaScript] 純文字檢視 複製程式碼var timer = null;
宣告一個變數並賦值為null,用來存放定時器函式的標識。
[JavaScript] 純文字檢視 複製程式碼var leader = 0; var target = 0; var current = 0;
宣告三個變數,並賦初值為0,後面會介紹到。
[JavaScript] 純文字檢視 複製程式碼for (var index = 0; index < aLi.length; index++) { //code }
通過for迴圈為li元素批量註冊事件處理函式。
[JavaScript] 純文字檢視 複製程式碼aLi[index].onmouseover = function () { clearInterval(timer); target = this.offsetLeft; timer = setInterval(autoCaution, 20); }
註冊mouserover事件處理函式。
clearInterval(timer)停止上一個定時器函式的執行,否則出現滑鼠連續移入導致重疊的現象。
target = this.offsetLeft獲取當前li元素距離定位的父級元素的距離。
timer = setInterval(autoCaution, 20),通過定時器函式,每隔20毫秒呼叫一次autoCaution函式。
[JavaScript] 純文字檢視 複製程式碼aLi[index].onmousedown = function () { for (var j = 0; j < aLi.length; j++) { aLi[j].style.color = "#fff"; } this.style.color = "#ccc"; current = this.offsetLeft; caution.style.left = current + "px"; }
為li元素註冊mousedown事件處理函式。
首先通過for迴圈將字型顏色設定為#fff,然後再將當前li元素的字型顏色設定為#ccc。
再獲取當前li元素距離父級定位元素的距離。
最後將#caution元素的left屬性值設定為current 。
[JavaScript] 純文字檢視 複製程式碼oUl.onmouseout = function() { clearInterval(timer); target = current; timer = setInterval(autoCaution, 20); }
為oul元素註冊mouseout事件處理函式。
當滑鼠離開ul元素,那麼就將#caution元素設定在current位置。
[JavaScript] 純文字檢視 複製程式碼function autoCaution() { leader = leader + (target - leader) / 10; caution.style.left = leader + "px"; }
通過不斷地呼叫此函式以實現動畫方式實現跟隨效果。
相關文章
- CSS 動態導航選單CSS
- 導航選單(動畫)--- jQuery動畫jQuery
- PbootCMS導航選單-導航選單的使用教程boot
- SVG導航下劃線游標跟隨效果SVG
- CSS垂直導航選單CSS
- HTML側邊部分內容滑動跟隨 左側跟隨滾動模組程式碼HTML
- JavaScript二級導航選單JavaScript
- JavaScript 三級導航選單JavaScript
- CSS3動畫效果下拉導航選單效果CSSS3動畫
- CSS導航欄及下拉選單CSS
- CSS多級導航選單效果CSS
- CSS垂直三級導航選單CSS
- Element-ui之導航選單UI
- JavaScript slide下拉導航選單效果JavaScriptIDE
- 直播app開發,滑動式的頂部導航欄(左右橫向滑動)APP
- 不可思議的純 CSS 導航欄下劃線跟隨效果CSS
- 不可思議的純CSS導航欄下劃線跟隨效果CSS
- jQuery三級導航選單詳解jQuery
- 純css製作導航下拉選單CSS
- (四)選單導航及路由設定路由
- 固定在頂部的導航選單
- vue元件之路之menu導航選單Vue元件
- 僅2步實現 拜拜 漢堡導航欄效果~ 全新底部導航互動(滑動隱藏)
- jQuery 動畫方式展開或者收縮垂直導航選單jQuery動畫
- jQuery 淡入淡出效果下拉導航選單jQuery
- CSS三級下拉導航選單詳解CSS
- JavaScript橫向二級導航選單效果JavaScript
- CSS3麵包屑導航選單CSSS3
- JavaScript可摺疊屬性導航選單JavaScript
- JavaScript下拉摺疊導航選單講解JavaScript
- 純CSS打造淘寶導航選單欄CSS
- CSS3垂直摺疊導航選單CSSS3
- CSS水平導航選單製作詳解CSS
- CSS 水平導航選單製作詳解CSS
- CSS3橫向導航選單效果CSSS3
- 滑鼠懸浮緩慢下拉導航選單
- CSS 可伸縮圓角導航選單CSS
- elementui NavMenu導航選單預設展開UI