首先說明一下效果:滑鼠放到頭像上面左邊會顯示一塊個人資料框,離開頭像後過一小段時間個人資料資訊消失,離開頭像後如果滑鼠放在個人資料框上面則個人資料框不消失;
html程式碼:一個id為head的標籤和一個id為left的標籤 這兩個就足以完成下來的效果;
#head相當於頭像;#left相當於個人資料框(一開始是隱藏的 display:none;);css樣式就不寫了,直接寫js
原生js:
首先獲取dom節點
var Head = document.getElementById("head");
var Left = document.getElementById("left");
複製程式碼
有滑鼠的移入移出動作 所以要用到onmouseover(滑鼠移入)和onmouseout(滑鼠移出)兩個事件
先來寫移入事件:
Head.onmouseover = function(){
Left.style.display = "block";
}
滑鼠放在Head上面則Left顯示 新增css屬性display:block;
複製程式碼
下來要分析一下了:滑鼠離開頭像之後Left不能立即消失,所以這塊要用到延時器(setTimeout) ; 滑鼠離開頭像之後我們還要做一個判斷 滑鼠是否移入了Left,所以要做一個開關(就是給一個變數進行判斷)
先從簡單的來寫一點點往上加,先不做是否移入Left判斷那麼移出Head應該這麼寫:
Head.onmouseout = function(){
setTimeout(function(){ //延時一秒讓Left消失
Left.style.display = "none";
},1000);
}
複製程式碼
下來我們就要寫開關了 判斷滑鼠離開頭像之後是否進入Left
var isIndom = false; //給一個變數 用它來模擬開關 通過判斷變數我們就可以知道滑鼠是否移入Left
Left.onmouseover = function(){ //如果滑鼠移入Left 則將isIndom改為true
isIndom = true;
}
Left.onmouseout = function(){ //滑鼠移出Left 則將isIndom改為flase並將Left隱藏 this指向Left
isIndom = false;
this.style.display = "none";
}
複製程式碼
最後要給Head的滑鼠移出事件裡面加上判斷就可以了 在inIndom == flase的時候選擇隱藏Head
Head.onmouseout = function(){
setTimeout(function(){ //延時一秒讓Left消失
if(!isIndom){
Left.style.display = "none";
}
},1000);
}
複製程式碼
上面就是原生js寫的延時提醒框 下來用jq寫一個同樣的效果
在jq中滑鼠移入移出事件分別是 mouseover() mouseout();
$("#head").mouseover(function(){ //$()獲取節點
$("#left").fadeIn(2000); //fadeIn是jq一個顯示效果(漸現) 也是為了讓Head顯示只是方式不同而已
})
複製程式碼
下來還是要寫一個開關 這次我們將開關封裝起來
var isIndom = flase; //定義全部變數 isIndom(開關)
function switch0(){
$("#left").mouseover(function(){
isIndom = true;
});
$("#left").mouseout(function(){
isIndom = false;
$("#left").fadeOut(1000);
});
}
switch0函式所執行出來的isIndom就是我們要的值
最後寫滑鼠移出Head事件
$("#head").mouseout(function(){
switch0(); //先執行switch0函式 得到isIndom的值
setTimeout(function(){
if(!isIndom){
$("#left").fadeOut(1000); //fadeOut()和fadeIn()對應是jq一個消失的效果(漸隱)
}
},1000);
})
複製程式碼