つゆだくのJavaScript・スタイルシ
ート
≪メニュー≫
トップページEvent Utilityとは、イベントリスナーをつかってイベント処理を行うためのインターフェイスです。これを使うことによって完全にデザインとonClickなどのイベントハンドラーをソース上から分離することができます。また、クロスブラウザー対応(ブラウザ毎の仕様の違いを吸収)していますので便利です。
詳しくはhttp://developer.yahoo.com/yui/event/のオリジナルを読まれるのがよいと思います。
必要なのは2つのファイルです。もちろんインストールは済ませておく必要があります。
<script type="text/javascript" src="your install path/yahoo-min.js"></script> <script type="text/javascript" src="your install path/event-min.js"></script>
使いそうなMethodのサンプルを幾つか試してみます。
| addListener | イベントリスナーを追加する |
| purgeElement | イベントリスナーの削除 |
| getRelatedTarget | イベントがmouseoutの時には移動先のElement、mouseoverの時には移動元のElementを返す |
| getTarget | イベントがが発生したElementを返す |
| getTime | イベントが発生した時刻を返す |
| getXY | イベントが発生した座標を返す。getPageX, getPageY が配列で返る。 |
<boolean> addListener (<Object> el, <String> sType, <Function> fn, <Object> oScope, <boolean> bOverride)
trueを指定するとoScopeにスコープが移ります。
function myAlert1(event, date) {
alert( date.toLocaleString() );
}
function myAlert2(event) {
alert( this.toLocaleString() );
}
/* Element でも */
YAHOO.util.Event.addListener(document.getElementById('id1'), "click", myAlert1, new Date());
/* id でも */
YAHOO.util.Event.addListener("id2", "click", myAlert2, new Date(), true);
...
...
<a href="javascript:;" id="id1">myAlert1が実行されます。</a>
<a href="javascript:;" id="id2">myAlert2が実行されます。</a>
bOverride の意味
<void> purgeElement (<HTMLElement> el, <boolean> recurse, <string> sType)
addListenerと違ってidを指定することはできない様子trueを指定すると、再帰的に子ノードを確認しにいく。
function rmEvent3(event){
var el3 = document.getElementById("id3");
YAHOO.util.Event.purgeElement(el3, false);
alert("recurseがfalseなので削除できない");
}
function rmEvent4(event){
var el4 = document.getElementById("id4");
YAHOO.util.Event.purgeElement(el4, true, "click");
alert("recurseがtrueなので削除できる");
}
YAHOO.util.Event.addListener("id3_child", "click", rmEvent3);
YAHOO.util.Event.addListener("id4_child", "click", rmEvent4);
...
...
<div id="id3"><a href="javascript:;" id="id3_child">何度クリックしてもalertがでる</a></div>
<div id="id4"><a href="javascript:;" id="id4_child">1度クリックすればalertがでなくなる</a></div>
HTMLElement getRelatedTarget (<Event> ev)
var fromtoElm = YAHOO.util.Event.getRelatedTarget(event);
if(event.type=='mouseover') {
alert( fromtoElm.id + "からマウスが入ってきました" );
}
if(event.type=='mouseout') {
alert( fromtoElm.id + "にマウスが出ていきました" );
}
HTMLElement getTarget (<Event> ev, <boolean> resolveTextNode)
var targetElm = YAHOO.util.Event.getTarget(event); alert( targetElm + "タグで" + event.type + "が発生しました" );
Date getTime (<Event> ev)
var time = YAHOO.util.Event.getTime(event); alert( new Date(time).toLocaleString() + "にイベントが発生しました");
int[] getXY (<Event> ev)
var xy = YAHOO.util.Event.getXY(event); alert( "座標 [" + xy[0] + ", " + xy[1] + "] でイベントが発生しました" );