"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

Javascript: Div-Layer scrollen

-TB- 09.11.2008 - 19:25 4934 17
Posts

-TB-

OC Addicted
Registered: Feb 2004
Location: Wien
Posts: 1250
Hallo

Ich versuche gerade ein Script zum scrollen eines Divs für meinen Zweck anzupassen. Zuerst habe ich es mit diesem Script probiert. Hat soweit eigentlich auch gut geklappt; nur leider nicht mit Safari. Nach langer Suche bin ich dann auf folgendes Script gestoßen:

Code:
<script type="text/javascript">
<!--
 function init() {
  var myScrollDiv = document.getElementById("scrolldiv");
  myScrollDiv.style.overflow = "hidden";
  myScrollDiv.style.width = "329px";
  var myContainer1 = document.getElementById("container1");
  myContainer1.style.position = "relative";
  var bUp = document.createElement('button');
  bUp.appendChild(document.createTextNode("U"));
  bUp.style.width = "20px";
  bUp.style.height = "20px";
  bUp.style.position = "absolute";
  bUp.style.top = "0";
  bUp.style.left = "400px";
  bUp.style.padding = "0";
  bUp.onmouseover = up;
  bUp.onmouseout = stop;
  var bDown = document.createElement("BUTTON");
  bDown.appendChild(document.createTextNode("D"));
  bDown.style.width = "20px";
  bDown.style.height = "20px";
  bDown.style.position = "absolute";
  bDown.style.bottom = "0";
  bDown.style.left = "400px";
  bDown.style.padding = "0";
  bDown.onmouseover = down;
  bDown.onmouseout = stop;
  myContainer1.appendChild(bUp);
  myContainer1.appendChild(bDown);
 }

 function deinit() {
  var myScrollDiv = document.getElementById("scrolldiv");
  myScrollDiv.style.overflow = "";
  myScrollDiv.style.width = "";
  var myContainer1 = document.getElementById("container1");
  myContainer1.style.position = "";
  var myButtons = myContainer1.getElementsByTagName("BUTTON");
  while (myButtons.length > 0) {
   myContainer1.removeChild(myButtons[0]);
  }
 }

 function down() {
  var myScrollDiv = document.getElementById("scrolldiv");
  myScrollDiv.scrollTop += 1;
  myScrollDiv.scr = window.setTimeout("down()", 10);

  //Testausgabe von scrollTop
  var myMonitor = document.getElementById("monitor");
  myMonitor.innerHTML = myScrollDiv.scrollTop;
 }

 function up() {
  var myScrollDiv = document.getElementById("scrolldiv");
  myScrollDiv.scrollTop -= 1;
  myScrollDiv.scr = window.setTimeout("up()", 10);

  //Testausgabe von scrollTop
  var myMonitor = document.getElementById("monitor");
  myMonitor.innerHTML = myScrollDiv.scrollTop;
 }

 function stop() {
  var myScrollDiv = document.getElementById("scrolldiv");
  window.clearTimeout(myScrollDiv.scr);
 }

 window.onload = init;
//-->
</script>

Dieses funktioniert zwar unter Safari allerdings brauche ich statt den Standard-Buttons Grafiken zum scrollen. Da ich allerdings keine Ahnung von Javascript habe kann ich die einfach nicht austauschen. (Googlen hat mich leider auch nicht weitergebracht)

Wie kann ich nun statt den Buttons Grafiken einbinden?

tia

Freundliche Grüße Thomas
Bearbeitet von -TB- am 12.11.2008, 18:13

that

Moderator
Hoffnungsloser Optimist
Avatar
Registered: Mar 2000
Location: MeidLing
Posts: 11338
Aus Usability-Sicht ist das grober Unfug. Was spricht gegen ganz normale Scrollbars?

-TB-

OC Addicted
Registered: Feb 2004
Location: Wien
Posts: 1250
Ja das ist mir bewusst. Ich mach die Seite allerdings für einen Bekannten (Grafiker) und da steht das Design eindeutig im Vordergrund.

Wird jedoch auch nur auf einer einzigen Seite benötigt.

that

Moderator
Hoffnungsloser Optimist
Avatar
Registered: Mar 2000
Location: MeidLing
Posts: 11338
Zitat von -TB-
Ja das ist mir bewusst. Ich mach die Seite allerdings für einen Bekannten (Grafiker) und da steht das Design eindeutig im Vordergrund.

