2014-01-05 10 views
5

Wenn möglich, würde ich dies in HTML/CSS/JS tun, aber wenn nicht, geht alles.Behobener Hintergrund unabhängig von der Browserposition (Bild zur Erklärung enthalten!)

Ich versuche, den Hintergrund für eine Webseite festzulegen, um eine Art absolute Position zu haben, die dort bleibt, unabhängig davon, wo das Browserfenster auf dem Bildschirm und unabhängig von der Größe ist.

Bild zur Verdeutlichung:

enter image description here

(Explaination für Bild: Red outline Browser-Fenster ist, das Licht blau-transparent Bild ist die Position und Größe, dass das Bild immer haben soll)

+0

Ich denke, Sie können nicht? Sie können die Bildschirmgröße und die Fenstergröße erhalten, aber ich denke nicht, dass Sie das Browserfenster relativ zum Bildschirm versetzen können, so dass Sie nicht wissen können, wo sich der Browser befindet. – adeneo

+0

@adeneo Ich denke, die meisten Browser geben Ihnen 'window.screenX' und' screenY'. – Pointy

+0

@ Pointy - Das ist ziemlich cool, ich wusste über diese, aber fand sie nie nützlich für irgendetwas, ich denke, das ist es? – adeneo

Antwort

4

Sie können die Bildschirmposition des Fensters mit window.screenX und window.screenY abrufen. Dann können Sie, dass mit einem einfachen Intervalltimer verfolgen:

setInterval(function() { 
    $('body').css('backgroundPosition', 
       -window.screenX + 'px ' + -window.screenY + 'px'); 
}, 50); 

(Das nutzt jQuery, aber es ist nicht notwendig.)

Here is a jsbin to demonstrate. Es ist ein wenig nervös, aber es wird wahrscheinlich aufheizen Client-Maschinen, wie es steht also würde ich den Timer nicht viel schneller laufen lassen. Das Problem ist, dass der Browser zwar über Änderungen der Fenstergröße (das "resize" -Ereignis) informiert, aber nicht über Ereignisse über das verschobene Fenster informiert.

Hier ist eine etwas effizientere Version ohne jQuery und mit einigen Überprüfungen, um zu vermeiden, den Stil zu berühren, wenn das Fenster nicht verschoben wurde. This doesn't seem to make Firefox or Chrome go too nuts läuft sogar alle 15 Millisekunden:

(function() { 
    var sx = window.screenX, sy = window.screenY; 

    setInterval(function() { 
    if (window.screenX !== sx || window.screenY !== sy) 
     document.body.style.backgroundPosition = 
     -(sx = window.screenX) + 'px ' + -(sy = window.screenY) + 'px'; 
    }, 15); 
})() 
+0

das ist ein netter Hack. Das Problem, das ich sehe, ist Jquery's CSS ist wirklich langsam. natives JavaScript wird es sehr verbessern. – Mohit

+0

@Prongs ja das kann so sein - ich bastle mit der jsbin und sehe. – Pointy

+2

@Prons [naja, es macht zumindest in Firefox keinen großen Unterschied.] (Http://jsbin.com/oDadOvo/2) – Pointy

Verwandte Themen