Menu Family: Grouped Menu Items With Titles From JavaScript
Menuシリーズのこの繰り返し作業も随分と飽きてきてしまった。
辛抱辛抱。
このサンプルは、タイトルにあるとおり、YAHOO.widget.Menuのメソッドを使って、Title付きのGroupingされたMenuをつくるというもの(Exampleのページへのリンクはこちら)。
コードは「Menu Family: Grouped Menu Items Using JavaScript」のときと殆ど変わらないが、Titleを設定する際に、
setItemGroupTitle(arg1, arg2)
というメソッドを使用する。ここで、第1引数(arg1=string)がタイトル、第2引数(arg2=integer>=0)が、Menu生成時にコンストラクタに指定した、オブジェクトリテラルの配列のindexとなる。
サンプルの初期画面は以下。
「メニューを表示」を押すと、以下のようなメニューがでる。これは、Markupから生成したときと同じである。
以下に、Javascriptを含むHTMLの全体を示す。
scriptのコードは、いつも通りにmodule patternに書き直した。
<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/menu/assets/skins/sam/menu.css" /> <script type="text/javascript" src="scripts/yui/yahoo-dom-event/yahoo-dom-event.js"></script> <script type="text/javascript" src="scripts/yui/container/container_core-min.js"></script> <script type="text/javascript" src="scripts/yui/menu/menu-min.js"></script> <style type="text/css" id="defaultstyle"> #container { margin: 2px; padding: 3px; width: 400px; height: auto; border:1px dashed #999999; } </style> <script type="text/javascript"> // //モジュールパターンで実装する。 // YAHOO.namespace("EGP"); YAHOO.EGP.ScriptMenu = function() { var oMenu; return{ init: function() { // Muneのインスタンス生成 // コンストラクタの第1引数は、menuを構成するdivのid(この場合ない)、 // 第2引数は、属性を表すオブジェクトリテラル // 属性はMenuのAPIドキュメント // http://developer.yahoo.com/yui/docs/YAHOO.widget.Menu.html oMenu = new YAHOO.widget.Menu("basicmenu", { xy: [300,65] } ); oMenu.addItems([ // オブジェクトリテラルを、その配列にすれば、Groupingされたメニューを // 作成できる。 [ { text: "Yahoo! Mail", url: "http://mail.yahoo.com" }, { text: "Yahoo! Address Book", url: "http://addressbook.yahoo.com" }, { text: "Yahoo! Calendar", url: "http://calendar.yahoo.com" }, { text: "Yahoo! Notepad", url: "http://notepad.yahoo.com" } ], [ { text: "Yahoo! Local", url: "http://local.yahoo.com" }, { text: "Yahoo! Maps", url: "http://maps.yahoo.com" }, { text: "Yahoo! Travel", url: "http://travel.yahoo.com" }, { text: "Yahoo! Shopping", url: "http://shopping.yahoo.com" } ], [ { text: "Yahoo! Messenger", url: "http://messenger.yahoo.com" }, { text: "Yahoo! 360", url: "http://360.yahoo.com" }, { text: "Yahoo! Groups", url: "http://groups.yahoo.com" }, { text: "Flickr Photo Sharing", url: "http://www.flickr.com" } ], [ { text: "メニューを閉じる", url: "" }, ] ]); // タイトルの設定 // 第1引数はTitle、第2引数は配列にしたオブジェクトリテラルのindex // index=3(メニューを閉じる)にはつけない。 oMenu.setItemGroupTitle("Yahoo! PIM", 0); oMenu.setItemGroupTitle("Yahoo! Search", 1); oMenu.setItemGroupTitle("Yahoo! Communications", 2); // 引数はrenderingしたメニューのターゲット oMenu.render("rendertarget"); // Bottunのクリックイベントにメニューの表示(show)を仕掛ける。 // EventのAPIはhttp://developer.yahoo.com/yui/docs/YAHOO.util.Event.html // 第4引数は、ハンドラーへの引数、第5引数は実行scope. YAHOO.util.Event.addListener( "menubutton", "click", oMenu.show, null, oMenu ); } }; }(); //DOMが完全にloadされたら、サンプルを初期化する。 YAHOO.util.Event.onDOMReady( //DomReadyイベントで発火するハンドラ YAHOO.EGP.ScriptMenu.init, //ハンドラに渡すオブジェクト(関数) YAHOO.EGP.ScriptMenu, //ハンドラは、上記のオブジェクトのスコープをもつ。 true ); </script> </HEAD> <!-- class=" yui-skin-sam"の指定が必要 --> <BODY class="yui-skin-sam"> <div id="container"> <p> Scriptで、TitleつきのGroupingされたMenuを作成します。<br/> メニュー外でのクリックにより、メニューが消えます。<br> また、メニューの「メニュ−を閉じる」にはurlを記述していません。これを選択してもメニューが消えます。 </p> <button id="menubutton" type="button">Menuを表示</button> <div id="rendertarget"></div> </div> </BODY> </HTML>