WebKit Bugzilla
New
Browse
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
RESOLVED INVALID
140853
Animations not showing upon adding/removal of classes
https://bugs.webkit.org/show_bug.cgi?id=140853
Summary
Animations not showing upon adding/removal of classes
lentiformnucleus
Reported
2015-01-24 00:31:32 PST
Animations fail to "execute" when they are called the SECOND time around by the method of adding and removing classes that reference that animation in a CSS stylesheet(or inline CSS), with JavaScript's classList.add() and classList.remove() methods. CSS RULES START @-webkit-keyframes fadeIn { to { opacity: 1; } } @keyframes fadeIn { to { opacity: 1; } } .fadeIn { -webkit-animation: fadeIn .5s ease-in 1 forwards; animation: fadeIn .5s ease-in 1 forwards; } CSS RULES END JAVASCRIPT CODE START element = document.getElementById("anyElement"); var effect = { fadeIn: function(el) { el.style.opacity = 0; el.classList.remove("fadeIn"); el.classList.add("fadeIn"); } }; effects.fadeIn(element); JAVASCRIPT CODE END By coding it this way, it works only under Firefox. However, there's a workaround in Webkit browsers, and that is by adding a timeout to the class addition, like so: fadeIn: function(el) { el.style.opacity = 0; el.classList.remove("fadeIn"); setTimeout(el.classList.add("fadeIn"), 25); } This way, the animation starts as it should, but a timeout shouldn't be required for it to work. I'm thinking, therefore, that it is a bug. (Note that the timeout of 25 is more or less arbitrary, but a number too small won't fix the behaviour)
Attachments
Test
(759 bytes, text/html)
2023-05-10 01:12 PDT
,
Antoine Quint
no flags
Details
View All
Add attachment
proposed patch, testcase, etc.
lentiformnucleus
Comment 1
2015-01-24 00:36:51 PST
Sorry, there's a small typo in the code. var effect should be var effects. And also, the 'fadeIn' method should be called more than once for the bug to be noticeable (note that in the code, I only call it once). Please make the pertintent amendments.
lentiformnucleus
Comment 2
2015-01-24 00:42:32 PST
(In reply to
comment #1
)
> Sorry, there's a small typo in the code. var effect should be var effects. > And also, the 'fadeIn' method should be called more than once for the bug to > be noticeable (note that in the code, I only call it once). Please make the > pertintent amendments.
Aaaah, setTimeout(el.classList.add("fadeIn"), 25); should read instead: setTimeout(function(){ el.classList.add("fadeIn"); }, 25); As you of course know. Sorry, I'm getting sleepy.
Antoine Quint
Comment 3
2023-05-10 01:12:58 PDT
Created
attachment 466305
[details]
Test It would help to have a test case to run, but I believe I've recreated one that shows what was described by the originator.
Antoine Quint
Comment 4
2023-05-10 01:14:05 PDT
I'm going to close this, removing the "fadeIn" class and adding straight away without waiting for style resolution should indeed NOT trigger a new animation. The test case I wrote behaves the same between Firefox and Safari. If you find this is not correct, please reopen this bug with a test case showing the issue.
Note
You need to
log in
before you can comment on or make changes to this bug.
Top of Page
Format For Printing
XML
Clone This Bug