[JS] Image fade, maar flikkert in FF?

Pagina: 1
Acties:

  • k0ewl
  • Registratie: December 2003
  • Laatst online: 13-11 22:07
Hoi!

nou om maar met de deur in huis te vallen, ik heb vanavond een scriptje geschreven dat images voor mij laat faden. Die afbeeldingen worden in een array gezet door PHP en dan aan Javascript geschreven.

HTML:
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
<?
$images    = array();
$image_dir = './images/enter/';
$handle    = opendir($image_dir);

while(($file = readdir($handle)) !== false)
  {
    if (is_file ($image_dir.$file))
      {
        $imageinfo = getimagesize($image_dir.$file);

        if ($imageinfo[2] == IMAGETYPE_JPEG)
          array_push ($images, $image_dir.$file);
      }
  }

closedir($handle);

sort($images);
$image_array .= '"'.$images[0].'",';

foreach($images as $image)
  $image_array .= '"'.$image.'",';

$image_array = substr($image_array, 0, -1);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
  <title>Axel Grunnekemeijer</title>
  <link rel="stylesheet" type="text/css" href="./stylesheets/stylesheet.css">
  <link rel="stylesheet" type="text/css" href="./stylesheets/navigation.css">
  <link rel="stylesheet" type="text/css" href="./stylesheets/content.css">
  <script language="javascript">
    var index        = 0;
    var opacity      = 100;
    var image_array  = new Array(<?=$image_array?>);

    var fader;
    var background;
    var foreground;

    function fade_images ()
      {  
        opacity = 100;
        
        fader      = document.getElementById('fader');
        background = document.getElementById('fader_background');
        foreground = document.getElementById('fader_foreground');

        foreground.src = image_array[index];

        index++;
        if (index >= image_array.length)
          index = 1;

        background.src = image_array[index];

        fade ();

        window.setTimeout('fade_images ()', 3000);
      }

    function fade ()
      {
        if (opacity >= 0)
          {           
            fader.style.opacity = opacity / 100;
            fader.style.filter  = 'alpha (opacity = ' + opacity + ')';

            opacity = opacity - 5;
            window.setTimeout('fade ()', 50);
          }
      }
  </script>
</head>
<body onload="fade_images()">
  <div id="header">&shy;</div>
  <div id="container"><a href="./main.php"><img src="<?=$images[0]?>" alt="enter" id="fader_background"></a></div>
  <div id="fader"><a href="./main.php"><img src="<?=$images[0]?>" alt="enter" id="fader_foreground"></a></div>
  <div id="footer">
    <div><a href="main.php">[Enter]</a></div>designed by Jaap Koekkoek &copy; 2007</div>
</body>
</html>


Het werkt helemaal perfect, op 1 klein dingetje na, als hij in firefox draait, dan lijkt het erop dat zodra de afbeeldingen gecached zijn, ze elke keer vlak voor de wissel een keer flikkeren. IE heeft er geen last van. Hij laat snel het komen plaatje zien. Dit terwijl de andere div die erboven op ligt op moment alweer op 100% opacity staat.

Wie o wie kan me helpen?

Live example: http://www.axeldrums.com/

A byte walks into a bar and orders a pint. Bartender asks him "What's wrong?" Byte says "Parity error." Bartender nods and says "Yeah, I thought you looked a bit off."


  • André
  • Registratie: Maart 2002
  • Laatst online: 14:48

André

Analytics dude

Komt dat misschien omdat je het voorgrond plaatje naar de background plaatst om de nieuwe in de voorgrond te plaatsen? Misschien kun je beter ipv met voor- en achtergrond te werken de z-index van de layer veranderen zodat je geen plaatjes hoeft te verplaats van layer.

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 15:35

crisp

Devver

Pixelated

volgens mij was de workaround ervoor zorgen dat de opacity niet helemaal 0 kon worden (maar bijvoorbeeld 0.01) - kan ook zijn dat het probleem juist rond de 100 zat :)

Intentionally left blank


  • k0ewl
  • Registratie: December 2003
  • Laatst online: 13-11 22:07
Ik heb ook gelezen dat het kwam door de opacity niet 100 te laten worden, maar dat heb ik geprobeerd en het hielp niet.

de z-index ga ik vanavond dan nog even verder mee kloten, want moet nu eerstmet school verder. :r klote project.

A byte walks into a bar and orders a pint. Bartender asks him "What's wrong?" Byte says "Parity error." Bartender nods and says "Yeah, I thought you looked a bit off."