TransitionEnd很快就会出现

时间:2013-01-29 22:13:12

标签: javascript jquery html css animation

我正在尝试使用jQuery和css过渡对一些动画进行排序。似乎容器宽度应该是动画,直到小部件从“顶部”css更改完成转换,但它们一起发射。

为什么

        widget.one('webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend', function(i) {

            widget.css({'top': top});

            widget.one('webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend', function(i) {

                container.css({'width': "19%"})

            });

        });

以与此相同的顺序动画?

        widget.one('webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend', function(i) {

            widget.css({'top': top});

        });

        widget.one('webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend', function(i) {

            container.css({'width': "19%"})

        });

1 个答案:

答案 0 :(得分:5)

在第一个示例中,您需要在添加transitionEnd事件之前设置css。我相信这是你出错的地方。

widget.css({
    'top': '200px'
}).one('webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend', function (i) {

    widget.css({
        'top': '0px'
    }).one('webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend', function (i) {

        container.css({
            'width': "300px"
        }).one('webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend', function (i) {

            container.css({
                'width': "50px"
            }).one('webkitTransitionEnd otransitionend oTransitionEnd msTransitionEnd transitionend', function (i) {

                widget.css({
                    'width': "400px"
                })

            });
        });

    });

});

只要您使用one代替on jQuery,链接转换就可以正常工作。

见这个jsFiddle:

http://jsfiddle.net/gordyr/NSCd5/3/

我不确定你是否做了不同的事情,但希望这会有所帮助。

虽然我个人将其包装成一个帮助函数,以避免编写如此多的浏览器特定代码......像这样(未经测试):

$.fn.transition = function(props, callback){
              $(this).css(props).one('webkitTransitionEnd otransitionend oTransitionEndmsTransitionEnd transitionend', function (i) {
                    if(typeof callback == 'function'){
                            callback();
                    }
              });
        return this;
});

像这样使用:

$(element).transition({top:'0px'}, function(){
      $(this).transition({top:'100px'}, function(){
          $(this).transition({top:'400px'}, function(){
               //Do something else
          });
    });
});

虽然使用缓存元素而不是每次都使用$(this)命中...