为什么动画完成后我的元素不再隐藏
Why is my element no longer hidden after the animation is complete?
我要完成的是一个框网格,其中每个框在单击时都会动画化,然后显示覆盖整个网格的相应详细信息视图。
详细信息视图包含用于返回到网格视图的链接。
在我的完整实现中,将有从详细信息视图到详细信息视图的轮播样式导航,并带有动画。 因此,我想用一个简单的覆盖隐藏框的网格,一旦用户返回到网格视图,它应该恢复为隐藏。
问题是动画完成时 JQuery hide()
调用似乎被删除了......有时,但并非总是如此。
创建了一个简单的 JSFiddle,显示了我试图避免的行为。 当您单击其中一个框时,下一个.expanded-card
元素将正确显示。 当您单击"返回概览"时,.expanded-card
元素会适当地淡出,并且.grid-background
叠加层将被隐藏。
但是一旦zoomOut
动画完成,.grid-background
就会再次可见。 为什么?
该 HTML:
<div class="container">
<div class="row grid-3x3-container">
<div class="col-xs-10 col-xs-offset-1 text-center">
<div class="container-fluid grid-3x3">
<div class="row">
<div class="col-xs-4 grid-item">
<div class="flip-box animated">
<h3>Title 1</h3>
</div>
</div>
<div class="expanded-card animated col-xs-12">
<div class="card-header">
<span class="card-nav-back"> back to overview</span>
</div>
<div class="card-body">
<p>
Text goes here!
</p>
</div>
</div>
<div class="col-xs-4 grid-item">
<div class="flip-box animated">
<h3>Title 2</h3>
</div>
</div>
<div class="expanded-card animated col-xs-10 col-xs-offset-1">
<div class="card-header ">
<span class="card-nav-back"> back to overview</span>
</div>
<div class="card-body">
<p>
Text goes here!
</p>
</div>
</div>
<div class="col-xs-4 grid-item">
<div class="flip-box animated">
<h3>Title 3</h3>
</div>
</div>
<div class="expanded-card animated col-xs-10 col-xs-offset-1">
<div class="card-header ">
<span class="card-nav-back"> back to overview</span>
</div>
<div class="card-body">
<p>
Text goes here!
</p>
</div>
</div>
<div class="col-xs-12 grid-background">
</div>
</div>
</div>
</div>
</div>
</div>
JavaScript:
$('.flip-box').on("click", function () {
var currentCard = $(this).parent();
currentCard.addClass('current-selection');
var expandedCard = currentCard.next('.expanded-card');
currentCard.addClass('flipOutX');
currentCard.on('webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend', function () {
expandedCard.show();
expandedCard.addClass('zoomIn');
currentCard.find('h3').show();
expandedCard.on('webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend', function () {
expandedCard.removeClass('zoomIn');
$('.grid-background').show();
});
});
});
$('.expanded-card').on("click", '.card-header>.card-nav-back', function () {
var currentGridItem = $('.current-selection');
var currentCard = currentGridItem.next('.expanded-card');
currentGridItem.removeClass('current-selection');
currentCard.addClass('zoomOut');
currentCard.one('webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend', function () {
currentCard.removeClass('zoomOut');
currentCard.hide();
});
$('.grid-background').hide();
});
使用这个:
expandedCard.one('webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend', function() {
expandedCard.removeClass('zoomIn');
$('.grid-background').show();
});
更正的小提琴
您使用的是.on
而不是.one
,因此后面的"zoomOut"动画将再次触发此操作,因此它将显示.grid-background
。
也许这只是一个错字,因为您在单击.expanded-card
的代码中正确无误。
另一种可能性是将处理程序委托给 .zoomIn
和 .zoomOut
类,而不是每次都绑定处理程序。
$(".container").on("webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend", ".zoomIn", function() {
$(this).removeClass("zoomIn");
$(".grid-background").show();
});
$(".container").on("webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend", ".zoomOut", function() {
$(this).removeClass("zoomOut").hide();
});
演示
相关文章:
- CKEditor Widget-阻止编辑可编辑元素本身
- 如何设置html元素填充的动画
- 如何将HTML id分配给元素,以及如何将JavaScript应用于元素
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- 使用clickToggle并在单击另一个元素时关闭元素
- 单击时将焦点更改为元素
- 表追加而不附加最后一个元素
- 如何在jQuery中获取元素的形式
- 我可以获得相对于被点击元素的确切点击位置吗
- 为什么动画完成后我的元素不再隐藏
- 量角器 StaleElementReferenceError: 元素不再附加到 DOM
- 将参数添加到 d3 拖动行为后,元素不再可拖动
- Watir”;元素不再附加到DOM“;错误
- 通过名称获取IFRAME元素不再工作
- jQuery -当你委托一个事件处理程序时,它是否也会自动从不再匹配的元素中移除自己?
- 如何在不轮询的情况下检测元素何时不再具有影子根
- 清理不再引用且从未添加到文档中的元素
- 可以替代routerState.在angular2中不再存在的父元素
- 停止jQuery悬停效果,当元素不再悬停
- 当使用回调函数时,JavaScript如何从不再在DOM中的iframe访问元素?