被覆レイヤーを描画するのと同様に、被覆レイヤーを塗りつぶすだけでも非常に簡単ですが、ここではそれほど単純ではありません。先ほど生成されたより面倒な div も選択しました。既存の div を表示する代わりに、特に注意が必要ないくつかの点:
1. カバー層が表示された後は、マウスが動かなくても、すでにカバー層上にあり、div 領域が与えられないため、監視位置に注意してください。
2. Onmouseout と onmouseover は両方とも即座にトリガーされます。これは非常に重要です。3. 実際のアプリケーションでは、一時的に作成するよりも既存の div を表示する方が確実に効果的です。
コードを見てみましょう。実際、以前の場所はあまり変更されていません。onmouseout モニタリングが追加されている場所だけです。
var getOneDiv=function(){ var div=document.createElement("div"); div.style.position="absolute"; div.style.display="block"; div.style.zIndex="10"; div.style.background="yellow"; div.addEventListener("mouseout",function(event){//我把它加在了这里,而这里监听的判断与之前的划入几乎如出一辙 var x=event.clientX; var y=event.clientY; left=x-test.offsetLeft; top=y-test.offsetTop; right=test.offsetLeft+test.offsetWidth-x; bottom=test.offsetTop+test.offsetHeight-y; arr=[]; arr.push(top); arr.push(right); arr.push(bottom); arr.push(left); var least=findLeast(arr); if(least==1){ } if(least==2){//还是距离和宽度的同时改变啊 div.style.left=test.offsetLeft+"px"; div.style.top=test.offsetTop+"px"; div.style.height=test.offsetHeight+"px"; div.style.width=width+"px"; var changeWidth2=setInterval(function(){ if(div.offsetLeft>=test.offsetLeft+test.offsetWidth){ clearInterval(changeWidth2); check=true;//关键点 }else{ marginLeft=marginLeft+10; width=width-10; div.style.width=width+"px"; div.style.left=marginLeft+"px"; } },30); } if(least==3){ } if(least==4){//向左划出,width作为全局变量,这次就是不断减小了 div.style.left=test.offsetLeft+"px"; div.style.top=test.offsetTop+"px"; div.style.height=test.offsetHeight+"px"; div.style.width=width+"px"; var changeWidth1=setInterval(function(){ if(div.offsetWidth<=0){ clearInterval(changeWidth1); check=true;//这里也比较关键哦 }else{ width=width-10; div.style.width=width+"px"; } },30); } }) return div; }