[js] colorfade scriptje werkt alleen met alert!?

Pagina: 1
Acties:
  • 23 views sinds 30-01-2008

  • BikkelZ
  • Registratie: Januari 2000
  • Laatst online: 29-12-2025
Ik heb een rollover-colorfade, die ik zonder schokken wil laten werken. Dus ik gebruik voor rollover en rollout een for-loopje waarbij dezelfde waarde i gebruikt wordt. Is hij dus nog niet volledig naar wit (in dit geval), doorloopt het mouseout gedeelte ook automatisch minder stappen.

mOver werkt prima, zo op het oog. mOut werkt alleen als ik alert(i) gebruik en door de stappen heen enter, als ik dat niet gebruik, dan doorloopt hij dezelfde fade als mOver zo op het oog. Het wordt getriggerd met een simpele div die al een #0000FF achtergrond heeft.

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
    var orval = Array(0, 0, 255);
    var toval = Array(255, 255, 255);
    var steps = 12;

    var i = 1;

    var rstep = (toval[0] - orval[0]) / steps;
    var gstep = (toval[1] - orval[1]) / steps;
    var bstep = (toval[2] - orval[2]) / steps;
    var theobj = null;
    var hexColor = Array("0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f");

    function mOver(obj)
    {
        theobj = obj;
        for (i; i < steps + 1; i++)
        {
            setTimeout("handleChange("+i+")", i * 80);
        }
    }

    function mOut(obj)
    {
        theobj = obj;
        for (i; i > 0; i--)
        {
            alert(i);
            setTimeout("handleChange("+i+")", i * 80);
        }
    }

    function handleChange(i)
    {
        var newr = doubleHex(i, rstep, orval[0]);
        var newg = doubleHex(i, gstep, orval[1]);
        var newb = doubleHex(i, bstep, orval[2]);
        theobj.style.background = "#"+newr+newg+newb;
    }

    function doubleHex(num, step, oldcolval)
    {
        var newcol = oldcolval + Math.round(num * step);
        if (newcol > -1 && newcol < 256)
        {
            switch (newcol)
            {
            case 254:
                return "ff";
            case 0:
                return "00";
            default:
                var newhex1 = hexColor[(Math.round(newcol / 16) - 1)];
                var secondnum = newcol % 16;
                if (secondnum != 0)
                {
                    secondnum = secondnum - 1;
                }
                var newhex2 = hexColor[(newcol % 16)];
                return "" + newhex1 + "" + newhex2 + "";
            }
        }
        else if (newcol > 255)
        {
            return "ff";
        }
        else
        {
            return "00";
        }
    }

iOS developer


  • BikkelZ
  • Registratie: Januari 2000
  • Laatst online: 29-12-2025
OK, het komt gedeeltelijk door de buffers die door de setTimeOut ingesteld worden denk ik. Die worden gevuld omdat het loopje sowieso gedraaid wordt, of je nou wel of niet je muis er af haalt.

iOS developer


  • BikkelZ
  • Registratie: Januari 2000
  • Laatst online: 29-12-2025
Het vermoeden rijst dat setTimeout() en clearTimeout() geschreven zijn door Stephen King. Hoog horrorgehalte |:(

Ik gooi mijn setTimeout-dingetjes nu in een array, en als ik die dan weer ga poppen dan komen er cijfertjes uit die wel iedere keer uniek zijn? En die dus helemaal niets doen als ik clearTimeout() er op los laat?

iOS developer


  • BikkelZ
  • Registratie: Januari 2000
  • Laatst online: 29-12-2025
Timeouts en de clearings aan window gehangen, helaas, helpt ook niet.

Als ik bij iedere stap iets alert, dan werkt het bij de mouseout, doe ik dat niet, doet hij niet wat ik verwacht.

[ Voor 55% gewijzigd door BikkelZ op 11-09-2006 15:28 ]

iOS developer


  • BikkelZ
  • Registratie: Januari 2000
  • Laatst online: 29-12-2025
Hij zet de timeouts in de verkeerde volgorde neer, waar je niet zoveel van merkt als je tussendoor op ENTER moet drukken. OK thanks _/-\o_

iOS developer


  • BikkelZ
  • Registratie: Januari 2000
  • Laatst online: 29-12-2025
Werkend script:

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
    var orval = Array(0, 0, 255);
    var toval = Array(255, 255, 255);
    var steps = 12;
    var steptime = 40

    var objectsTimes = Array();

    var i = 1;

    var rstep = (toval[0] - orval[0]) / steps;
    var gstep = (toval[1] - orval[1]) / steps;
    var bstep = (toval[2] - orval[2]) / steps;
    var theobj = null;
    var hexColor = Array("0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f");

    var timeouts = Array();

    function mOver(obj)
    {
        j = checkTheObj(obj.id);
        clearTOs(obj.id, 'out');
        if (timeouts[obj.id] == undefined)
        {
            timeouts[obj.id] = Array();
        }
        if (timeouts[obj.id]['in'] == undefined)
        {
            timeouts[obj.id]['in'] = Array();
        }
        for (j; j < steps + 1; j++)
        {
            timeouts[obj.id]['in'].push(window.setTimeout("handleChange("+j+", '"+obj.id+"')", (j * steptime) - steptime));
        }
    }

    function mOut(obj)
    {
        j = checkTheObj(obj.id);
        clearTOs(obj.id, 'in');
        if (timeouts[obj.id] == undefined)
        {
            timeouts[obj.id] = Array();
        }
        if (timeouts[obj.id]['out'] == undefined)
        {
            timeouts[obj.id]['out'] = Array();
        }
        for (j; j > 0; j--)
        {
            var timetodo = (steps) * steptime - (j * steptime);
            var timeevent = window.setTimeout("handleChange("+j+", '"+obj.id+"')", timetodo);
            timeouts[obj.id]['out'].push(timeevent);
        }
    }

    function handleChange(as, arrownum)
    {
        var newr = doubleHex(as, rstep, orval[0]);
        var newg = doubleHex(as, gstep, orval[1]);
        var newb = doubleHex(as, bstep, orval[2]);
        document.getElementById(arrownum).style.background = "#"+newr+newg+newb;
        objectsTimes[arrownum] = as;
    }

    function clearTOs(obid, ioro)
    {
        var falser = 0;
        var goodr = 0;
        //alert(timeouts[obid]);
        if (timeouts[obid] !== undefined)
        {
            r = timeouts[obid][ioro].length;
            while (s = timeouts[obid][ioro].pop())
            {
                window.clearTimeout(s);
            }
        }
    }

    function doubleHex(num, step, oldcolval)
    {
        var newcol = oldcolval + Math.round(num * step);
        if (newcol > -1 && newcol < 256)
        {
            switch (newcol)
            {
            case 254:
                return "ff";
            case 0:
                return "00";
            default:
                var newhex1 = hexColor[(Math.round(newcol / 16) - 1)];
                //alert("first hex "+newhex1); 
                var secondnum = newcol % 16;
                if (secondnum != 0)
                {
                    secondnum = secondnum - 1;
                }
                var newhex2 = hexColor[(newcol % 16)];
                //alert("second hex "+newhex2);
                return "" + newhex1 + "" + newhex2 + "";
            }
        }
        else if (newcol > 255)
        {
            return "ff";
        }
        else
        {
            return "00";
        }
    }

    function checkTheObj(theid)
    {
        if (objectsTimes[theid] !== undefined)
        {
            retval = objectsTimes[theid];
        }
        else
        {
            objectsTimes[theid] = i;
            retval = i;
        }
        return retval;
    }

iOS developer


  • André
  • Registratie: Maart 2002
  • Laatst online: 11-02 14:19

André

Analytics dude

Zo, een one man's topic? Graag editten in het vervolg ipv 5 reacties achter elkaar te plaatsen.
Pagina: 1

Dit topic is gesloten.