CSS3 animation firing just once in Firefox using Jquery add/remove class events -


i've run across number of posts here detailing problems css3 animations not working in firefox, 1 animation fires once:

firefox runs css animation once

and

documented bugs of firefox/jquery/css animations together?

but these fixes not relevant issue. i've got these animations working in safari/chrome, , have correct vendor prefixes css (even though firefox shouldn't need them). i'm using jquery add / remove class events trigger animations, , can see in firebug classes changing when expect them to.

the issue animation fires first time, never again, , defaults making panel disappear , reappear

css:

/* custom sliding panel */ @-webkit-keyframes panelslideleft {     {         opacity: $panelopacitystart;         -webkit-transform: translatex(0);     }     {         opacity: $panelopacityend;         -webkit-transform: translatex($panelwidth);     } } @-moz-keyframes panelslideleft {     {         opacity: $panelopacitystart;         -moz-transform: translatex(0);     }     {         opacity: $panelopacityend;         -moz-transform: translatex($panelwidth);     } } @keyframes panelslideleft {     {         opacity: $panelopacitystart;         transform: translatex(0);     }     {         opacity: $panelopacityend;         transform: translatex($panelwidth);     } }  .slide-panel-left-open {     opacity: $panelopacityend;     -webkit-animation: panelslideleft $animationduration linear;     -moz-animation: panelslideleft $animationduration linear;        animation: panelslideleft $animationduration linear;                 -webkit-transform: translatex($panelwidth);     -moz-transform: translatex($panelwidth);     transform: translatex($panelwidth); } .slide-panel-left-close {     -webkit-animation: panelslideleft $animationduration linear reverse;     -moz-animation: panelslideleft $animationduration linear reverse;        animation: panelslideleft $animationduration linear reverse;             }  

and in javascript, use boolean determine classes modify, , slidepanel.side set on jquery object , changing expected 'left' or 'right', in firefox (there right sliding panel uses function).

js:

slidepanel.bind('togglepanel', function() {     if(slidepanel.open) {         slidepanel.removeclass('slide-panel-' + slidepanel.side + '-open');         slidepanel.addclass('slide-panel-' + slidepanel.side + '-close');     } else {         slidepanel.removeclass('slide-panel-' + slidepanel.side + '-close');         slidepanel.addclass('slide-panel-' + slidepanel.side + '-open');     }     slidepanel.open = slidepanel.open ? false : true;    }); 

regardless of whether actual bug or not, think functional example being requested.

i created fiddle implements animation toggles using classes when object clicked.

css animation jsfiddle:

http://jsfiddle.net/aa5k7/9/

please excuse crudity of example. original question did not include html , css referenced variables such #panelwidth, took creative license , tried create working example maintains spirit of original.

in css (which supports webkit , mozilla, not include non-prefix options brevity), specify animation parameters individually using longhand format.

the animation-fill-mode property important understand. can read more here: http://www.w3schools.com/cssref/css3_pr_animation-fill-mode.asp

html:

<div id="slidepanel">slide panel</div> 

css:

/* custom sliding panel */ @-moz-keyframes panelslideleft {     {         opacity: 1.0;         -moz-transform: translatex(200px);     }     {         opacity: 1.0;         -moz-transform: translatex(0px);     } } @-moz-keyframes panelslideright {     {         opacity: 1.0;         -moz-transform: translatex(0px);     }     {         opacity: 1.0;         -moz-transform: translatex(200px);     } }  @-webkit-keyframes panelslideleft {     {         opacity: 1.0;         -webkit-transform: translatex(200px);     }     {         opacity: 1.0;         -webkit-transform: translatex(0px);     } } @-webkit-keyframes panelslideright {     {         opacity: 1.0;         -webkit-transform: translatex(0px);     }     {         opacity: 1.0;         -webkit-transform: translatex(200px);     } } .slide-panel-right {     -moz-animation-name: panelslideright;     -moz-animation-duration: 0.35s;     -moz-transition-timing-function: ease-in;     -moz-animation-iteration-count: 1;     -moz-animation-fill-mode: both;     -webkit-animation-name: panelslideright;     -webkit-animation-duration: 0.35s;     -webkit-transition-timing-function: ease-in;     -webkit-animation-iteration-count: 1;     -webkit-animation-fill-mode: both;     } .slide-panel-left {     -moz-animation-name: panelslideleft;     -moz-animation-duration: 0.35s;     -moz-transition-timing-function: ease-in;     -moz-animation-iteration-count: 1;     -moz-animation-fill-mode: none;     -webkit-animation-name: panelslideleft;     -webkit-animation-duration: 0.35s;     -webkit-transition-timing-function: ease-in;     -webkit-animation-iteration-count: 1;     -webkit-animation-fill-mode: none;     }  #slidepanel {     position: absolute;     top: 0px;     left: 0px;     width: 80px;     height: 80px;     border: 1px solid green;     padding: 8px; } 

js:

var open = false;  $("#slidepanel").on('click', function() {   if(open) {     $(this).removeclass('slide-panel-right');     $(this).addclass('slide-panel-left');   } else {     $(this).removeclass('slide-panel-left');     $(this).addclass('slide-panel-right');   }   open  = open ? false : true;    }); 

similar results (with less code) can accomplished using css transitions. here jsfiddle demonstrate:

css transitions jsfiddle

http://jsfiddle.net/aa5k7/11/


Comments

Popular posts from this blog

c# - How Configure Devart dotConnect for SQLite Code First? -

java - Copying object fields -

c++ - Clear the memory after returning a vector in a function -