【发布时间】:2017-12-15 21:55:43
【问题描述】:
我有一个多卡片布局,其中包含在单击“更多信息”链接时扩展宽度和高度的 div。动画可能会更流畅,但不知道该怎么做。
CSS:
.card{
width: 300px;
height: 500px;
position: relative;
box-shadow:none;
display:inline-block;
margin: 10px;
border-radius: 5px;
background-color: #fff;
text-align: left;
box-shadow: 2px 3px 12px 0px rgba(0,0,0,0.75);
transition: all .8s;
}
HTML:
<div class="card" data-filter="family">
<div class="card-img-container"></div>
<div class="card-text-container">
<h2 class="card-title">Card Title</h2>
<p class="card-body"
data-orig-text="Get your Kicks on Route 66 and explore national parks, monuments and historical site while visiting native animals, including reptiles. Meet Smokey Bear and friends and learn how to protect, respect and connect with nature and its animals. WTF"
data-short-text="Get your Kicks on Route 66 and explore national parks, monuments and historical site while visiting native animals, including reptiles. Meet Smokey Bear and friends and l..."> </p>
<p class="card-location">
Location: Center Patio <br>
Time: Fri 12pm - 11pm | Sat & Sun 10am - 11pm | Labor Day 12pm - 11pm <br>
Cost: FREE <br>
Age: ALL AGES <br>
</p>
</div>
<div class="card-link-container">
<a class="more-link">More Info</a>
</div>
</div>
jQuery:
moreLinks.click(function(event){
var cardClicked = $(this).parents('.card');
var textContainer = cardClicked.find('.card-text-container');
var cardClickText = cardClicked.find('.card-body');
var locationInfo = cardClicked.find('p.card-location');
/*Checks to see if card is already open*/
if($(this).html() === 'Back'){
if($(window).width() >= 768){
$("html, body").animate({ scrollTop: 400 }, "slow");
}
cardClickText.text(cardClickText.attr('data-short-text'));
locationInfo.fadeOut('easeOutExpo');
cardClicked.css({
'width': '300px',
'height' : '500px',
'margin' : '10px',
'display': 'inline-block'
});
cardClicked.find('.card-img-container').css({
'height' : '200px'
});
$(this).html('More Info');
textContainer.removeClass('expanded');
}
/*If it isnt open, then depending on device transform width and height or just height*/
else{
$(this).html('Back');
cardClickText.text(cardClickText.attr('data-orig-text'));
locationInfo.fadeIn('easeInQuint');
var pos = cardClicked.position();
/*If desktop*/
if($( window ).width() >= 768){
cardClicked.css({
'display': 'block',
'margin' : '0 auto',
'width': '750px',
'height' : '750px'
});
cardClicked.find('.card-img-container').css({
'height' : '350px'
});
}
/*If mobile*/
else{
cardClicked.css('height', '750px');
}
textContainer.addClass('expanded');
// $("html, body").animate({ scrollTop: pos.top + 900 }, "slow");
}
});
我试图让最终结果在响应点击“更多信息”和“返回”的方式上更加流畅。任何建议都非常感谢。
【问题讨论】:
-
“更流畅”是什么意思?放大的 div 是否应该在其他 div 之上?
-
@ItayGanor 我尝试使用克隆方法进行类似的操作,但我一直遇到问题,因为当需要使用 .html('') 从顶部移除卡时,我会丢失克隆和原卡。对于将点击的卡片置于所有其他卡片之上,您有什么建议吗?
标签: javascript jquery css jquery-animate