JavaScriptなかなか手ごわいわ・・・・

作っているスクリプトで、mouseoutを使って、出した小窓を引っ込めるってロジックがあるんだけど、動きが微妙・・・


出てる状態


引っ込んだ後


具体的には、ボタンを押した後「すばやく小窓外にカーソルを移動させると小窓が閉じない」といったもの。ボタンを押した後、一拍置いた感じでフォーカスアウトすれば確実にとじるっぽいんだけど、早く動かすとイベントが起きないなんてことがあるのかな・・・?console.logも時々出力をサボっている気配があるのでデバック方法がいまいちピンときません(サボる条件がなんとなくはわかってきたけどまだ確証は無いです)。


まあ、自分で使う分には閉じなかったら、カーソル入れてゆっくり出すだけだから困らないけど。でも、ダサいよな・・・・



関連するコード

//boxは小窓のDOM
Util.observe(box, "mouseout", function (ev) {
	if (!self.opened || self.pinned) return;
	if (box != ev.target && box != ev.srcElement) return;
		self.closeLater();
});

//色々省略・・・・

var Util = {
	observe: function (elem, event, func, capture) {
		if (elem.attachEvent) {
			elem.attachEvent("on" + event, func);
		} else if (elem.addEventListener) {
			elem.addEventListener(event, func, !!capture);
		} else {
			elem["on" + event] = func;
		}
	},
	stopObserving: function (elem, event, func, capture) {
		if (elem.detachEvent) {
			elem.detachEvent("on" + event, func);
		} else if (elem.removeEventListener) {
			elem.removeEventListener(event, func, !!capture);
		} else {
			delete elem["on" + event];
		}
	}
};