Signatur
Beschreibung
window.moveBy() verschiebt ein Fenster relativ zu seiner aktuellen Position auf dem Bildschirm. Positive Werte schieben das Fenster nach rechts bzw. nach unten, negative nach links bzw. nach oben. Das Gegenstück für eine absolute Positionierung ist window.moveTo().
Praktisch nutzbar ist die Methode fast nur noch für Popup-Fenster, die das eigene Skript selbst mit window.open() geöffnet hat. Moderne Browser verbieten es, das Hauptfenster oder Tabs zu verschieben, damit Webseiten die Fenster der Nutzer nicht manipulieren können.
Die Methode liefert keine Rückmeldung, ob die Verschiebung geklappt hat. Wird der Aufruf blockiert, passiert einfach nichts – es gibt keinen Fehler. Ob sich das Fenster wirklich bewegt hat, lässt sich nur prüfen, indem man window.screenX und window.screenY vorher und nachher vergleicht.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $deltaX Pflicht | number | Anzahl der Pixel, um die das Fenster waagerecht verschoben wird. Positiv = nach rechts, negativ = nach links. | |
| $deltaY Pflicht | number | Anzahl der Pixel, um die das Fenster senkrecht verschoben wird. Positiv = nach unten, negativ = nach oben. |
Rückgabewert
undefined zurück. Ob die Verschiebung erfolgreich war, wird nicht gemeldet.Beispiele
Selbst geöffnetes Popup verschieben
// Popup öffnen (muss durch eine Nutzeraktion ausgelöst werden)
document.querySelector('#open').addEventListener('click', () => {
const popup = window.open('about:blank', 'hilfe', 'width=400,height=300,left=100,top=100');
if (!popup) {
console.warn('Popup wurde blockiert');
return;
}
// 50 px nach rechts und 20 px nach oben verschieben
popup.moveBy(50, -20);
});
Prüfen, ob die Verschiebung wirklich stattgefunden hat
const tryMoveBy = (win, dx, dy) => {
const before = { x: win.screenX, y: win.screenY };
win.moveBy(dx, dy);
const moved = win.screenX !== before.x || win.screenY !== before.y;
console.log(moved ? 'Fenster verschoben' : 'Verschiebung wurde blockiert');
return moved;
};
// Im Hauptfenster/Tab in modernen Browsern fast immer blockiert
tryMoveBy(window, 10, 10);
Popup schrittweise animiert verschieben
document.querySelector('#slide').addEventListener('click', () => {
const popup = window.open('about:blank', 'slide', 'width=300,height=200,left=0,top=100');
if (!popup) return;
let steps = 0;
const timer = setInterval(() => {
popup.moveBy(10, 0); // pro Schritt 10 px nach rechts
steps += 1;
if (steps >= 30 || popup.closed) clearInterval(timer);
}, 16);
});
// Wichtig · Fallstricke
- Stark eingeschränkt: Seit Firefox 7 und in allen aktuellen Chromium- und WebKit-Browsern lassen sich nur Fenster verschieben, die per
window.open()geöffnet wurden. Außerdem darf das Fenster nur einen Tab enthalten. Hauptfenster und Tabs bleiben unverändert. - Stilles Scheitern: Ein blockierter Aufruf wirft keinen Fehler. Das Ergebnis lässt sich nur über
screenX/screenYprüfen. - Mobile Browser ignorieren den Aufruf meist ganz, weil es dort keine frei verschiebbaren Fenster gibt.
- Popup-Blocker:
window.open()sollte nur direkt in einer Nutzeraktion (z. B. einemclick-Handler) aufgerufen werden, sonst liefert esnull. - Der Browser kann das Fenster innerhalb der sichtbaren Bildschirmfläche halten. Das tatsächliche Ziel kann also vom gewünschten abweichen.
- Gleicher Ursprung: Bei Popups mit fremdem Ursprung kann der Zugriff je nach Browser eingeschränkt sein. Aus Sicht der Nutzerfreundlichkeit sollte man Fenster grundsätzlich nur zurückhaltend verschieben.