我正在尝试学习如何在我的CSS3过渡中使用transitionend,所以我有一组大小为网格的图像以及0到1的不透明度,理想情况下我想要做的就是等到所有这些图像都已完成,最后的transitionend事件已经启动,然后继续我的下一个代码。目前我只是试图在转发发生时尝试注销消息,但我什么也没得到,这意味着我可能正在使用这个错误。任何人都可以建议我如何做到这一点?
JS小提琴: http://jsfiddle.net/mWE9W/2/
CSS
.image img {
position: absolute;
top: 0;
left: 0;
opacity: 0.01;
-webkit-transition: all 1s ease-in;
-webkit-transform: scale(0);
height: 150px;
width: 150px;
display:block;
}
.inner.active .image img {
-webkit-transform: scale(1);
top: 0;
left: 0;
opacity: 1;
}
JS
$('.image img').on('webkitTransitionEnd', function(e) {
console.log('this ran')
$('h2').fadeIn();
}, false);
答案 0 :(得分:2)
1)您在false
方法调用中不需要最后一个参数.on
。你的回调从未被调用过。
2)一旦你删除了那个不需要的参数,你就会注意到回调实际上被调用了16次。发生这种情况是因为您有4个具有4个过渡比例的图像。动画每个属性会导致调用回调。因此,您需要对图像转换完成进行某种检查,并且只有在完成所有转换后才调用.fadeIn()
方法。代码如下所示:
var imageCount = $('.image img').length, animatedCount = 0, animCompleteImages = $();
$('img').imagesLoaded(function() {
$('.inner').addClass('active').on('webkitTransitionEnd', 'img', function(e) {
if(!animCompleteImages.filter(this).length) {
animCompleteImages = animCompleteImages.add(this);
animatedCount++;
if(animatedCount === imageCount) {
$('h2').fadeIn();
}
}
});
});
使用JS小提琴here。