今回は、前回パート1 で作成したダイアログをドラッグ&ドロップで画面上を動くようにしたいと思います。
といっても難しいことはなく、JavaScriptのマウスイベントを利用してスタイルシートで指定している位置を動かすということを行っています。
まずは、ダイアログの作成でこれは前回のものを利用します。ダイアログを動かすためにスタイルのposition をabsolute にすることを忘れないようにしてください。この指定をしないと動きません。
ダイアログの部分 <div class="dlg" id="dlg" style="display: none;position:absolute;"> <div id="dlghead" > <div class="dlghead1"></div> <div class="dlghead2"></div> <div class="dlghead3"></div> <div class="dlghead4"><a onclick="close_dialog();return false;" href="#">×</a></div> </div> <div class="dlgbody"> <table style="margin:0px 5px;padding:2px 5px;"> <tr> <th style="text-align:left;">名前</th> <td><input type="text" size="30"></td> </tr> <tr> <th style="text-align:left;">パスワード</th> <td><input type="password" size="30"></td> </tr> </table> <input type="button" value="登録する" onclick="close_dialog();return false;" style="margin-left:5px"> </div> </div>
続いては、これを動かすためのJavaScriptを作成します。
JavaScriptの部分
var target;var offsetX;var offsetY; ①
function mouseDown( e ) ②
{
target = document.getElementById( 'dlg' );
target.style.cursor = 'move';
if( e )
{
offsetX = e.layerX;offsetY = e.layerY;
}
else if( event )
{
offsetX = event.offsetX;offsetY = event.offsetY;
}
return false;
}
function mouseMove( e ) ③
{
if( ! target ) return false;
var x;var y;
if( e )
{
x = e.pageX;y = e.pageY;
}
else if( event )
{
x = event.clientX + document.body.scrollLeft;
y = event.clientY + document.body.scrollTop;
}
x -= offsetX;y-=offsetY;
target.style.left = x; target.style.top = y;
return false;
}
function mouseUp( e ) ④
{
if( ! target ) return false;
target.style.cursor = 'auto';
target = null;
}
function init_page() ⑤
{
var dialogHead = document.getElementById( 'dlghead' );
dialogHead.onmousedown= mouseDown;
document.onmouseup= mouseUp;
document.onmousemove= mouseMove;
}
window.onload = init_page; ⑥
解説していきます。
① は、ダイアログとその位置を保存するための変数です。これがないと動かしているときの位置などがわからなくなってしまいます。
② は、ダイアログのタイトルバーの部分をクリックしたときに発生するイベントです。これ以降マウスボタンをあげるまで動かすことができるようになります。中身は、マウスカーソルの形を変更して動かせるようにユーザーにわかってもらえるようにして、クリックされたダイアログのオブジェクトを①で用意した変数に代入しています。同様にイベントの位置も変数に代入しています。
③ は、実際にダイアログを動かしている部分でスタイルの位置指定をマウスを動かした分量だけ変化させています。if( e )とelse if( event )は、ブラウザごとに位置の算出方法を変えているということになります。
④ は、マウスボタンを離してダイアログの移動を終了させるときに呼び出されます。中身は、マウスカーソルを通常の状態に戻して、覚えていたダイアログのオブジェクトをクリアしています。
⑤ は、この画面が表示されたときに呼び出される関数で、標準のイベントハンドラを定義している関数に置き換えています。最初の2つは、ダイアログのタイトル部分でマウスが押されたときのイベントを置き換えています。
⑥ は、実際にこの画面が表示されたときに⑤を呼び出すための関数になります。
前回と同様に1つにまとめたサンプルになります。
という感じで、スタイルシートとJavaScriptでウインドウを画面内に作成してそれを動かすということができるようになりました。
中身を知らないと難しい気がしますが実際にやってみるとそんなには難しいことは行っていません。あとは、いろいろ試してみてください。
最近のコメント