使用jQuery的.fadeOut()
隐藏一些元素后,是否可以使用css3过渡动画元素移动?
我找到了某种解决方案here(参见“它也适用于网格”部分):
但是我的情况更像是这样: http://jsfiddle.net/CUzNx/5/
<div class="container">
<div id="item1" class="item">Test1</div>
<div id="item2" class="item">Test2</div>
<div id="item3" class="item">Test3</div>
<div id="item4" class="item">Test4</div>
<div id="item5" class="item">Test5</div>
<div id="item6" class="item">Test6</div>
<div id="item7" class="item">Test7</div>
</div>
<div style="clear:both">
<button onclick="$('#item1').fadeOut();">
Hide first
</button>
<button onclick="$('#item1').fadeIn();">
Show first
</button>
</div>
我有浮动div元素,并且在隐藏了一些元素之后,如果其他元素被动画化将会很好。有可能吗?
答案 0 :(得分:5)
你可以something like this使用一个CSS类来切换一些JavaScript和CSS转换来做你想要的而不是使用jQuery。
// The relevant CSS
.item {
// Your original code here
-webkit-transition: all .5s ease-in-out;
-moz-transition: all .5s ease-in-out;
-o-transition: all .5s ease-in-out;
transition: all .5s ease-in-out;
}
.hide {
width: 0;
height: 0;
opacity: 0;
margin: 0;
padding: 0;
}
// The JavaScript
var items = document.getElementsByClassName('item');
for(var i = 0; i < items.length; i ++) {
items[i].onclick = function() {
this.classList.toggle('hide');
}
};
function addBack() {
for(var i = 0; i < items.length; i ++) {
items[i].classList.remove('hide');
}
}
我还取出了你的按钮并添加了“添加所有元素”按钮:
<button onclick='addBack()'>Add all elements back</button>
如果你已经在项目的其他地方使用了jQuery,我也做了this jQuery version。以下是JavaScript:
function addBack() {
$('.item').each(function() {
$(this).removeClass('hide');
});
}
$('.item').on('click', function() {
$(this).toggleClass('hide');
});
此外,您不需要任何ID,所以如果您愿意,可以将它们取出。
答案 1 :(得分:0)
一种方法是用占位符替换要删除的div,然后为占位符和原始动画添加动画。
使用此代码段:Positioning an element over another element with jQuery
您的代码可以更改为类似的内容(我在此处点击该项目以触发删除):
<强> CSS 强>
div { box-sizing: border-box; }
.item, .placeholder {
float: left;
width: 100px;
height: 100px;
border: 1px solid black;
margin: 5px;
position: relative;
background: white;
-webkit-transition: all 1s ease;
}
.placeholder {
opacity: 0;
border: 0px;
}
.item.hide {
border: 1px solid rgba(0,0,0,0);
margin: 0px;
top: 500px;
opacity: 0;
overflow: hidden;
z-index: -1;
}
.placeholder.hide {
width: 0;
height: 0;
margin: 0;
border: 0;
}
<强>脚本强>
$('.item').on('click', function(evt) {
var $this = $(this);
var $new = $($this.clone());
$new.addClass('placeholder');
$this.replaceWith($new);
$this.positionOn($new);
$this.appendTo($('body'));
setTimeout(function() {
$this.css({top: '', left: ''});
$this.addClass('hide');
$new.addClass('hide');
}, 0);
});
摘录自: Positioning an element over another element with jQuery
// Reference: http://snippets.aktagon.com/snippets/310-positioning-an-element-over-another-element-with-jquery
$.fn.positionOn = function(element, align) {
return this.each(function() {
var target = $(this);
var position = element.position();
var x = position.left;
var y = position.top;
if(align == 'right') {
x -= (target.outerWidth() - element.outerWidth());
} else if(align == 'center') {
x -= target.outerWidth() / 2 - element.outerWidth() / 2;
}
target.css({
position: 'absolute',
zIndex: 5000,
top: y,
left: x
});
});
};
现在,当网格崩溃时,您的旧div会移动。
如果您愿意在代码中添加其他库,请查看Masonry/Isotope by Metafizzy。他们的目的就是做这类事。
答案 2 :(得分:0)
你不需要CSS过渡。只需使用.hide()
代替.fadeout()
<button onclick="$('#item1').hide(400);">
Hide first
</button>