2017-03-09 3 views
0

私は左メニューを持っていますが、クリックするとidの十字ボタンがクリックされたときにメニューが消え、メニュー以外の場所をクリックすると閉じる必要があります。
site linkメニューを非表示にするときは

(function() { 
    var bodyEl = document.body, 
    content = document.querySelector('.content-wrap'), 
    openbtn = document.getElementById('open-button'), 
    closebtn = document.getElementById('close-button'), 

    isOpen = false; 


function init() { 
    initEvents(); 
} 

function initEvents() { 
    openbtn.addEventListener('click', toggleMenu); 

    //bodyEl.addEventListener('click', toggleMenu); // 

    if(closebtn) { 
     closebtn.addEventListener('click', toggleMenu); 
    } 
    // close the menu element if the target it´s not the menu element or one of its descendants.. 
    /**content.addEventListener('click', function(ev) { 
     var target = ev.target; 
     if(isOpen && target !== openbtn) { 
      toggleMenu(); 
     } 
    }); */ 
} 

function toggleMenu() { 
    if(isOpen) { 
     classie.remove(bodyEl, 'show-menu'); 
    } 
    else { 
     classie.add(bodyEl, 'show-menu'); 
    } 
    isOpen = !isOpen; 
} 

init(); 

})(); 
+0

のように見えますか? –

+1

メニューが開いたら、 'create EventListener'はすべての要素(body)をクリックして聞いてきて、そのクリックがメニュー内にあるかどうかをテストします。メニューが閉じたときに 'EventListener'を削除してください。 – dschu

+0

これは通常、画面全体を取る透明な 'div'で行われます。ここでは、クリックイベントを表示します(このdivはメニューの後ろにありますが、コンテンツの上にあります)。メニューが閉じているときにdivを非表示にする必要があります。もちろん、 – Kaddath

答えて

0

私は問題を理解していれば要素がフォーカスを失ったときにJavaScript関数を実行するためにonblur="toggleMenu();"を使用することができます修正します。これは、onfocus()イベントの反対です。

<div class="menu-element" onblur="toggleMenu();"/> 

もJavaScriptでeventlistnerを追加することができます。

var x = document.getElementById("menu-wrap"); 
    x.addEventListener("blur", toggleMenu, true); 

をここでのいくつかの例があります:https://www.w3schools.com/jsref/event_onblur.asp

1

あなたはより良いこのようなものでいいと思います。あなたが隠したいと思うdivにIDを与えて、this.Callのような関数を作成するには、onclickというイベントを文書に追加してください。あなたはフィドル/ plnkrを作成することができます

document.onClick=myFunction(event) { 

if(event.target.id!="popupDiv_id" || event.target.id=="closeButton_Id") 
{ 
    document.getElementById("popupDiv_id").style.display="none"; 
    } 
} 
+0

ディスプレイをチェックすることができます:私のために働いていない。あなたは問題の言及がある現在のメニューのリンクをチェックすることができます。メニューボタンをクリックすると、クラスが自分の体に追加されました。メニューが開かれている以外は、体のどこかをクリックしたときに削除する必要があります。私はボディクラスを隠そうとしましたが、動作しませんでした。 –

0

コードは、この

$('body').on('click', function (e) { 
      // hide any open popovers when the anywhere else in the body is clicked 
      if (!$(this).is(e.target) && $(this).has(e.target).length === 0 && $('.menu-element').has(e.target).length === 0 && $(this).is(":visible")) { 
       var target=$("#popupDiv_id").hide(); 
      } 


    }); 
関連する問題