我正在尝试使用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%"})
});
答案 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)
命中...