为了更好地了解我正在尝试做什么,我有这个小提琴:
https://jsfiddle.net/tfisher9180/7efagjhj/1/
当你点击按钮时,3个方块淡出,然后橙色方块因为没有其他方块而立即卡住。
我想知道是否有办法让它看起来更加流畅,以便橙色框也可以向上滑动。
.square {transition: all 0.3s linear;}
这不像我预期的那样有效。
更新
将@陪伴标记为与我合作并帮助修复定位的正确答案。每个人的解决方案都很棒,而且工作得很好。 +1为所有人,并将不得不尝试一些看看哪个看起来最好!!!
答案 0 :(得分:3)
所以,这里使用CSS转换的问题是当它周围的框消失时橙色框的CSS属性没有改变 - 它只是根据变化回到DOM中的新位置这些其他框的显示属性。我想如果你想要这个工作,你将不得不写一个自定义的jQuery代码,淡出框,但不会立即隐藏它们,而是将它们向上滑动而不在视线范围内。
尝试这样的事情:
$('#sort').on('click', function() {
$('.square').each(function() {
if (!$(this).hasClass('square-orange')) {
$(this).animate({'opacity' : 0}, 400, 'swing', function () {
$(this).slideUp();
});
}
});
});
编辑:
关于跳过 - 确实不确定,但我尝试用自定义替换替换slideUp
,它似乎解决了它:
$('#sort').on('click', function() {
$('.square').each(function() {
if (!$(this).hasClass('square-orange')) {
$(this).animate({'opacity': 0}, 400, 'swing', function() {
$(this).animate({'height': 0}, 400, 'swing');
});
}
});
});
编辑(再次):实际上,现在看,我看到一个问题是顶部.row
仍然在滑动后的方框后保持高度....你可能还需要将其向上滑动,取决于您的要求..
编辑:
好的,上次,确定了你的定位 - 我觉得这样有效:
$('#sort').on('click', function() {
$('.square').each(function() {
if (!$(this).hasClass('square-orange')) {
$(this).animate({'opacity': 0}, 400, 'swing', function() {
$(this).animate({'height' : 0}, 400, 'swing');
});
}
});
});
.clearfix:after {
content: "";
display: table;
clear: both;
}
.row {
display: block;
clear: both;
}
.square {
width: 60px;
height: 60px;
display: block;
float: left;
margin-right: 10px;
margin-bottom: 10px;
}
.square-red {
background-color: red;
}
.square-blue {
background-color: blue;
}
.square-orange {
background-color: orange;
}
.square-purple {
background-color: purple;
}
#sort {
margin-top: 30px;
background-color: #414141;
border: 0;
color: #f2f2f2;
padding: 10px 15px;
cursor: pointer;
display: block;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="wrapper">
<div class="row row-top clearfix">
<div class="square square-red"></div>
<div class="square square-blue"></div>
</div>
<div class="row row-bottom clearfix">
<div class="square square-orange"></div>
<div class="square square-purple"></div>
</div>
</div>
<button id="sort">Sort Orange</button>
答案 1 :(得分:2)
使用此jquery:
$('#sort').on('click', function() {
$("row").eq(0).css("min-height",$(".square-red").height()+"px");
$(".square:not(.square-orange)").fadeOut().slideUp();
$(".square-red").parent().slideUp();
});
答案 2 :(得分:1)
试试这个:
$('#sort').on('click', function() {
$('.square').each(function() {
if (!$(this).hasClass('square-orange')) {
$(this).animate({
opacity: 0
}, 500, function() {
$(this).slideUp(100);
});
}
});
});
答案 3 :(得分:1)
您可以将td.price {
direction: ltr !important;
}
的{{1}}和position
设置为.square-orange
,并在#sort
开始前设置absolute
top
,当.position().top
元素动画完成时,使用.fadeOut()
,.promise()
为.animate()
设置动画
.square-orange
&#13;
.square:not(.square-orange)
&#13;
$('#sort').on('click', function() {
$(this).add(".square-orange")
.each(function() {
$(this).css({
"position": "absolute",
top: $(this).position().top
})
})
$('.square:not(.square-orange)').each(function() {
$(this).fadeOut();
})
.promise()
.then(function() {
$(".square-orange")
.animate({
top: 20
}, 1000, "linear")
})
});
&#13;
jsfiddle https://jsfiddle.net/7efagjhj/8/