sandra: News-Ticker "tickt nicht richtig"

Hallo!

Mal wieder ein kleines Problem:

habe einen Newsticker, dieser funktioniert in jedem Browser wie er soll, ausser, wie sollte man anders meinen, im InternetExplorer. Normalerweise bleibt er bei jedem Punkt stehen und scrollt dann weiter. Im IE scrollt er alle Punkte durch und bleibt erst dann stehen..

Hier der Code:

<script blabla>
var scroller;
scroller = new Scroller(document.getElementById('boundary'), document.getElementById('container'));
scroller.start();
</script>

<div style="position:relative; height: 130px; overflow:hidden; margin-top:5px;" id="boundary">
<div style="position:absolute;" id="container">

<div style="height: 150px" scrollDelay="4000">
Content 1
</div>

<div style="height: 150px" scrollDelay="4000">
Content 2
</div>

<div style="height: 150px" scrollDelay="4000">
Content 3
</div>

</div>
</div>

Die Funktionen der js-Datei:

var scrollers = new Array();
var scCount = 0;

function Scroller(bound, content) {
this.Id = ++scCount;
scrollers[this.Id] = this;
this.Bound = bound;
this.Content = content;
this.StartDelay = 500;
this.StepSize = 1;
this.StepDelay = 10;
this.Position = 500;
this.DelayPositions = new Array();
}

Scroller.prototype.start = function p_start() {
this.SecondContent = this.Content.cloneNode(true);
this.Bound.appendChild(this.SecondContent);
this.SecondContent.style.top = this.Content.offsetHeight;

window.setTimeout("_p_next(" + this.Id + ")", this.StartDelay);

for (var pos = 0; pos < this.Content.childNodes.length; pos++) {
var node = this.Content.childNodes[pos];

if (node.tagName) {
var delay = node.getAttribute("scrollDelay");
if (delay) {
this.DelayPositions[node.offsetTop] = delay;
}
}
}
}

Scroller.prototype.next = function p_start() {
if (this.Position == this.Content.offsetHeight) {
this.Position = 0;
var c = this.Content;
this.Content = this.SecondContent;
this.SecondContent = c;

this.SecondContent.style.clip = "rect(auto auto auto auto)";
this.Content.style.clip = "rect(auto auto auto auto)";
} else {
this.Position += this.StepSize;
}

var delay = this.StepDelay;
if (this.DelayPositions[this.Position]) {
delay = this.DelayPositions[this.Position];
}

if (this.Position > this.Content.offsetHeight) {
this.Position = this.Content.offsetHeight;
}

this.Content.style.clip = "rect(" + this.Position + " auto auto auto)";
this.Content.style.top = -this.Position;
this.SecondContent.style.top = this.Content.offsetHeight-this.Position;

window.setTimeout("_p_next(" + this.Id + ")", delay);
}

