2017-05-16 19 views
0

私は、レストランのアシスタントのように機能するウェブサイト(html/css/javascript)を作っています。つまり、ユーザーは食事を注文したり、食事をしたり、ウェイターに電話したりできます。これらの「メニュー」をすべて作成します。たとえば、「メニュー」ボタンをクリックするとメニューが表示され、メニューが表示されます。これについては、javascriptで表示属性を変更するだけですが、各ウィンドウと各ボタンについて、可視性と機能の量を処理するための新しい関数を作成する必要があります。これは今ではあまりにも多く、他の簡単な方法がありますこれらのメニューウィンドウを作る(別のページを作ることなく)?ありがとう。選択ウィンドウhtml

//open menu 1 
    document.getElementById('menu1').addEventListener('click', function(){ 
     changeDisplay('menubutton','menu1'); 
    }); 

    //close menu 1 
    document.getElementById('menu1').addEventListener('click', function(){ 
     changeDisplay('menu1','menubutton'); 
    }); 

    //open menu 2 
    document.getElementById('menu2').addEventListener('click', function(){ 
     changeDisplay('menubutton2','menu2'); 

    function changeDisplay(id1, id2) { 
     document.getElementById(id1).style.display = "flex"; 
     document.getElementById(id2).style.display = "none"; 
    }  
+0

あなたはより良いあなたの問題を明確にするために、あなたのコードからの短い抜粋を供給することができます。 – ilyaigpetrov

+1

これはかなり広いトピックです。それを絞り込んだり、質問の範囲を減らすことはできますか? – evolutionxbox

+0

簡単な答え:再利用可能なコードを分割して独自のライブラリ(例:utils)に保存し、UI全体をコンポーネント/モジュールに分割し、各コンポーネントファイル内にイベントハンドラを保持する必要があります。一般的なUIライブラリがコードを整理する方法(React、Polymer)から洞察を得てください。私はパターンが[PAC](https://en.wikipedia.org/wiki/Presentation%E2%80%93abstraction%E2%80%93control)と呼ばれると思います。 – ilyaigpetrov

答えて

1

function showItem(itemName){ 
    var items = document.getElementsByClassName('item'); 
    Array.prototype.forEach.call(items, function(item){ 
    item.style.display = "none"; 
    }); 
    document.getElementById(itemName).style.display = "block"; 
} 

実施例を。

const openers = Array.from(document.querySelectorAll('[data-openMenuNumber]')); 
 

 
openers.forEach(function(opener){ 
 
    opener.onclick =() => { 
 

 
    document.querySelector('.show').classList.remove('show'); 
 
    const num = opener.dataset.openmenunumber; 
 
    document.getElementById(`menu${num}`).classList.add('show'); 
 

 
    } 
 
});
.menu { 
 
    display: none; 
 
} 
 
.show { 
 
    display: initial; 
 
}
<div id="menu1" class="menu show"> 
 
    I'm menu1:<button data-openMenuNumber="2">open2</button> 
 
</div> 
 
<div id="menu2" class="menu"> 
 
    I'm menu2:<button data-openMenuNumber="1">open1</button> 
 
</div>

https://codepen.io/anon/pen/VbByvL

+0

これは役立ちますが、それでも表示はできますが、簡単です。 – user2220419

+0

場合によっては '.show'の代わりに' .off {display:none} 'クラスを使う方がいいでしょう。なぜなら' display'のためにカスタム値を必要とするかもしれないからです。わずかに多くのコード。必要があるかどうか尋ねるだけです。 – ilyaigpetrov