Wenn der Content eh unwichtig ist, lass ihn doch einfach gleich weg. :p

Im Ernst: Einen Scrollbar mit allen seinen Funktionen zu ersetzen, ist nicht trivial. Was ist mit dem Mausrad? Was passiert beim Drucken? Wie scrollt der User schneller oder langsamer?

Buttons zum "Umblättern" der DIVs sind auch keine Option? Die wären einfach zu implementieren und auch sinnvoll zu benutzen.

fatmike182

Agnotologe
Registered: Oct 2005
Location: VIE
Posts: 4223
würds auch lassen. Aber von der Funktionalität abgesehen: du kannst die Scrollbar teilweise mit CSS customizen (also den Balken verschwindenlassen usw)

-TB-

OC Addicted
Registered: Feb 2004
Location: Wien
Posts: 1250
@that: Von der Funktion würde das gepostete Script absolut genügen, es müssten nur die blöden Standard Buttons weg ;)

Nein Umblättern geht auch nicht, da kann man die Idee dahinter nicht erkennen. Das hab ich in meiner Verzweiflung auch schon probiert.

@fatmike: Die komplette Navigation der Webseite ist von der "Art" so aufgebaut, Scrollbars kommen leider auch nicht in Frage.

that

Moderator
Hoffnungsloser Optimist
Avatar
Registered: Mar 2000
Location: MeidLing
Posts: 11338
Zitat von -TB-
@that: Von der Funktion würde das gepostete Script absolut genügen, es müssten nur die blöden Standard Buttons weg ;)

Dann tu einfach den Code da weg:

Code:
var bUp = document.createElement('button');
bUp.appendChild(document.createTextNode("U"));
bUp.style.width = "20px";
bUp.style.height = "20px";
bUp.style.position = "absolute";
bUp.style.top = "0";
bUp.style.left = "400px";
bUp.style.padding = "0";

und ersetze ihn durch

Code:
var bUp = document.getElementById('idVonDeinerGrafikDieUpSeinSoll');

Zitat von -TB-
Nein Umblättern geht auch nicht, da kann man die Idee dahinter nicht erkennen. Das hab ich in meiner Verzweiflung auch schon probiert.

Man kann die Idee von "Umblättern" nicht erkennen? :confused:

Zitat von -TB-
@fatmike: Die komplette Navigation der Webseite ist von der "Art" so aufgebaut, Scrollbars kommen leider auch nicht in Frage.

Meiner persönlichen Meinung nach sollte man sowas nicht online stellen. Wer einen eigenen Scrollbar-Ersatz implementiert, hat das Web nicht verstanden.

Bei HTML beginnt man bei 100% Usability und Kompatibilität und arbeitet sich von dort nach unten.

Neo1010

.
Registered: May 2003
Location: -
Posts: 1212
Zitat
Meiner persönlichen Meinung nach sollte man sowas nicht online stellen. Wer einen eigenen Scrollbar-Ersatz implementiert, hat das Web nicht verstanden.

Bei HTML beginnt man bei 100% Usability und Kompatibilität und arbeitet sich von dort nach unten.

ACK

-TB-

OC Addicted
Registered: Feb 2004
Location: Wien
Posts: 1250
Danke erstmals, genau nach dem habe ich gesucht ;)

Zitat von that
Man kann die Idee von "Umblättern" nicht erkennen? :confused:

Nein, ich meinte die Idee die hinter dem "Div mit buttons scrollen" steckt. Wenn man da einfach Umblättert kann man den Text nicht vernünftig lesen (bzw noch schlechter).

Zitat von that
Meiner persönlichen Meinung nach sollte man sowas nicht online stellen. Wer einen eigenen Scrollbar-Ersatz implementiert, hat das Web nicht verstanden.

Bei HTML beginnt man bei 100% Usability und Kompatibilität und arbeitet sich von dort nach unten.

Mit der Art war nur "Klick auf Button dann..." gemeint, diese Scrollfunktion kommt nur ein einziges Mal vor. Das überall einzubauen wär natürlich absoluter Schwachsinn. Ich muss allerdings sagen, man kann sich das ganze nur schwer vorstellen. Ich empfinde das Scollen per Buttons bei dieser konkreten Verwendung nicht als sehr störend/einschränkend.


