Web覚書トップ > JavaScript サンプル > 『ドラッグできるメニューを作ってみる1』
説明

ページの中を自由に移動させることができるメニューを作ってみます。

実行例

ページの一番下のメニューは、ドラッグで移動できます(レイアウトが崩れるために最下に設置しています)。

コード
var bwType = null;
var trgObj = null;
var downFlag = false;
var overFlag = false;
var objPosX;
var objPosY;
var mousePosX;
var mousePosY;

function moveObj() {
	var posX = mousePosX - objPosX;
	var posY = mousePosY - objPosY;
	if ( bwType == 1 ) {
		trgObj.style.posLeft = posX;
		trgObj.style.posTop = posY;
	} else if ( bwType == 2 ) {
		trgObj.style.left = posX;
		trgObj.style.top = posY;
	} else {
		trgObj.moveTo( posX, posY );
	}
}

function mouseOver(e) {
	overFlag = true;
}

function mouseOut(e) {
	overFlag = false;
}

function mouseDown(e) {
	if ( overFlag ) {
		if ( bwType == 1 ) {
			objPosX = event.offsetX;
			objPosY = event.offsetY;
		} else {
			objPosX = e.layerX;
			objPosY = e.layerY;
		}
		downFlag = true;
	}
}

function mouseMove(e) {
	if ( downFlag ) {
		if ( bwType == 1 ) {
			mousePosX = document.body.scrollLeft + event.clientX;
			mousePosY = document.body.scrollTop + event.clientY;
		} else {
			mousePosX = e.pageX;
			mousePosY = e.pageY;
		}
		moveObj();
		return false;
	}
}

function mouseUp( e ) {
	if ( downFlag ) {
		downFlag = false;
	}
}

function bwCheck(){
	if ( document.all ) {
		return (1);
	} else if ( document.getElementById ) {
		return (2);
	} else if ( document.layers ) {
		return (3);
	} else {
		return (null);
	}
}

function formLoad( id ){
	bwType = bwCheck();
	switch ( bwType ) {
		case 1:
			trgObj = document.all( id );
			break;
		case 2:
			trgObj = document.getElementById( id );
			break;
		case 3:
			trgObj = document.layers[ id ];
			document.captureEvents(Event.MOUSEDOWN | Event.MOUSEMOVE | Event.MOUSEUP);
			break;
		default:
			return;
	}
	document.onmousedown = mouseDown;
	document.onmouseup = mouseUp;
	document.onmousemove = mouseMove;
	trgObj.onmouseover = mouseOver;
	trgObj.onmouseout = mouseOut;
}
<BODY onLoad="formLoad( 'menu' )">
<SPAN id="menu" style="position:absolute;">
<TABLE width="200" border>
<TR><TD style="background-color: #ffffff;" align=center>
<A href="./h_all_top.html">Web覚書トップ</A><BR>
<A href="./h_all_hist.html">更新履歴</A><BR>
<A href="./h_js_top.html">JavaScriptサンプル</A><BR>
</TD></TR>
</TABLE>
</SPAN>

解説&ステップアップ

ページの中で、マウスのダウン、アップ、移動、メニューの上の通過を取得します。
まず、メニューの上を通ったときに、通過フラグを立てて、通過フラグが立っているときにマウスがダウンすれば、メニューを掴んだと判断しています。そのときに掴みフラグを立てます。 さらに、掴みフラグが立っている時に、マウスが移動させれば、メニューも移動させます。

動作確認

IE4.0(win)、IE5.0(win)、IE5.5(win)、NN4.7(win)

© hyork@yahoo.co.jp (2001. 3.14)
Web覚書トップ
更新履歴
JavaScriptサンプル