hihi: fadescript funzt net!

hi!

habe wie schon weiter unten im forum erwähnt, ein fadescript geschrieben.

hier der quellcode:

<script type="text/javascript">
<!--

function deHEX(colorFROM, colorTO) {

var redFROM = colorFROM.substr(1, 2);
    var greenFROM = colorFROM.substr(3, 4);
    var blueFROM = colorFROM.substr(5, 6);

var redTO = colorTO.substr(1, 2);
    var greenTO = colorTO.substr(3, 4);
    var blueTO = colorTO.substr(5, 6);

colorX = new Array(16);

for(var i = 0; i < 10; i++)

colorX[i] = i;

colorX[10] = "A";
    colorX[11] = "B";
    colorX[12] = "C";
    colorX[13] = "D";
    colorX[14] = "E";
    colorX[15] = "F";

}

function HEX(red, green, blue) {

if((red < 0) && (green < 0) && (blue < 0)) {

return "00";

}

if((red > 255) && (green < 0) && (blue < 0)) {

return "FF";

}

}

function fade(colorFROM, colorTO, step) {

for(var i = 0; i < step; i++) {

red = Math.floor(redFROM * ((step - i) / step) + redTO * (i / step));
        green = Math.floor(greenFROM * ((step - i) / step) + greenTO * (i / step));
        blue = Math.floor(blueFROM * ((step - i) / step) + blueTO * (i / step));

}

}

function setColor() {

document.bgColor = "#" + red + green + blue;

}

fade('#FFFFFF', '#000000', 65);

//-->
</script>

falls einer probleme mit dem code haben sollte, in function fade() sind startfarbe, endfarbe und abstufung eingegeben (werte). jetzt soll der hexdezimal-code in normale zahlen (multiplikation) umgewandelt werden (function deHEX). dann wird gefadet und am ende sollen die zahlen wieder in einen hexcode gefasst werden (function HEX).

hoffe ihr könnt mir helfen...

habe es mit normalen dezimalzahlen (rgb wert) 1a hinbekommen, aber ich möchte mich ja weiterbilden und möchte gerne mit hexzahlen arbeiten.

warte auf eure hilfe ;)

