Button Control: Push Buttons

ボタンの生成の方法をいろいろと例示しているExample(YUIのExampleページへのリンクはこちら)。

YAHOOボタンも、

  • button.js
  • button.css

という、JavascriptライブラリとCSSの2本立てで形成されている。(実際には、element-beta-min.jsも読み込む)

初期画面は以下。

同じMarkupから生成されるといっても、最初の6つのボタンは、微妙に異なったmarkupから作成されている(これについては、添付するhtmlファイルを参照)。
以下は、ボタンを押したときの画面。YAHOOのExampleではloggerで書き出すようになっているが、alertでidを表示するようにした。全てのボタンで、同じようにidが取得できる。

以下にJavascriptを含むhtmlファイルの全文を示す。
styleがhtml内に記載されているが、これらは、ボタンを囲む枠とregendの設定、ボタンの画像と表示位置の調整のためのものである。
Javascriptで作成されるBottumは、指定したコンテナにappendされていく。

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/button/assets/skins/sam/button.css" />
<script type="text/javascript" src="scripts/yui/yahoo-dom-event/yahoo-dom-event.js"></script>
<script type="text/javascript" src="scripts/yui/element/element-beta-min.js"></script>
<script type="text/javascript" src="scripts/yui/button/button-min.js"></script>

<style type="text/css" id="defaultstyle">
#container {
	margin: 2px;
	padding: 3px;
	width: 400px;
	height: auto;
	border:1px dashed #999999;
}

#button-example-form fieldset, 
#button-example-form fieldset div {
        border: 2px groove #ccc;
        margin: .5em;
        padding: .5em;
}

/* 画像だけ表示する場合のスタイル */
.yui-button#pushbutton2 button,
.yui-button#pushbutton5 button, 
.yui-button#pushbutton8 button {
        background: url(http://developer.yahoo.com/yui/examples/button/assets/add.gif) 
        			center center no-repeat;
        text-indent: -4em;
        overflow: hidden;
        padding: 0 .75em;
        width: 2em;
        *margin-left: 4em;   /* IE only */
        *padding: 0 1.75em;  /* IE only */
}
    
/* ADD+画像と表示する場合のスタイル */
.yui-button#pushbutton3 button,
.yui-button#pushbutton6 button, 
.yui-button#pushbutton9 button {
        padding-left: 2em;
        background: url(http://developer.yahoo.com/yui/examples/button/assets/add.gif) 
        			10% 50% no-repeat;
}

</style>

<script type="text/javascript">
//モジュールパターンで実装する。
YAHOO.namespace("EGP");

YAHOO.EGP.PushBottum = function() {

	var onButtonClick = function (p_oEvent) {

        alert("あなたの押したボタンのidは: " + this.get("id"));
    
    }

	return{
    	init: function() {

	// ---- bottunをinputタグ内の要素から生成する。-----
		
		// 1.bottumタグから生成。「ADD」はタグで記入
		var oPushButton1 
        	= new YAHOO.widget.Button("pushbutton1");
    	// clickハンドラを仕掛ける。
        oPushButton1.on("click", onButtonClick);
        
		// 2.inputタグのtype=bottunから生成。
		// 画像は上のstyleで設定
		// clickのハンドラは、Buttomのコンフィグとして、コンストラクタで指定
		var oPushButton2 
        	= new YAHOO.widget.Button("pushbutton2", 
                	{ onclick: { fn: onButtonClick } }
        	);

		// 3.inputタグのtype=bottunから生成。「ADD」はタグ内。
		//   画像の位置は上のstyleで設定
        var oPushButton3 
        	= new YAHOO.widget.Button("pushbutton3", 
                	{ onclick: { fn: onButtonClick } }
        	);

   	// ---- bottunをinputタグ外の要素で生成する。-----

		// 3.spanタグのinputタグから生成。
        var oPushButton4 
        	= new YAHOO.widget.Button("pushbutton4");
    	// clickハンドラを仕掛ける。
        oPushButton4.on("click", onButtonClick);

		// 5.spanタグのbottumタグから生成。
		// 画像は上のstyleで設定
        var oPushButton5 
        	= new YAHOO.widget.Button("pushbutton5", 
                	{ onclick: { fn: onButtonClick } }
        	);

		// 6.spanタグのbottumタグから生成。
		//   画像の位置は上のstyleで設定
		var oPushButton6 
        	= new YAHOO.widget.Button("pushbutton6", 
                	{ onclick: { fn: onButtonClick } }
        	);        


       	// ---- bottunをmarkupなしで生成する。-----
        
		// 7.クリックイベントのハンドラを外で定義。
        var oPushButton7 
        	= new YAHOO.widget.Button(
                	{ label:"Add", 
                    	id:"pushbutton7", 
                    	container:"pushbuttonsfromjavascript" 
					}
			);
        oPushButton7.on("click", onButtonClick);

		// 8,9.クリックイベントのハンドラをBottunのコンストラクタで定義
		// 画像は上のstyleで設定
        var oPushButton8 
        	= new YAHOO.widget.Button(
                	{ label:"Add", 
                    	id:"pushbutton8", 
                    	container:"pushbuttonsfromjavascript", 
                    	onclick: 
                        	{ fn: onButtonClick } 
                	}
			);
		
		// 9.画像の位置は上のstyleで設定
        var oPushButton9 
        	= new YAHOO.widget.Button(
                	{ label:"Add", 
                    	id:"pushbutton9", 
                    	container:"pushbuttonsfromjavascript", 
                    	onclick: 
                        	{ fn: onButtonClick } 
                	}
		);

    	
		}
	};
}();

//DOMが完全にloadされたら、サンプルを初期化する。
YAHOO.util.Event.onDOMReady(
		//DomReadyイベントで発火するハンドラ
		YAHOO.EGP.PushBottum.init,
		//ハンドラに渡すオブジェクト(関数)
		YAHOO.EGP.PushBottum,
		//ハンドラは、上記のオブジェクトのスコープをもつ。   
		true
);

</script>
</HEAD>

<!-- class=" yui-skin-sam"の指定が必要 -->
<BODY class="yui-skin-sam">
<div id="container">
<p>
buttonの作り方のサンプルです。
</p>

<form id="button-example-form" name="button-example-form" method="post">

    <fieldset id="pushbuttons">
        <legend>Push Buttons</legend>
        <fieldset id="pushbuttonsfrommarkup">
            <legend>From Markup</legend>
            <div>
                <button type="button" id="pushbutton1" 
                			name="button1" value="Add">Add</button>
                <input type="button" id="pushbutton2" 
                			name="button2" value="Add">
                <input type="button" id="pushbutton3" 
                			name="button3" value="Add">
            </div>

            <div>
                <span id="pushbutton4" 
                			class="yui-button yui-push-button">
                	<span class="first-child">
                		<input type="button" name="button4" value="Add">
                	</span>
                </span>
                <span id="pushbutton5" class="yui-button yui-push-button">
                	<em class="first-child">
                		<button type="button" name="button5">Add</button>
                	</em>
                </span>
                <span id="pushbutton6" class="yui-button yui-push-button">
                	<strong class="first-child">
                		<button type="button" name="button6">Add</button>
                	</strong>
                </span>
            </div>
        </fieldset>
        
        <fieldset id="pushbuttonsfromjavascript">
            <legend>From JavaScript</legend>
        </fieldset>

    </fieldset>

</form>
</div>
</BODY>
</HTML>