Für meine Webseite mit den Registry Keys brauchte ich ein DIV mit dem Scrollbalken auf der linken Seite, da durch die Fenster der Scrollbalken rechts verdeckt wird. Bei der ersten Version nutzte ich das Attrubt 'direction:rtl'. Aber nicht alle Browser wechseln den Scrollbalken auf die linke Seite. Meine Lösung nutzt zwei DIVs, deren Scrollfunktionen per Javascript synchronisiert werden. Vom linken DIV ist nur der Scrollbalken sichtbar und beim rechten DIV wird der senkrechte Scrollbalken ausgeschaltet. Ein übergeordnetes DIV ist für einen Rahmen vorgesehen.
Info:Im Frame links ist die Beispielseite scroll.html eingebunden. Download:Die Beispielseite scroll.html aufrufen und über Rechte-Maus-Menü 'Quelltext anzeigen' den Quelltext mit 'speichern unter' abspeichern. |
<div id="container" style="position:absolute; left:48px; top:93px; width:50px; height:50px; z-index:1;"> <div id="scrollbar" onscroll="sync(false); return true;" style="width:18px; position:absolute; z-index:1;"></div> <div id="content" onscroll="sync(false);return true;" style="width:400px; height:200px; position:absolute; z-index:1;"> <p>Inhalt des DIV</p> </div> </div>
<style type="text/css" media="screen"> div#container {border: 2px solid blue;} div#scrollbar { overflow-x:auto; overflow-y:scroll; white-space:nowrap; background-color:transparent; } div#scrollbar p { visibility:hidden;} div#content { background-color:#CCCCFF; overflow-x:auto; overflow-y:hidden; white-space:nowrap;} </style>
Das Container DIV sorgt nur für den Rahmen. Das Scrollbar DIV ist der Scrollbar auf der linken Seite und das Content DIV ist der ursprüngliche Inhalt. Die folgende Javascript-Funktion synchronisiert das Scrollen.
function sync(refresh) { var div1 = document.getElementById('scrollbar'); var div2 = document.getElementById('content'); var container = document.getElementById('container'); container.style.top = div1.style.top; container.style.left = div1.style.left; var rb = 2; var w1 = 0; //Rahmenbreite var w2 = w1 + w1; //doppelte Rahmenbreite if (refresh) { div1.innerHTML = div2.innerHTML; div1.style.width = '17px'; if (navigator.userAgent.indexOf("Opera") != -1) w1 = rb; //Opera Rahmenbreite if (navigator.userAgent.indexOf("MSIE") != -1) { // ie div1.style.width = '18px'; // bei exakt 17 funktionieren die Scrollpfeile nicht w2 = 0; //doppelte Rahmenbreite } // der richtige Wert ist 17px, aber dann funktioniert das Scrollen mit den Pfeilen nicht mehr if (navigator.userAgent.indexOf("Safari") != -1) div1.style.width = '15px'; //safari div2.style.top = div1.style.top; div2.style.left = (div1.offsetLeft + div1.offsetWidth - w1) + 'px'; div1.style.height = div2.offsetHeight + 'px'; if (navigator.userAgent.indexOf("Firefox") != -1) { if (div2.clientHeight != div2.offsetHeight) div1.style.height = (div2.offsetHeight - div1.offsetWidth) + 'px'; // ff } } // bei IE8 muss die Border Breite noch doppelt addiert werden container.style.width = (div1.offsetWidth + div2.offsetWidth - w2) + 'px'; container.style.height = (div2.offsetHeight) + 'px';; div2.scrollTop = div1.scrollTop; }
Die Funktion muss nach dem Laden einmal aufgerufen werden, 'sync(true)'. Mit dem Parameter 'true' wird der Inhalt vom Content DIV in das Scrollbar DIV kopiert. Wenn der sichtbare Inhalt per Javascript verändert wird, ist in den entsprechenden Funktionen ebenfalls die Funktion mit sync(true) aufzurufen (so wie bei RegKeys).