Check if element is being animated CSS3

六眼飞鱼酱① 提交于 2019-11-28 07:00:06

问题


Is there any way to check if element is being animated?

But being animated not with jquery's animate, but with css3's transition..

The problem I have is... I have this slider, on arrow click I give it

left = left+200

where left is either

element.position().left

or

parseInt(element.css("left"));

(it doesn't really matter, the problem occurs with either)

the element is being animated with

transition: left 400ms ease-in-out;

so, when the user clicks on the arrow once and then again before the animation finishes, left returns value depending on its position(so instead of say.. 400px, it might return 235.47px since it was clicked in the middle of the animation)..


回答1:


When you change the left property of an element, you can associate a boolean value with it (using data() for instance) and set it to true to indicate a transition has started. Then, you can bind to the transition end event (which varies depending on the browser) and set the boolean value back to false from your handler to indicate the transition has ended.

The end result is something like:

yourElement.on(
    "transitionend MSTransitionEnd webkitTransitionEnd oTransitionEnd",
    function() {
        $(this).data("transitioning", false);  // Transition has ended.
    }
);

(Note the code above only has to run once.)


if (!yourElement.data("transitioning")) {
    // No transition active, compute new position.
    var theNewLeft = yourElement.position().left + 200;
    // Set new position, which will start a new transition.
    yourElement.data("transitioning", true).css("left", theNewLeft);
}


来源:https://stackoverflow.com/questions/9736919/check-if-element-is-being-animated-css3

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!