mfg hihi

  1. Hi,

    habe wie schon weiter unten im forum erwähnt, ein fadescript geschrieben.

    hier der quellcode:

    Das sieht schon besser aus!

    <script type="text/javascript">
    <!--

    function deHEX(colorFROM, colorTO) {

    var redFROM = colorFROM.substr(1, 2);
        var greenFROM = colorFROM.substr(3, 4);
        var blueFROM = colorFROM.substr(5, 6);

    var redTO = colorTO.substr(1, 2);
        var greenTO = colorTO.substr(3, 4);
        var blueTO = colorTO.substr(5, 6);

    colorX = new Array(16);

    for(var i = 0; i < 10; i++)

    colorX[i] = i;

    colorX[10] = "A";
        colorX[11] = "B";
        colorX[12] = "C";
        colorX[13] = "D";
        colorX[14] = "E";
        colorX[15] = "F";

    }

    function HEX(red, green, blue) {

    if((red < 0) && (green < 0) && (blue < 0)) {

    return "00";

    }

    if((red > 255) && (green < 0) && (blue < 0)) {

    return "FF";

    }

    }

    function fade(colorFROM, colorTO, step) {

    for(var i = 0; i < step; i++) {

    red = Math.floor(redFROM * ((step - i) / step) + redTO * (i / step));
            green = Math.floor(greenFROM * ((step - i) / step) + greenTO * (i / step));
            blue = Math.floor(blueFROM * ((step - i) / step) + blueTO * (i / step));

    }

    }

    function setColor() {

    document.bgColor = "#" + red + green + blue;

    }

    fade('#FFFFFF', '#000000', 65);

    //-->
    </script>

    falls einer probleme mit dem code haben sollte, in function fade() sind startfarbe, endfarbe und abstufung eingegeben (werte). jetzt soll der hexdezimal-code in normale zahlen (multiplikation) umgewandelt werden (function deHEX). dann wird gefadet und am ende sollen die zahlen wieder in einen hexcode gefasst werden (function HEX).

    hoffe ihr könnt mir helfen...

    habe es mit normalen dezimalzahlen (rgb wert) 1a hinbekommen, aber ich möchte mich ja weiterbilden und möchte gerne mit hexzahlen arbeiten.

    warte auf eure hilfe ;)

    Das Problem bei deinem Code ist, dass beispielsweise "FF" < 0 eine Fehlermeldung ergibt. Ich kann dir einen Denkanstoss geben:

    hexZiffer = new Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F");

    Dieses Array enthält alle "Ziffern", die eine Hexadezimalzahl enthalten kann. Die obige Schreibweise ist äquivalent der

    hexZiffer[0] = "0";
    hexZiffer[1] = "1";
    ...
    hexZiffer[15] = "F";

    Auffällig ist, dass der Index genau den Dezimalwert der Ziffer darstellt, also F = 15.

    Jetzt kannst du ein einer for-Schleife jeden "Buchstaben", beispielsweise deines Wertes druchlaufen, und diese durch Vergleich mit jedem Glied dess Arrays hexZahlen in dezimalschreibweise umschreiben.
    Wenn du die anschliessend die Zahlen multiplizierst, vergiss die Indizies nicht. F5 = 15*16^1 + 5*16^0 ... also ein Polynom mit Basis 16.

    Ich hoffe, dass mein Denkanstoss dir weiterhilft.

    MfG Dmitri

    1. mhhh ja, weitergeholfen hat es mir, aber so richtig umsetzen kann ich's nich! ;-)

      bin auch noch eher ein newbie wie du siehst.

      also es wäre schön, wenn du mir deinen teil mal in javascript übersetzt oder zumindest ansätze.

      aber trotzdem schonmal VIELEN DANK!!!

      gruss hihi

      1. Hi,

        <html>
        <head>
        <title>Fade</title>
        <script type="text/javascript">
        <!--
        function fade(colorStart, colorEnd)
        {
           start = new Color(colorStart);
           end = new Color(colorEnd);

        // mit start.redDec kannst du z. B. den Dezimalwert des Rotanteils herauskriegen
           // Analog dazu kannst du die Methode DecToHex schreiben.
           // Zu bedenken wäre auch eine Universalmethode, die
           // Eien Basis in eine Andere Umwandelt
           // Sie könnte so aussehen
           // umwandler(vonString, vonArray, nachString, nachArray)
           // Dabei sind vonArray und nach Array die Zeichenarrays.
        }

        // Ein Objekt zum Abspeichern der Farbe wäre nicht schlecht
        function Color(ColorString)
        {
           this.color = ColorString;
           this.red = ColorString.substring(1, 2);
           this.green = ColorString.substring(3, 4);
           this.blue = ColorString.substring(5, 6);

        this.redDec = HexToDec(this.red);
           this.greenDec = HexToDec(this.green);
           this.blueDec = HexToDec(this.blue);
        }

        // Funktion zum Umwandeln von Hexadezimalzahlen in Dezimalzahlen
        function HexToDec(HexString)
        {
           hexZiffer = new Array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F');
           dec = 0; // Anfangswert
           basis = 16; // Hexadezimalzahlen

        for (i = 0; i < HexString.length(); i++) // Zeichen an Stelle i in HexString
           {
              for (j = 0; j < hexZiffer.length; j++)
              {
                 if (HexString.charAt(i) == hexZiffer[j])
                 {
                    basis = basis +  Math.pow(base, HexString.length()-1-i); // Potenz in umgekehrter Reihenfolge, und -1 weil fängt bei 0 an
                    break; // Weitere Vergleiche sind unnötig
                 }
              }
           }

        return basis;
        }
        //-->
        </script>
        </head>
        <body>
        </body>
        </html>

        Ich habe mein Script nicht getestet. Er könnte auch Fehlerbehaftet sein.

        MfG Dmitri

        1. danke erstmal!

          vielen vielen dank!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

          gruss HIHI

  2. gruss hihi ( haha ),

    <script type="text/javascript" language="JavaScript">
     <!--

    // »» ... jetzt soll der hexdezimal-code in normale zahlen
    // »» multiplikation) umgewandelt werden (function deHEX).

    var x = 11;
      var y = "ff"
      alert(parseInt(x,16));
      alert(parseInt(y,16));

    // »» dann wird gefadet und am ende sollen die zahlen wieder
    // »» in einen hexcode gefasst werden (function HEX).

    var x = 17;
      var y = 254;
      alert(x.toString(16));
      alert(y.toString(16));

    // zugabe
      alert(x.toString(2));
     //-->
     </script>

    hoffe ihr könnt mir helfen...

    habe es mit normalen dezimalzahlen (rgb wert) 1a hinbekommen,
    aber ich möchte mich ja weiterbilden und möchte gerne mit
    hexzahlen arbeiten.

    warte auf eure hilfe ;)

    mfg hihi

    viel spass - by(t)e by(t)e - peterS. - pseliger@gmx.net

    1. Hi Peter,

      die einfachen Lösungen mag er nicht:

      http://forum.de.selfhtml.org/?t=28562&m=154681

      wahrscheinlich bastelt er jetzt an seinen Arrays ;-))

      Gruß

      Axel

      1. gruss Axel,

        die einfachen Lösungen mag er nicht:

        diese vermutung hatte ich ebenfalls;

        http://forum.de.selfhtml.org/?t=28562&m=154681

        jetzt bin ich mir dessen sicher;

        wahrscheinlich bastelt er jetzt an seinen Arrays ;-))

        Gruß

        jo - tschuess - peterS. - pseliger@gmx.net

        1. Leute, jetzt seid doch mal net so Scheiße drauf!

          Ich mag schon einfache Lösungen, aber ich würde gerne mal den Weg wissen, den ihr gewählt habt. Denn bei parseInt steht in selfHTML nichts über HexaCode. Also, eine kleine Erklärung zum Code wäre nicht schlecht gewesen.

          Trotzdem Danke!

          Vielleicht könnt ihr das ja noch nachholen. ;-)

          Gruss HIHI

          1. Hallo,

            Leute, jetzt seid doch mal net so Scheiße drauf!

            Nö, war doch als Scherz gemeint.

            Ich mag schon einfache Lösungen, aber ich würde gerne mal den Weg wissen, den ihr gewählt habt. Denn bei parseInt steht in selfHTML nichts über HexaCode. Also, eine kleine Erklärung zum Code wäre nicht schlecht gewesen.

            http://selfhtml.teamone.de/javascript/objekte/unabhaengig.htm#parse_int
            ...
            Beachten Sie:
            Die Methode parseInt() erlaubt einen zweiten, optionalen Parameter radix. Dieser Parameter enthält die Basis des verwendeten Zahlensystems. Der Aufruf parseInt(string,radix) ermittelt aus dem String, der eine Zahl eines anderen Zahlensystems darstellt, die dazugehörige Dezimalzahl. Die Methode parseInt() kann damit gleichzeitig als Umrechner von Zahlen anderer Zahlensysteme in das dezimale Zahlensystem verwendet werden. So ergibt z.B. der Aufruf parseInt("11111",2) die Zahl 31. Der optionale Parameter kann Werte zwischen 2 und 36 annehmen. Mit der Methode  toString() des  Number-Objektes können Sie umgekehrt Dezimalzahlen in Zeichenketten von Zahlen anderer Zahlensysteme konvertieren. Dabei ist - im Gegensatz zur Methode parseInt() - auch das Umwandeln von Kommazahlen möglich.

            Naja, hexadezimale Zahlen sind nicht extra erwähnt. Aber hexadezimal bedeutet, dass die Zahlen auf der Basis 16 aufbauen. Dezimale Zahlen (z.B. Integerzahlen im JavaScript) bauen auf der Basis 10 auf.

            parseInt("A",16) ergibt den Integer-Wert 10
            parseInt("B",16) ergibt den Integer-Wert 11
            ...
            parseInt("F",16) ergibt den Integer-Wert 15

            Wenn Du eine Farbwert (FF7D7B) in seine Teile zerlegt hast:

            var rotH="FF";
            var gruenH="7D";
            var blauH="7B";

            kannst Du mit:

            var rotI = parseInt(rotH,16);
            var gruenI = parseInt(gruenH,16);
            var blauI = parseInt(blauH,16);

            die dezimalen Integer-Werte ermitteln.

            Diese kannst Du dann verrechnen, um einen neuen Farbwert zu bekommen:
            z.B. für blau:

            blauI = blauI + 10;

            und mit:

            blauH = blauI.toString(16);

            wieder nach Hexadezimal zurückwandeln.

            Gruß

            Axel