Edit:Also ich gebs langsam echt auf; geht mal wieder nicht in Safari. Die Konsole meldet einen Null Value Error bei 'bUp.onmouseover = up;'. Ich hab dafür mal versucht den Code etwas aufzuräumen. Brauche ich die Funktion 'DeInit' überhaupt?

Momentan siehts jedenfalls so aus:
Code:
<script type="text/javascript">
<!--
 function init() {
  var myScrollDiv = document.getElementById("scrolldiv");
  var myContainer1 = document.getElementById("container1");
  var bUp = document.getElementById("b_up");
  bUp.onmouseover = up;
  bUp.onmouseout = stop;
  var bDown = document.getElementById("b_down");
  bDown.onmouseover = down;
  bDown.onmouseout = stop;
  myContainer1.appendChild(bUp);
  myContainer1.appendChild(bDown);
 }

 function down() {
  var myScrollDiv = document.getElementById("scrolldiv");
  myScrollDiv.scrollTop += 1,5;
  myScrollDiv.scr = window.setTimeout("down()", 10);
 }

 function up() {
  var myScrollDiv = document.getElementById("scrolldiv");
  myScrollDiv.scrollTop -= 1,5;
  myScrollDiv.scr = window.setTimeout("up()", 10);
 }

 function stop() {
  var myScrollDiv = document.getElementById("scrolldiv");
  window.clearTimeout(myScrollDiv.scr);
 }

 window.onload = init;
//-->
</script>

Edit2: In FF gehts übrigens auch nicht, liefert genau denselben Fehler.
Bearbeitet von -TB- am 11.11.2008, 22:55

BuSHidO

ist süß
Registered: Jul 2001
Location: galaxie
Posts: 542
ich verwend für solche dinge meistens fertige libraries.

die von yahoo sind zum beispiel ganz net.

http://developer.yahoo.com/yui/

Ezekiel

OC Addicted
Avatar
Registered: Jun 2001
Location: na
Posts: 3329
versuchs mit bup.onmouseover = function() { up(); }

-TB-

OC Addicted
Registered: Feb 2004
Location: Wien
Posts: 1250
Hab nach langem herumexperimentieren eine funktionierende Lösung gefunden. Der Code sieht nun folgendermaßen aus:

Code:
<script type="text/javascript">
<!--
 function init() {
  var myScrollDiv = document.getElementById("scrolldiv");
  var myContainer1 = document.getElementById("container1");
 }

 function down() {
  var myScrollDiv = document.getElementById("scrolldiv");
  myScrollDiv.scrollTop += 1,5;
  myScrollDiv.scr = window.setTimeout("down()", 10);
 }

 function up() {
  var myScrollDiv = document.getElementById("scrolldiv");
  myScrollDiv.scrollTop -= 1,5;
  myScrollDiv.scr = window.setTimeout("up()", 10);
 }

 function stop() {
  var myScrollDiv = document.getElementById("scrolldiv");
  window.clearTimeout(myScrollDiv.scr);
 }

 window.onload = init;
//-->
</script>

Die Funktionen werden jetzt über Befehle im img tag aufgerufen:

Code:
<img name="b_up" src="img/b_up.jpg" alt="Up" onmouseover="up();" onmouseout="stop();">
<img name="b_down" src="img/b_down.jpg" alt="Down" onmouseover="down();" onmouseout="stop();">

Ich kann zwar nicht beurteilen ob das eine sehr "schlechte" Variante ist aber immerhin funktionierts im IE, FF und Safari :)

bensh

Addicted
Avatar
Registered: Jun 2003
Location: Wien
Posts: 371
Hi, ich hab das alte Skript hier ausgegraben weils so schön minimalistisch ist - allerdings buggeds bei mir ein bisschen wenn ich versuche UP/DOWN automatisch bis zum Ende scrollen zu lassen, STOP stoppt das ganze (sind 3 Img Buttons).

Der Text flackert beim Scrollen wenn er ganz oben/unten angelangt ist - kann mir jemand einen STOP einbauen oder so etwas in der Art ?

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
Brauchst eine abfrage ob schon ganz oben/unten angekommen und nur dann den scrollTop ändern wenn nicht

Rektal

Here to stay
Registered: Dec 2002
Location: Inside
Posts: 4452
Ist das
Code:
myScrollDiv.scrollTop += 1,5;
wirklich beabsichtigt? Ich mein damit das Fließkomma. In JS trennt man mit einem Punkt, nicht Komma. In Wahrheit zählt der code 5 hinzu; nicht 1.5;
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz