我想知道是否可以附加元素并轻轻推动其他元素远离它。
以下是我的示例CodePen。
/*
var i = 0;
var timerId = setInterval(function(){
$("ul").append("<li></li> ");
i++;
if(i >= 3) {
clearInterval(timerId);
}
},800);
*/
$("button").on("click", function() {
$("ul").append("<li></li> ");
});
&#13;
button {
display: block;
margin: 0 auto;
cursor: pointer;
border: none;
width: 150px;
height: 40px;
border-radius: 5px;
}
ul {
display: block;
list-style: none;
padding: 10px;
margin: 0;
text-align: center;
}
li {
display: inline-block;
width: 50px;
height: 50px;
background: rgba(25, 160, 255, 1);
border: 3px solid black;
border-radius: 15px;
cursor: pointer;
margin: 0 3px;
transition: all 0.2s ease-in-out;
transform-orgin: center;
animation-name: popin;
animation-duration: 0.3s;
animation-timing-function: easeout;
}
li:hover{
transform: scale(1.2);
}
@keyframes popin {
0% {
transform: scale(0.2);
background: rgba(25, 160, 255, 0);
}
75% {
transform: scale(1.2);
background: rgba(25, 160, 255, 1);
animation-timing-function: easeout;
}
100% {
transform: scale(1);
background: rgba(25, 160, 255, 1);
}
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<button>Add More</button>
<ul>
<li></li>
<li></li>
<li></li>
</ul>
&#13;
您可以看到现有元素立即被推开,有没有办法为这个位置变化设置动画?
答案 0 :(得分:1)
Sure there is。通常,您只需要在添加元素时隐藏元素,然后延迟显示元素,JQuery非常擅长。像这样的东西。
$n = $("<li></li>").hide();
$("ul").append($n);
$n.show(300); // 300 being the number of milliseconds to take to get to full opacity
嗯,那是你通常做的事情。但是,由于您已经为transition
元素添加了li
属性,因此会出于某种不明原因覆盖JQuery的动画,从而停止缓慢的添加效果。
对此的解决方案非常简单,使用属性
transition: intial;
并将其添加到所有新创建的li
中,以便加载项效果生效,然后将其删除以添加恢复悬停功能。
编辑:另一个CodePen带有(略微)更好的逐步进入动画。在CSS中投入更多精力可以产生更好的效果,甚至可以使用JQueryUI。