1. ホーム
  2. Web制作
  3. HTML/Xhtml

DIVのピントずれ(ぼかし)実装方法

2022-01-08 11:55:02

DIVのマウスオーバーがアンチディザリングで消える

divタグ自体はonblurイベントに対応していないので、ボタンがクリックされたときにポップアップするdivの場合、onblurではできない、divのフォーカスが外れたときに消えるようにしたい。

しかし、onmouseoutとイベントを使って、DIVのフォーカスを失い、消滅させることは可能です。move outを消すためにonmouseoutを直接使うのは問題があるかもしれません。ボタンの位置とポップアップDivが重ならないと仮定すると、マウスが移動してすぐにonmouseoutイベントが発生し、あまり良いことはないでしょう。

アンチシェイク、onmouseout、onmouseoverを組み合わせて、きれいなブラーイベントを実現します。

    /**
     *Mouseover div event
     */
    function moveOverEvent(ele,outTimer) {
        let overTimer = null;
        return function(){
            clearTimeout(outTimer); //div is not gone in the case of moving in the div, then clear the last move out event
            clearTimeout(overTimer); //anti-jitter
            overTimer = setTimeout(()=>{        
                ele.style.display = "block";
            },500);                     
        }
    }
    /**
     * mouseover
     */
    function moveOutEvent(ele,outTimer) {
        return function(){
            clearTimeout(outTimer); // anti-shake
            outTimer = setTimeout(()=>{ //wait 500ms after moving out, before disappearing this div
                ele.style.display = "none";
            },500);
        }
    }


それから、divにtabindex属性を追加することでblurイベントを実装できるものを見落としていたので、上記のコードは無駄かもしれません。(追記)上記の方が誤操作が少なくていいような気がします)

//After tabindex is set, the element is dashed by default and removed by outline=0 (IE sets hidefocus="true")
<div tabindex="0" outline=0" hidefocus="true"></div>

以上、本記事の全内容をご紹介しましたが、皆様の学習のお役に立てれば幸いです。また、Script Houseをより一層応援していただければ幸いです。