2016-11-13 6 views
0

Ich programmiere gerade eine Bibliothek namens quickly.js. Es gibt conceal(milliseconds) und display() Funktionen, die Animationen haben, die über CSS programmiert werden. Die Maskierungsfunktionsanimation funktioniert ordnungsgemäß, aber die Animation der Anzeigefunktion funktioniert nicht korrekt. Es verblasst nicht. Stattdessen erscheint es abrupt. Hier ist ein JSFiddle, der den Fehler demonstriert: https://jsfiddle.net/v6esmqtf/6/.JavaScript + CSS3 Animationen funktionieren nicht richtig?

+0

Was meinen Sie mit "funktioniert nicht richtig"? Bitte geben Sie genau an, was Sie tun möchten. – discipline

+0

@discipline aktualisierte Frage – Bennett

+0

Sie haben die Anzeigefunktion nicht eingerichtet - jsfiddle.net/ypz7m241/ – discipline

Antwort

1

Sie hatten einfach nicht die display Funktion eingerichtet.

Element.prototype.conceal = function(ms) { 
    ms = ms || 0; 
    var thisStyle = this.style; 
    thisStyle.opacity = 0; 
    setTimeout(function() { 
    thisStyle.display = "none"; 
    }, ms); 
}; 

Element.prototype.display = function(ms) { 
    ms = ms || 0; 
    var thisStyle = this.style; 
    thisStyle.display = ""; 
    setTimeout(function() { 
    thisStyle.opacity = 1; 
    }, ms); 
}; 

Und dann ...

document.getElementById("conceal").onclick = function() { 
    document.getElementById("get").conceal(800); 
}; 

document.getElementById("display").onclick = function() { 
    document.getElementById("get").display(0); 
}; 

Hoffnung, das hilft.

+0

Das ist seltsam, dass setTimeout() auch ohne Verzögerung da sein muss. Ich habe den Code geändert, um keine Parameter in der 'display()' Funktion zu haben. Stattdessen führe ich setTimeout() ohne Verzögerung. – Bennett

+0

I * denke * es ist, weil 'opacity' mal einen eingebauten Keyframe hat - du könntest stattdessen JQ für' $ ("# get") benutzen animate ({opacity: '1'}, 5000); '- http: // stackoverflow.com/questions/23180504/css-opacity-change-on-div-with-time-delay-not-user-interaction – discipline

Verwandte Themen