index » ラボ&備忘録 » Javascript » ボーダーのついたレイヤでe.layerXの挙動 このエントリーを含むはてなブックマーク

ボーダーのついたレイヤでe.layerXの挙動

2007.03.06

コード表示用のJavascriptを作っているところで躓いたわ

ページ上のあるレイヤーでオンマウスオーバーした時にどこで発生したかを知りたいわけである。
そのレイヤー自体にスタイルシートでボーダーをつけている場合、そのボーダーに乗った時点でイベントが発生する為、スクロール分が加算されない。
ボーダーの幅が1pxだったりする場合、素早くマウスを動かすとボーダーに乗った時点で判定されずにスクロール分が含まれていたり、ゆっくりマウスを動かすとボーダーで判定されて含まれて居なかったりムカツク挙動である。

さらに、スクロールバー領域で判定された場合スクロールバーの座標になるとか。

もうだめぽ…。

時間ないというのに、ちよ父AAのトレースとかし出すし…もうだめぽ。

さてどうしよう。

このためにボーダーの付いていない判定用レイヤにネストさせるのは嫌なので、他の対策を考えたいと思います。

この報告は追って。

テスト用コード置いておきます。

.viewcode
{
	margin: 20px;
	padding: 10px;
	width: 200px;
	height: 150px;
	overflow: auto;
	border: 5px solid #e7e7e7;
	background: #fff;
	white-space: pre;
	}
<textarea id="trace" rows="15" cols="60"></textarea>
<pre class="viewcode" onmouseover="eventTest(event, this);">
tesutotesutotesutotesutotesutotesutotesutotesutotesutotesuto
</pre>
function eventTest(e, obj)
{
	trace(e.layerX);
}
function trace(str)
{
	document.getElementById('trace').value += str+"\n";
}