function _p_next(id) {
scrollers[id].next();
}

  1. Hi,

    habe einen Newsticker, dieser funktioniert in jedem Browser wie er soll, ausser, wie sollte man anders meinen, im InternetExplorer.

    nicht, dass es mich in diesem Fall wundern würde. Einen Vorwurf kannst Du ihm freilich nicht machen.

    <div style="height: 150px" scrollDelay="4000">

    ERROR: There is no attribute 'scrollDelay'.

    Invalider Code rächt sich früher oder später *immer*.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. <div style="height: 150px" scrollDelay="4000">

      ERROR: There is no attribute 'scrollDelay'.

      Invalider Code rächt sich früher oder später *immer*.

      Cheatah

      Wie meinen??

      1. hi,

        ERROR: There is no attribute 'scrollDelay'.

        Invalider Code rächt sich früher oder später *immer*.

        Wie meinen??

        So meinen, wie da stehen.

        Invalider Code ist solcher, der nicht den festgelegten Regeln entspricht.
        Ein Div-Element in HTML und XHTML kennt kein Attribut namens "scrollDelay" - das ist also ein Fehler.
        Also kann ein Browser dieses Attribut ignorieren, wenn er aus dem HTML-Code den Dokumentenbaum aufbaut - und folglich findet das Javascript dann den entsprechenden Wert auch nicht, den es dort auszulesen versucht, hat also auch keinen Grund zum Anhalten.

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
        1. hi,

          ERROR: There is no attribute 'scrollDelay'.

          Invalider Code rächt sich früher oder später *immer*.

          Wie meinen??

          So meinen, wie da stehen.

          Invalider Code ist solcher, der nicht den festgelegten Regeln entspricht.
          Ein Div-Element in HTML und XHTML kennt kein Attribut namens "scrollDelay" - das ist also ein Fehler.
          Also kann ein Browser dieses Attribut ignorieren, wenn er aus dem HTML-Code den Dokumentenbaum aufbaut - und folglich findet das Javascript dann den entsprechenden Wert auch nicht, den es dort auszulesen versucht, hat also auch keinen Grund zum Anhalten.

          gruß,
          wahsaga

          Hat jemand ne Idee, wie ich dies umgehen kann?

          1. Hi,

            hi,

            ERROR: There is no attribute 'scrollDelay'.

            bitte keine unsinnigen Fullqutes.

            Hat jemand ne Idee, wie ich dies umgehen kann?

            Denk' doch bitte nur einen kleinen Moment selbst nach. Du weisst nun, dass invalide Attribute ignoriert werden. Die logische Schlußfolgerung ist die Suche nach einem verwendbaren validem Attribut für das Element.

            freundliche Grüße
            Ingo

            1. Hi,

              Du weisst nun, dass invalide Attribute ignoriert werden.

              Ähm, "invalide" Attribute werden vom HTML-Parser natürlich ignoriert, nicht aber von JS.

              Vielleicht liegt' an der Groß/Kleinschreibung, vielleicht liegt der Fehler ganz woanders, aber daß es da ein prinzipielles Problem gibt (egal mit welchem Browser), widerspricht meiner Erfahrung vollkommen ...

              ... und auch meinem Verständnis der DOM-Verarbeitung, die prinzipiell auch genau so mit XML-Dateien ohne irgendeine DTD funktioniert, solange die Datei nur wohlgeformt ist.

              Gruß, Cybaer

              --
              Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
              1. Hi,

                Ähm, "invalide" Attribute werden vom HTML-Parser natürlich ignoriert, nicht aber von JS.

                wenn JavaScript allerdings auf die Ergebnisse des HTML-Parsers zurück greift ...

                ... und auch meinem Verständnis der DOM-Verarbeitung, die prinzipiell auch genau so mit XML-Dateien ohne irgendeine DTD funktioniert, solange die Datei nur wohlgeformt ist.

                Schöne, ideale Welt. In Geckos darfst Du weitgehend damit rechnen.

                Cheatah

                --
                X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
                X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
                X-Will-Answer-Email: No
                X-Please-Search-Archive-First: Absolutely Yes
                1. Hi,

                  Ähm, "invalide" Attribute werden vom HTML-Parser natürlich ignoriert, nicht aber von JS.
                  wenn JavaScript allerdings auf die Ergebnisse des HTML-Parsers zurück greift ...

                  ... habe ich trotzdem keine Probleme damit.

                  GfA-Basic-Befehlsliste verwendet das Attribut GID (für Group ID) - und funktioniert in allen mir bekannten Browsern.

                  Gruß, Cybaer

                  --
                  Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
            2. Denk' doch bitte nur einen kleinen Moment selbst nach. Du weisst nun, dass invalide Attribute ignoriert werden. Die logische Schlußfolgerung ist die Suche nach einem verwendbaren validem Attribut für das Element.

              freundliche Grüße
              Ingo

              Vielen Dank!

              Allerdings muss ich gestehen, dass meine Fachkenntisse nicht soweit reichen...

              Ich habe schon verstanden, dass ich ein gültiges Attribut verwenden muss, aber alle gültigen html-Attribute die ich kenne sind mit einer bestimmten Funktion ausgestattet: height, width, onmouseover etc oder versteh ich da immer noch was falsch..?

              Welches Attribut würde denn da in Frage kommen?

              Vielen Dank schonmal und sorry für die "grosse" Unwissenheit..

              Sandra

              1. Hi,

                Welches Attribut würde denn da in Frage kommen?

                such' Dir einbes aus: http://de.selfhtml.org/html/referenz/attribute.htm#universalattribute

                freundliche Grüße
                Ingo

                1. Hi,

                  Welches Attribut würde denn da in Frage kommen?
                  such' Dir einbes aus: http://de.selfhtml.org/html/referenz/attribute.htm#universalattribute

                  vergiss dabei nicht, die Bedeutung der Attribute _und deren gültige Werte_ zu beachten.

                  Cheatah

                  --
                  X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
                  X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
                  X-Will-Answer-Email: No
                  X-Please-Search-Archive-First: Absolutely Yes
                  1. vergiss dabei nicht, die Bedeutung der Attribute _und deren gültige Werte_ zu beachten.

                    Cheatah

                    Ich habs einfach mal mit id versucht, ist ja gültig, wird noch nicht verwendet, und darf auch den Wert enthalten, funktioniert genauso wie vorher...

                    1. Hello out there!

                      Ich habs einfach mal mit id versucht, ist ja gültig, wird noch nicht verwendet, und darf auch den Wert enthalten,

                      Welchen Wert? "4000"? Nein, das ist kein gülter 'id'-Wert.

                      See ya up the road,
                      Gunnar

                      --
                      “Remember, in the end, nobody wins unless everybody wins.” (Bruce Springsteen)
                      1. Hi,

                        Ich habs einfach mal mit id versucht, ist ja gültig, wird noch nicht verwendet, und darf auch den Wert enthalten,
                        Welchen Wert? "4000"? Nein, das ist kein gülter 'id'-Wert.

                        und selbst wenn er gültig wäre, dürfte er nur einmal verwendet werden. There are alternatives to fighting.

                        Cheatah

                        --
                        X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
                        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
                        X-Will-Answer-Email: No
                        X-Please-Search-Archive-First: Absolutely Yes
                        1. und selbst wenn er gültig wäre, dürfte er nur einmal verwendet werden. There are alternatives to fighting.

                          Cheatah

                          Ich hab auf der Seite keinen Ticker gesehen...

                          welches Attribut ist sinnvoll für diesen Zweck? Es gibt laut Liste fast keine Attribute, die überhaupt Zahlen beinhalten dürfen - und wenn dann legen diese gleichzeitig die Breite des Elements fest oder Ähnliches, was natürlich nicht passieren darf, sonst würds etwas kömisch ausschauen..

                          1. Hi,

                            Ich hab auf der Seite keinen Ticker gesehen...

                            nein, da hätte ich vermutlich auch was gegen unternommen ;-) Was Du aber hättest gesehen haben können, ist eine Methodik, HTML- und JavaScript-Objekte miteinander zu verbinden und ihnen dabei Werte zuzuordnen.

                            welches Attribut ist sinnvoll für diesen Zweck?

                            Ich habe mich für onkeydown entschieden, weil es - bei richtiger Verwendung und richtigem Umgang mit Event-Bubbling - äußerst unkritisch ist. Allerdings habe ich keine reinen Zahlen darin untergebracht, was natürlich weder im dortigen noch in Deinem Fall unbedingt nötig ist.

                            Cheatah

                            --
                            X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
                            X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
                            X-Will-Answer-Email: No
                            X-Please-Search-Archive-First: Absolutely Yes
                            1. Ich habe mich für onkeydown entschieden, weil es - bei richtiger Verwendung und richtigem Umgang mit Event-Bubbling - äußerst unkritisch ist. Allerdings habe ich keine reinen Zahlen darin untergebracht, was natürlich weder im dortigen noch in Deinem Fall unbedingt nötig ist.

                              Cheatah

                              Danke! Allerdings funktioniert onkeydown genausogut/schlecht wie id, gid oder scrollDelay.

                              Ausserdem gibt es eine Seite, die den gleichen Code benutzt wie ich, bei der es aber in allen Browsern funktioniert: coremedia.de

                              Ich habe keine Ahnung was der ausschlaggebende Punkt (bzw Quellcode-Schnipsel) ist.

                              1. Hi,

                                Danke! Allerdings funktioniert onkeydown [nicht]

                                nein, ein Event-Handler "funktioniert" nie. Die Frage ist, was Du gemacht hast, was das erwartete Resultat war und was statt dessen passiert ist.

                                Ausserdem gibt es eine Seite, die den gleichen Code benutzt wie ich, bei der es aber in allen Browsern funktioniert: coremedia.de

                                Hör mir bitte auf mit CoreMedia :-(

                                Ich habe keine Ahnung was der ausschlaggebende Punkt (bzw Quellcode-Schnipsel) ist.

                                Was hat Deine Analyse ergeben, woran ist sie gescheitert?

                                Cheatah

                                --
                                X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
                                X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
                                X-Will-Answer-Email: No
                                X-Please-Search-Archive-First: Absolutely Yes
                                1. Hi

                                  Was hat Deine Analyse ergeben, woran ist sie gescheitert?

                                  Cheatah

                                  hab scroller.start(); eine Ebene weiter oben reingeschrieben, hat dann funktioniert...

                                  is mir völlig unerklärlich.. aber egal, trotzdem vielen Dank für eure Hilfe!

                              2. Hi,

                                Ich habe keine Ahnung was der ausschlaggebende Punkt (bzw Quellcode-Schnipsel) ist.

                                Ich habe (um Verständnis bittend ;-)) keine Lust, mich durch denCode zu quälen, oder ihn auch nur zu testen. Aber coremedia.de verzichtet hier korrekterweise auf einen HTML-4-Doctype. Ich gehe mal davon aus, daß Du, wenn Du keinen HTML-4-Code schreibst, auch keinen HTML-4-Doctype verwendest?!

                                Gruß, Cybaer

                                --
                                Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!
                            2. Hello out there!

                              Ich hab auf der Seite keinen Ticker gesehen...
                              nein, da hätte ich vermutlich auch was gegen unternommen ;-)

                              :-)

                              @sandra: Warum willst du die Nutzer deiner Seiten eigentlich mit digitalem Ungeziefer nerven?

                              See ya up the road,
                              Gunnar

                              --
                              “Remember, in the end, nobody wins unless everybody wins.” (Bruce Springsteen)
                              1. @sandra: Warum willst du die Nutzer deiner Seiten eigentlich mit digitalem Ungeziefer nerven?

                                Ich hab auf das Design der Seite keinen Einfluss, sonst wäre ich schon längst fertig mit der Seite...

                                viele Grüße

                                Sandra

                          2. Hi,

                            welches Attribut ist sinnvoll für diesen Zweck? Es gibt laut Liste fast keine Attribute, die überhaupt Zahlen beinhalten dürfen - und wenn dann legen diese gleichzeitig die Breite des Elements fest oder Ähnliches

                            Du hast title übersehen. Verwende ich hier auch.

                            freundliche Grüße
                            Ingo

                            1. Du hast title übersehen. Verwende ich hier auch.

                              Vielen Dank, Ingo, allerdings funktioniert es auch mit title nicht. Das Problem muss woanders liegen.

  2. Hallo sandra,

    if (node.tagName) {
    var delay = node.getAttribute("scrollDelay");

    versuche hier mal: = node.scrollDelay;

    if (delay) {
    this.DelayPositions[node.offsetTop] = delay;
    }

    hier wäre ein else-Zweig nicht schlecht, falls scrollDelay fehlt oder nicht abgefragt werden kann.

    }
    }
    }

    Du musst aber das Ganze gründlich testen um zu prüfen, ob wahsaga und Cheatah oder Cybaer recht haben.

    Gruß, Jürgen

    1. Hi,

      var delay = node.getAttribute("scrollDelay");
      versuche hier mal: = node.scrollDelay;

      klar, das wird funktionieren. Allerdings nur, wenn dem JavaScript-Objekt(!) zuvor eine entsprechende Eigenschaft zugewiesen wurde.

      Cheatah

      --
      X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
      X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
      X-Will-Answer-Email: No
      X-Please-Search-Archive-First: Absolutely Yes
    2. Hallo sandra,

      if (node.tagName) {
      var delay = node.getAttribute("scrollDelay");

      versuche hier mal: = node.scrollDelay;

      Hi JürgenB!

      Habs ausprobiert, so läuft er auch im Firefox ununterbrochen durch..

      schluchts

  3. Hallo.

    Ich habe den Thread mal als Aufhänger benutzt, um meine etwas angestaubten JavaScript-Kenntnisse auf einen aktuelleren Stand zu bringen.

    Das Ergebnis: die 1001. JS-Ticker-Bibliothek, getestet in FF1.5 und IE7.

    Dokumentation gibt's derzeit nur in Form des Quelltextes, in der Beispielseite befinden sich ein paar Kommentare.

    Gruß
     Christoph

    PS: das Problem der numerischen Wertübergabe habe ich gelöst, indem die zu scrollenden Bereiche eine Klasse 'waitXXX' bekommen...