[JQ] FadeIn verspringt ipv animeert*

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • BryanD
  • Registratie: September 2010
  • Laatst online: 24-07 15:06
Beste tweakers,

Ik heb een kleine carousel en die werkt (op het moment) alleen met fade.
Dus ik gebruik fadeIn en fadeOut.

Dit is het stukje wat daadwerkelijk de animatie uit voert:

JavaScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
function animation(object,selection,timer,callback){
        
        if(timer === undefined || timer == null || timer == false || timer == ""){ timer = 500 } 
        if(selection == "in"){
            object.stop().fadeIn(timer);
        }else if (selection == "out"){
            object.fadeOut(timer);
        }else{
            object.fadeOut(timer);
        }
        
        if(jQuery.isFunction(callback)){ callback.call(this); }
    }

object = een DOM element dat geanimeerd word
selection = of het een fade in of out moet worden
de rest spreekt voorzich zelf.

en dit is vervolgens het stukje wat de animatie's aan roept:

JavaScript:
1
2
3
4
5
6
animation(getState("current"),"out", 1000,function(){
                var next = getState("next");
                getState("current").removeClass("active");
                next.addClass("active");
                animation(next,"in", 1000);
            });

getState = functie die volgende slide op haalt, dat werkt ook allemaal.
Animation uit werkt perfect, echter animation in verspringt direct. Is direct van 0% opacity naar 100.
Zou iemand mij kunnen uitleggen waarom mijn fadeIn per direct verspringt?

B.v.d,

[ Voor 0% gewijzigd door BtM909 op 27-01-2011 11:14 ]


Acties:
  • 0 Henk 'm!

  • noes
  • Registratie: Augustus 2006
  • Niet online

noes

gek op benzine.

getState("current").removeClass("active");
next.addClass("active");

Heb je CSS gekoppeld aan deze klasse? Post die eens? Mijn verwachting is dat je .active{ display: block} hebt staan en je normale slides display: none; hebben.

Daardoor switch je je visibility al, dus doet je animatie niets.

K54/R1250RS | K48/K1600GT | E61/550i


Acties:
  • 0 Henk 'm!

  • BryanD
  • Registratie: September 2010
  • Laatst online: 24-07 15:06
Nope :)
Al naar gekeken dit is de CSS:

Cascading Stylesheet:
1
#carousel img { display: none }


carousel is de omringede div. En voor de rest heb ik geen enkele CSS die op toepassing is voor de carousel div, of de images.

edit: html structuur:

HTML:
1
2
3
4
5
6
7
<div id="carousel">
        <img src="img/content/img1.jpg"  class="img1" alt="Foto Carousel" />
        <img src="img/content/img2.jpg" class="img2 " alt="Foto Carousel" />
        <img src="img/content/img3.jpg" class="img3 " alt="Foto Carousel" />
        <img src="img/content/img1.jpg" class="img3 " alt="Foto Carousel" />
        <img src="img/content/img1.jpg" class="img3 " alt="Foto Carousel" />
    </div>

classes zijn voor de tekst die er bij komt (staat ook in carousel div, maar staat hier verder los van.


Edit 3:
ik weet wat het probleem is: mijn callback functie werkt niet helemaal flekkeloos.
De callback word gewoon direct aangeroepen inplaats van als de animatie klaar is, moet ik hiervoor een setTimeout gebruiken of hoe kan dit beter?
wederom de callback code:
code:
1
if(jQuery.isFunction(callback)){ callback.call(this); }

[ Voor 86% gewijzigd door BtM909 op 27-01-2011 11:15 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Je kan dit het beste doen met de callback parameter. Hier kan je een functie zetten die wordt uitgevoerd als de animatie is afgelopen:

JavaScript:
1
2
3
fadeIn(timer,function () {
//Functie die wordt uitgevoerd als de animatie voltooid is
});

Acties:
  • 0 Henk 'm!

  • BryanD
  • Registratie: September 2010
  • Laatst online: 24-07 15:06
Dankje voor de suggestie melay, heb ik ook al geprobeerd, werkt ook niet, hij blijft in een keer infaden.
Dit omdat er geen functie uitgevoerd word zodra de animatie compleet is, dat is namelijk het laatste wat er gebeuren moet.

Ik zal zometeen de hudige versie even posten

Acties:
  • 0 Henk 'm!

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

ipv een volledige versie, kan je misschien een uitgeklede debugbare versie posten? :)

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Acties:
  • 0 Henk 'm!

  • BryanD
  • Registratie: September 2010
  • Laatst online: 24-07 15:06
Bij deze (geen link want ik heb atm geen beschikking over een webserver waar dat even op kan)

HTML:
1
2
3
4
5
6
7
8
9
10
11
    <div id="carousel">
        <img src="img/content/foto1.jpg" class="nummer1" alt="Foto Carousel" />
        <img src="img/content/foto2.jpg" class="nummer2" alt="Foto Carousel" />
        <img src="img/content/foto3.jpg" class="nummer3" alt="Foto Carousel" />
        <img src="img/content/foto4.jpg" class="nummer2" alt="Foto Carousel" />
        <img src="img/content/foto5.jpg" class="nummer3" alt="Foto Carousel" />
        
        <div class="text nummer1">Dit is tekst 1</div>
        <div class="text nummer2">Dit is tekst 2</div>
        <div class="text nummer3">Dit is tekst 3</div>
    </div>


--CSS--
Cascading Stylesheet:
1
2
#carousel img { display: none; }
#carousel div.text { opacity: 0; }


-- Animatie --
JavaScript:
1
2
3
4
5
6
7
8
9
10
11
setInterval(function(){
    var next = getState("next");
    var current = getState("current");
    next.addClass("active");
    next.fadeIn(0,'linear',function(){ 
        current.fadeOut(500,function(){
            current.removeClass("active");  
        });
    }); 
    
},5000);


-- getState --
JavaScript:
1
2
3
4
5
6
7
8
9
10
function getState(selection){
    if(selection == "current"){
        currentImage = carousel.find(".active");
        return currentImage;
    }else if(selection == "next"){
        nextImage = carousel.find(".active").next("img");
        if(nextImage.length == 0){ nextImage = carousel.children("img").eq(0);  }
        return nextImage;
    }
}

Acties:
  • 0 Henk 'm!

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Dan plaats je toch een complete testset (alles inline) die men kan saven en (lokaal) testen? Je wilt niet weten hoeveel verschillende versies je uiteindelijk overhoud als je alles gesnipt aanbiedt :)

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Acties:
  • 0 Henk 'm!

  • BryanD
  • Registratie: September 2010
  • Laatst online: 24-07 15:06
