jquery - 使用固定占位符堆叠 div(并在动画期间保持)
问题描述
请参阅jsfiddle。先感谢您!
我正在尝试运行一个动画,其中一个单词滑入以替换现有单词。
堆叠- 我可以使用绝对堆叠 div,但我似乎无法包装 div,因此它保留了所需的位置。(即我想要红框中的传入/传出文本)
动画- 当两个动画都运行时(在动画编号 2 的延迟结束后),div 想要堆叠。我无法同时运行“内联/绝对”吗?
$(function() {
$('#Action').click(function(e) {
//start incoming
Enter('#Incoming', 'fadeInRight');
//add minor delay and then start outgoing
setTimeout(function() {
ExitAndHide('#Outgoing', 'fadeOutLeft');
}, 2000);
});
});
//outgoing function
function ExitAndHide(item, action) {
$(item).removeClass().addClass(action + ' animated').one('webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend', function() {
$(item).hide();
});
};
//incoming function
function Enter(item, action) {
$(item).css("display", "inline-block");
$(item).removeClass().addClass(action + ' animated');
};
.stackable {
position: absolute;
display: inline-block
}
.container {
position: relative;
width: 100%;
border: 1px solid #000;
}
.container2 {
position: relative;
width: 100%;
border: 1px solid #FF0000;
}
.fadeOutLeft {
animation-name: fadeOutLeft
}
@keyframes fadeInRight {
0% {
opacity: 0;
transform: translate3d(100%, 0, 0)
}
to {
opacity: 1;
transform: none
}
}
.fadeInRight {
animation-name: fadeInRight
}
.text-center {
text-align: center !important;
font-size: xx-large;
}
.animated {
animation-duration: 5s;
animation-fill-mode: both
}
@keyframes fadeOutLeft {
0% {
opacity: 1
}
to {
opacity: 0;
transform: translate3d(-100%, 0, 0)
}
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class=" text-center">
<div class="container">
<div class="container2">
Content Should be here
</div>
<div id=Outgoing class="stackable">
<strong>Outgoing</strong>
</div>
<div id=Incoming class="stackable">
<strong>Incoming</strong>
</div>
</div>
<button id=Action>Action</button>
</div>
解决方案
如果您想要元素中的内容<div class="container2">
,那么您应该将其放置在 HTML 中。
<div class=" text-center">
<div class="container">
<div class="container2">
<div id="Outgoing" class="stackable">
<strong>Outgoing</strong>
</div>
<div id="Incoming" class="stackable">
<strong>Incoming</strong>
</div>
</div>
</div>
<button id=Action>Action</button>
</div>
我也会添加overflow: hidden
到.container2
CSS 中。
JSFIDDLE ---- [DCML] 已更新为带答案的版本
不幸的是,代码片段只支持 jQuery 的 2.1.1 版本。
[ 编辑 ]
值得注意的是,您缺少 and 周围的id=Outgoing
引号id=Incoming
。您还必须实际应用position: absolute
到这些元素,在这种情况下,您还需要对 应用一个height
值.container
,因为.container
不会尊重带有 的元素的“固有高度” position: absolute
。
JSFIDDLE 和代码片段已相应更新。
$(function() {
$('#Action').click(function(e) {
//start incoming
Enter('#Incoming', 'fadeInRight');
//add minor delay and then start outgoing
setTimeout(function() {
ExitAndHide('#Outgoing', 'fadeOutLeft');
}, 2000);
});
});
//outgoing function
function ExitAndHide(item, action) {
$(item).removeClass().addClass(action + ' animated').one('webkitAnimationEnd mozAnimationEnd MSAnimationEnd oanimationend animationend', function() {
$(item).hide();
});
};
//incoming function
function Enter(item, action) {
$(item).css("display", "inline-block");
$(item).removeClass().addClass(action + ' animated');
};
#Incoming, #Outgoing {
position: absolute;
}
.stackable {
position: absolute;
display: inline-block
}
.container {
position: relative;
width: 100%;
border: 1px solid #000;
}
.container2 {
position: relative;
width: 100%;
border: 1px solid #FF0000;
height: 100px;
overflow: hidden;
}
.fadeOutLeft {
animation-name: fadeOutLeft
}
@keyframes fadeInRight {
0% {
opacity: 0;
transform: translate3d(100%, 0, 0)
}
to {
opacity: 1;
transform: none
}
}
.fadeInRight {
animation-name: fadeInRight
}
.text-center {
text-align: center !important;
font-size: xx-large;
}
.animated {
animation-duration: 5s;
animation-fill-mode: both
}
@keyframes fadeOutLeft {
0% {
opacity: 1
}
to {
opacity: 0;
transform: translate3d(-100%, 0, 0)
}
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class=" text-center">
<div class="container">
<div class="container2">
<div id="Outgoing" class="stackable">
<strong>Outgoing</strong>
</div>
<div id="Incoming" class="stackable">
<strong>Incoming</strong>
</div>
</div>
</div>
<button id=Action>Action</button>
</div>
推荐阅读
- jquery - 从另一个函数获取返回对象
- laravel - laravel 升级到 5.2
- kotlin - Lambda 可以更改引用,但 fun 在 Kotlin 中不能
- linux - 如何重定向二进制文件的打开调用
- python - 如何在 python3 中将 dd-mm-yyyy 转换为 ISODate 格式
- maven - 运行测试运行程序时输出为 0 Scenarios
- php - Cakephp 2 插件路由在表单操作中不起作用
- c# - Linq:是否有替代方法来过滤字典内列表内的属性?
- angular - Angular 7 在 localhost IIS Express 中配置 x-frame-options
- c# - 如何使用资源文件 C# 以马拉地语打印报告