Container Family: Using the Overlay Manager to Manage Multiple Panels
このExampleでは、YAHOO.widget.OverlayManagerを紹介している。
以前のサンプル「Container Family: Simple Panel Example」で、2つ開けたPanelのz-indexが制御できないようだと書いた(focusを当てたPanelが最上位に来ない)。
こういった基本的な操作を、OverlayManagerを使うことで行うことができるようになる。
OverlayManagerの利用方法は簡単(添付のHTMLを参照)で、OverlayManagerをインスタンス化し、それにOverlayインスタンスをregisterメソッドで、登録すればよい。
ここで、Overlayインスタンスと書いたが、その子孫にあたる Panel, Dialog, SimpleDialogやTooltipもregisterすることができる。
OverlayManagerのAPIドキュメント(リンクはこちら)をみると、特定のOverlayインスタンスにfocusを当てたり、全てのPanelを隠したりといったことが可能となっている。
ここでは、Markupから3つのPanelを生成し、それらをいっせいに表示する、いっせいに隠す、いっせいにfocusを外す(blurする)といったサンプルが示されている。
下は、show allボタンでいっせいに表示したときの画面。きれいに整列することがわかる。
この3つのパネルは、全て一つのOverlayManagerに登録されているので、クリックしたパネルにフォーカスがあたり、z-indexが調整されて、画面の最上位にくる。
以下、Javascriptを含むHTMLファイルを示す。
<HTML> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=UTF-8"> <TITLE>Ajax_Sampling</TITLE> <style type="text/css"> body { margin:0; padding:0; } </style> <link rel="stylesheet" type="text/css" href="scripts/yui/fonts/fonts-min.css" /> <link rel="stylesheet" type="text/css" href="scripts/yui/container/assets/skins/sam/container.css" /> <script type="text/javascript" src="scripts/yui/yahoo-dom-event/yahoo-dom-event.js"></script> <script type="text/javascript" src="scripts/yui/dragdrop/dragdrop-min.js"></script> <script type="text/javascript" src="scripts/yui/container/container-min.js"></script> <style type="text/css" id="defaultstyle"> #container { margin: 2px; padding: 3px; width: 400px; height: auto; border:1px dashed #999999; } .yui-skin-sam .yui-panel .hd { background: #F2F2F2; } .yui-skin-sam .yui-panel-container.focused .yui-panel .hd { background: url(scripts/assets/skins/sam/sprite.png) repeat-x 0 -200px; } </style> <script type="text/javascript"> YAHOO.namespace("EGP"); YAHOO.EGP.OverlayManager = function() { var Event = YAHOO.util.Event; var panel1,panel2,panel3; var manager; return{ init: function() { panel1 = new YAHOO.widget.Panel("panel1", { xy:[150,100], visible:false, width:"300px" } ); panel1.render(); // Build panel2 based on markup panel2 = new YAHOO.widget.Panel("panel2", { xy:[250,200], visible:false, width:"300px" } ); panel2.render(); panel3 = new YAHOO.widget.Panel("panel3", { xy:[350,300], visible:false, width:"300px" } ); panel3.render(); // OverlayManagerのインスタンス化 manager = new YAHOO.widget.OverlayManager(); manager.register([panel1,panel2,panel3]); // panel1にlistnerを仕掛ける。 Event.addListener("show1", "click", panel1.show, panel1, true); Event.addListener("hide1", "click", panel1.hide, panel1, true); Event.addListener("focus1", "click", panel1.focus, panel1, true); // panel2にlistnerを仕掛ける。 Event.addListener("show2", "click", panel2.show, panel2, true); Event.addListener("hide2", "click", panel2.hide, panel2, true); Event.addListener("focus2", "click", panel2.focus, panel2, true); // panel3にlistnerを仕掛ける。 Event.addListener("show3", "click", panel3.show, panel3, true); Event.addListener("hide3", "click", panel3.hide, panel3, true); Event.addListener("focus3", "click", panel3.focus, panel3, true); // OverlayManagerを通して、全てのpanelにlistnerを仕掛ける。 Event.addListener("showAll", "click", manager.showAll, manager, true); Event.addListener("hideAll", "click", manager.hideAll, manager, true); Event.addListener("blurAll", "click", manager.blurAll, manager, true); } }; }(); YAHOO.util.Event.onDOMReady( //DomReadyイベントで発火するハンドラ YAHOO.EGP.OverlayManager.init, //ハンドラに渡すオブジェクト(関数) YAHOO.EGP.OverlayManager, //ハンドラは、上記のオブジェクトのスコープをもつ。 true ); </script> </HEAD> <BODY class="yui-skin-sam"> <div id="container"> <p> YAHOO.widget.OverlayManagerのサンプルです。 </p> <div> panel1: <button id="show1">Show</button> <button id="hide1">Hide</button> <button id="focus1">Focus</button> </div> <div> panel2: <button id="show2">Show</button> <button id="hide2">Hide</button> <button id="focus2">Focus</button> </div> <div> panel3: <button id="show3">Show</button> <button id="hide3">Hide</button> <button id="focus3">Focus</button> </div> <div> All Panels: <button id="showAll">Show All</button> <button id="hideAll">Hide All</button> <button id="blurAll">Blur All</button> </div> <div id="panel1" style="visibility:hidden"> <div class="hd">Panel #1 from Markup</div> <div class="bd">This is a Panel that was marked up in the document.</div> <div class="ft">End of Panel #1</div> </div> <div id="panel2" style="visibility:hidden"> <div class="hd">Panel #2 from Markup</div> <div class="bd">This is a Panel that was marked up in the document.</div> <div class="ft">End of Panel #2</div> </div> <div id="panel3" style="visibility:hidden"> <div class="hd">Panel #3 from Markup</div> <div class="bd">This is a Panel that was marked up in the document.</div> <div class="ft">End of Panel #3</div> </div> </div> </BODY> </HTML>