Dan bij dezen :)
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
85
86
87
88
89
90
91
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.4.4.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){

    // cache DOM
    var carousel = $("#carousel");
    if(carousel.find(".active").length == 0){ carousel.children("img").eq(0).fadeIn(0).addClass("active");  }
    var currentImage;
    var nextImage;
    function getState(selection){
        if(selection == "current"){
            currentImage = carousel.find(".active");
            return currentImage;
        }else if(selection == "next"){
            nextImage = carousel.find(".active").next("img");
            if(nextImage.length == 0){ nextImage = carousel.children("img").eq(0);    }
            return nextImage;
        }
    }
    
    // animatie
    function animation(){
        var next = getState("next");
        var current = getState("current");
        next.addClass("active");
        next.fadeIn(0,'linear',function(){ 
            current.fadeOut(1000,function(){ // HIER GAAT HET DUS FOUT!!! dit gaat te snel
                current.removeClass("active");    
            });
        }); 
    }
    
    // Interval
    setInterval(function(){
        animation();
    },5000);
});
</script>
<style type="text/css">
* { margin: 0; }
html { height: 100%; }
body {
    height: 100%;
    background: #5c0c0c;
    font: 18px/20px Georgia, "Times New Roman", Times, serif;
    color: #fff;
    overflow: hidden;
    }
    a { outline: 0; }
    a:hover { }
    a img { border: 0; }
    h1, h2 { font: normal 36px/46px 'Excelsior', Georgia, "Times New Roman", Times, serif; line-height: normal; }
    h1 { }
    h2 { }
    p { margin: 0 0 30px; }
#container {
    width: 100%;
    height: 100%;
    position: relative;
    z-index: 10;
    }
#carousel img { display: none; }
#carousel div.text { opacity: 0; }
</style>
</head>

<body>

<div id="container">
    
    <div id="carousel">
        <img src="img/content/foto1.jpg" class="nummer1" alt="Foto Carousel" />
        <img src="img/content/foto2.jpg" class="nummer2" alt="Foto Carousel" />
        <img src="img/content/foto3.jpg" class="nummer3" alt="Foto Carousel" />
        <img src="img/content/foto4.jpg" class="nummer2" alt="Foto Carousel" />
        <img src="img/content/foto5.jpg" class="nummer3" alt="Foto Carousel" /> 
        
        <div class="text nummer1">Dit is tekst 1</div>
        <div class="text nummer2">Dit is tekst 2</div>
        <div class="text nummer3">Dit is tekst 3</div>
    </div>

</div>

</body>
</html>


Plaatjes zul je zelf even moeten kijken :)

Acties:
  • 0 Henk 'm!

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Heb je weleens gekeken naar de chaining mogelijkheden binnen jQuery?

http://www.learningjquery.com/2007/01/effect-delay-trick
http://snipplr.com/view/39212/timeout-jquery-efffect/

?

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Acties:
  • 0 Henk 'm!

  • BryanD
  • Registratie: September 2010
  • Laatst online: 24-07 15:06
delay heb ik al geprobeerd ja, echter werkte dat niet. Verder is de andere optie één die ik liever niet gebruik (setTimeout).

Ik wil dit gewoon normaal kunnen doen.

Acties:
  • 0 Henk 'm!

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

setTimeout wordt juist niet aangeraden, vandaar de delay ;)

Maar werkt echter niet :S Heb je die voorbeelden gezien... Die werken gewoon (delay of idle)

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Acties:
  • 0 Henk 'm!

  • R4gnax
  • Registratie: Maart 2009
  • Laatst online: 06-09 17:51
BtM909 schreef op donderdag 27 januari 2011 @ 17:00:
setTimeout wordt juist niet aangeraden, vandaar de delay ;)
jQuery.fn.delay maakt intern gebruik van setTimeout, dus afgezien van de schonere syntax maakt het echt geen verschil.

Verder heeft zijn er ook de nodige problemen (geweest?) in combinatie met jQuery.fn.stop: timeouts die niet correct met clearTimeot weg gehaald worden, maar alsnog uitgevoerd worden en vervolgens je animatie queue corrupt maken...

Acties:
  • 0 Henk 'm!

  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Ik heb geen ervaring met jQuery, dus plaats hier alleen m'n Google resultaten ;)

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Acties:
  • 0 Henk 'm!

  • BryanD
  • Registratie: September 2010
  • Laatst online: 24-07 15:06
Is al opgelost heren, bleek dat de klant zowieso een andere animatie wou :P
Is dus al klaar.
Pagina: 1