JS事件之鼠標懸浮窗(鼠標懸浮窗抖動問題的解決)


鼠標進入顯示懸浮窗,思路有簡單有困難。

首先要注意的是我們要給懸浮窗設置position為absolute,不然我們改了 style.left style.top發現沒有變化很尷尬。其余的內容看起來就很明了了。

style部分

		html,div,h1{margin: 0;padding: 0;}
		body{
			background: #DE9191;
		}
		#box{
			position: absolute;
			left: 50%;
			top: 50%;
			margin: -50px 0 0 -50px;
			width: 100px;
			height: 100px;
			background: #3A48E6;
		}
		#popover{
			position: absolute;
			border: 2px solid #fa1ef1;
			color: #fff;
			width: 200px;
			display: none;
		}

body部分

<body>
	<div id="box"></div>
	<div id="popover">
		<h1>I'm header</h1>
		<span>I'm message</span>
	</div>
</body>

JS部分

	var oBox=document.getElementById("box");
	var oPop=document.getElementById("popover");
	oBox.onmouseover=function(event){
		var event=event||window.event;
			// flag=true;
		document.onmousemove=function(event){
			// if(!flag) return ;
			oPop.style.left=event.clientX+"px";
			oPop.style.top=event.clientY+"px";
			oPop.style.display="block";
		}
	}
	oBox.onmouseout=function(){
		// flag=false;
		oPop.style.display="none";
	}


然而還是我想簡單了,乍一看這個移動十分流暢,然而當 改動了 onmouseout 的時候,popover框就出現了跳動和閃動的情況。

好了,我們可以開始 百度/谷歌 解決問題了。

已經找到解決方案,問題的原因是這樣的: 我們自己移動鼠標的時候,有時候會將鼠標移動到懸浮窗上,也就是在這個時候產生的抖動,我們的代碼沒有跟上我們的手速。

總之就是 onmouseover 被我們自己設置的懸浮層給遮蓋住了。所以我們只要讓鼠標不觸發在懸浮窗的事件即可。

在我們的 popover css中加上這么一句話

pointer-events: none;

至此之后,我們的 popover 就與我們的鼠標隔絕了,我們的鼠標永遠都在 我們的oBox上懸浮,自然也不會發生抖動了。


但是,實際上這是有問題的。因為一般情況下,我們的懸浮窗應該是可以被鼠標放上去的,這明顯與實際不符。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM