我想要实现的是这个动画
我缺少什么?如果不使用position:absolute,我怎样才能达到上述结果
到目前为止我做了什么
HTML:
CSS
#product_list {
right: 0;
left: 0;
text-align: center;
}
.product-list .item {
display: inline-block;
position: relative;
border-radius: 3px;
margin: 4px;
overflow: hidden;
text-align: start;
background-color: #fff;
box-shadow: 0 2px 10px 0 rgba(0,0.16);
-webkit-transition: border-radius 500ms cubic-bezier(0.4,0.2,1),width 500ms cubic-bezier(0.4,height 500ms cubic-bezier(0.4,-webkit-transform 500ms cubic-bezier(0.4,1);
}
.item-top {
width: 200px;
height: 200px;
}
.item-bottom {
padding: 8px;
line-height: 1.5;
}
使用Javascript
$('.item').on('click','a',function(e){
e.preventDefault();
var target=$(e.currentTarget);
var par=target.parent();
par.css({width:par.width()+'px',height:par.height()+'px'});
//par.css({height:'300px',width:'500px'});
par.animate({height:'300px'},{"queue": false,"duration":500}).animate({width:'500px'},500,'linear'); par.css({transform:'translate('+0+'px,'+50+'px)scale(1.1,1.1)'});
par.css({'transform-origin':'0,0',zIndex:'9999'});
});
最佳答案
这可能对您有所帮助:http://jsfiddle.net/holp/vkgLdv38/1
CSS
@import url(http://fonts.googleapis.com/css?family=Source+Sans+Pro:300);
.product-list { list-style: none; padding: 0 }
.product-list * { font-family: 'Source Sans Pro',sans-serif; }
.product-list li {
width: 200px;
float: left;
margin: 20px;
Box-shadow: 0 0 10px rgba(0,0.2);
background-color: #fff;
overflow: hidden;
cursor: pointer;
}
.product-list li div {
width: 200px;
height: 200px;
z-index: 10;
}
.product-list li h3 {
margin: 10px;
z-index: 1;
}
.product-list li p {
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
margin: 10px;
height: 20px;
z-index: 1;
}
.place {
visibility: hidden;
}
HTML
JS
chosen = null;
$('li').click(function() {
var object = $(this);
var margin = object.css('margin').replace(/[^-\d\.]/g,'');
var scroll = $(window).scrollTop();
if (chosen == null) {
var ft = ($(window).height() / 2) - (300 / 2) - margin; var fl = ($(window).width() / 2) - (600 / 2) - margin;
$('.product-list li').not(this).css('cursor','default');
object.clone().insertAfter(object).addClass('place');
object.css({'position':'fixed','top': object.offset().top - margin - scroll,'left': object.offset().left - margin}).animate({'top':ft,'left':fl,'width':'600px','height':'300px'});
object.children('div').animate({'width':'300px','height':'300px'});
setTimeout( function(){
object.children('div').css({'position':'absolute','top':'0','left':'0'});
object.children('h3').css({'position':'absolute','left':'0'}).animate({'left':'300px'});
object.children('p').css({'position':'absolute','top':'40px','left':'0','white-space':'normal','width':'280px','height':'240px'}).animate({'left':'300px'});
},300);
chosen = this;
} else if (chosen == this) {
var ph = $('.place'); var pht = ph.offset().top - margin - scroll; var phl = ph.offset().left - margin; var phw = ph.width(); var phh = ph.height();
object.children('p').animate({'left':'0'});
object.children('h3').animate({'left':'0'});
setTimeout( function(){
object.children('p').removeAttr('style');
object.children('h3').removeAttr('style');
object.children('div').css({'position':'','top':'','left':''}).animate({'width':'200px','height':'200px'});
object.animate({'top':pht,'left':phl,'width':phw,'height':phh});
setTimeout( function(){
object.children('p').removeAttr('style');
object.children('h3').removeAttr('style');
object.children('div').css({'width':'','height':'','left':''});
ph.remove();
object.removeAttr('style');
$('.product-list li').not(this).css('cursor','');
chosen = null;
},500);
},300);
}
});