Diese Art von Verhalten ist in der Regel gewünscht, während Drag & Drop-Verhalten der Umsetzung auf einer HTML-Seite. Die folgende Lösung wurde mit IE 8.0.6, FireFox 3.6.6, Opera 10.53 und Safari 4 auf einem MS Windows XP-Computer getestet.
Zuerst eine kleine Funktion von Peter-Paul Koch; Cross-Browser-Event-Handler:
function addEvent(obj, evt, fn) {
if (obj.addEventListener) {
obj.addEventListener(evt, fn, false);
}
else if (obj.attachEvent) {
obj.attachEvent("on" + evt, fn);
}
}
Und dann diese Methode verwenden, um einen Ereignishandler auf das Dokument Objekte mouseout Ereignis anhängen:
addEvent(document, "mouseout", function(e) {
e = e ? e : window.event;
var from = e.relatedTarget || e.toElement;
if (!from || from.nodeName == "HTML") {
// stop your drag event here
// for now we can just use an alert
alert("left window");
}
});
Schließlich ist hier eine HTML-Seite mit dem Skript für das Debuggen eingebettet:
<html>
<head>
<script type="text/javascript">
function addEvent(obj, evt, fn) {
if (obj.addEventListener) {
obj.addEventListener(evt, fn, false);
}
else if (obj.attachEvent) {
obj.attachEvent("on" + evt, fn);
}
}
addEvent(window,"load",function(e) {
addEvent(document, "mouseout", function(e) {
e = e ? e : window.event;
var from = e.relatedTarget || e.toElement;
if (!from || from.nodeName == "HTML") {
// stop your drag event here
// for now we can just use an alert
alert("left window");
}
});
});
</script>
</head>
<body></body>
</html>
Haben Sie getestet, wie gut das funktioniert zusammen mit Elementen auf der Seite? Ich würde denken, dass Elemente, die ihre eigenen "Onmouseover/Out" -Ereignisse haben, die Blasenbildung möglicherweise aufheben und diese Funktionalität zerstören könnten. –
Ja, es funktioniert gut mit und ohne Elemente auf der Seite. – Ozzy
Ozzy, Dan versucht zu erklären, dass ein Element, das die Ereignisausbreitung stoppt, verhindert, dass das Ereignis das Dokument/Fenster erreicht, wodurch Ihre Lösung unwirksam wird. – James