动画未通过 jQuery TransitionEnd 事件完成
Animation doesn't complete with jQuery TransitionEnd event
情况
- .rightnav.front 被点击 DIV1.
- DIV1向右移动,不透明度降低
- DIV1向左后退,完成时不透明度为0
- DIV1 获取 class .hidden 和 .offset 以隐藏它并将其移出屏幕,因此它不再可点击..
- 下一个 DIV(DIV 的 id 为 2 用于测试目的)已隐藏并删除偏移量 class,并且是下一个点击事件的目标。
问题
DIV 向右移动,但在隐藏之前不会向左移动(再次返回)。请参阅底部的 Codepen 进行试用。
我只在此处发布 JavaScript 代码。CSS 和 HTML 您可以在代码笔中找到。
这是jQuery代码
$(document.body).on('click','.rightnav.front', function () {
var x = $(this).parent().parent();
x.addClass('moveright')
.one('transitionend', function() {
x.removeClass('moveright')
})
.one('transitionend', function(){
x.addClass('moveleft');
})
.one('transitionend', function() {
x.addClass('hidden').addClass('offset');
$('.rightnav.front').removeClass('front');
var nextId = Number(x.attr('id')) + 1;
var nextWidget = $('#' + nextId);
nextWidget.removeClass('hidden');
nextWidget.children().find('.rightnav').addClass('front');
})
});
代码笔
这里是 CodePen.IO link 的现场测试:http://codepen.io/nygter/pen/QbpegM
看看这个解决方案,也许(确定)它不理想,但应该按预期工作。正如我在评论中提到的,我已将 animation 从 jQuery 移至 @keyframes
.
魔法来自:
.widget.moveright{
left:450px;
margin-left:-100px;
opacity:0.5;
}
和
x.addClass('moveright')
.one('transitionend', function() {
x.removeClass('moveright')
})
.one('transitionend', function(){
x.addClass('moveleft');
}) //...
转化为:
@keyframes moveright{
50% {
left:450px;
margin-left:-100px;
opacity:0.5;
}
100% {
opacity: 0;
}
}
.widget.moveright{
animation: moveright 1s ease;
-webkit-animation: moveright 1s ease;
}
和
x.addClass('moveright')
.one('animationend', function() {
$(this)
.removeClass('moveright')
.addClass('hidden offset');
//...
在 Codepen 上查看实际效果。
理解 CSS 动画 take a look.
情况
- .rightnav.front 被点击 DIV1.
- DIV1向右移动,不透明度降低
- DIV1向左后退,完成时不透明度为0
- DIV1 获取 class .hidden 和 .offset 以隐藏它并将其移出屏幕,因此它不再可点击..
- 下一个 DIV(DIV 的 id 为 2 用于测试目的)已隐藏并删除偏移量 class,并且是下一个点击事件的目标。
问题
DIV 向右移动,但在隐藏之前不会向左移动(再次返回)。请参阅底部的 Codepen 进行试用。
我只在此处发布 JavaScript 代码。CSS 和 HTML 您可以在代码笔中找到。
这是jQuery代码
$(document.body).on('click','.rightnav.front', function () {
var x = $(this).parent().parent();
x.addClass('moveright')
.one('transitionend', function() {
x.removeClass('moveright')
})
.one('transitionend', function(){
x.addClass('moveleft');
})
.one('transitionend', function() {
x.addClass('hidden').addClass('offset');
$('.rightnav.front').removeClass('front');
var nextId = Number(x.attr('id')) + 1;
var nextWidget = $('#' + nextId);
nextWidget.removeClass('hidden');
nextWidget.children().find('.rightnav').addClass('front');
})
});
代码笔
这里是 CodePen.IO link 的现场测试:http://codepen.io/nygter/pen/QbpegM
看看这个解决方案,也许(确定)它不理想,但应该按预期工作。正如我在评论中提到的,我已将 animation 从 jQuery 移至 @keyframes
.
魔法来自:
.widget.moveright{
left:450px;
margin-left:-100px;
opacity:0.5;
}
和
x.addClass('moveright')
.one('transitionend', function() {
x.removeClass('moveright')
})
.one('transitionend', function(){
x.addClass('moveleft');
}) //...
转化为:
@keyframes moveright{
50% {
left:450px;
margin-left:-100px;
opacity:0.5;
}
100% {
opacity: 0;
}
}
.widget.moveright{
animation: moveright 1s ease;
-webkit-animation: moveright 1s ease;
}
和
x.addClass('moveright')
.one('animationend', function() {
$(this)
.removeClass('moveright')
.addClass('hidden offset');
//...
在 Codepen 上查看实际效果。 理解 CSS 动画 take a look.