jQuery: expandable portfolio
by lovromar
HTML
<div id="portfolio">
<div class="row">
<div class="item" data-rel="0">1</div>
<div class="item" data-rel="1">2</div>
<div class="item" data-rel="2">3</div>
</div>
<div class="details"></div>
<div class="row">
<div class="item" data-rel="3">4</div>
<div class="item" data-rel="4">5</div>
<div class="item" data-rel="5">6</div>
</div>
<div class="details"></div>
<ul id="portfolio-details">
<li>Cras mattis consectetur purus sit amet fermentum. Morbi leo risus, porta ac consectetur ac, vestibulum at eros. Nulla vitae elit libero, a pharetra augue. Donec id elit non mi porta gravida at eget metus.</li>
<li>Nulla vitae elit libero, a pharetra augue. Donec id elit non mi porta gravida at eget metus.</li>
<li>Morbi leo risus, porta ac consectetur ac, vestibulum at eros.</li>
<li>Cras mattis consectetur purus sit amet fermentum. Morbi leo risus, porta ac consectetur ac, vestibulum at eros. Nulla vitae elit libero, a pharetra augue. Donec id elit non mi porta gravida at eget metus.</li>
<li>Nulla vitae elit libero, a pharetra augue. Donec id elit non mi porta gravida at eget metus.</li>
<li>Morbi leo risus, porta ac consectetur ac, vestibulum at eros.</li>
</ul>
</div>
CSS
#portfolio {
margin: 2em 0;
width: 100%;
}
#portfolio div.row {
margin-bottom: 1em;
height: 15em;
}
#portfolio div.details {
display: none;
padding: 5%;
margin: 0.5em;
background: #f5f5f4;
}
#portfolio div.row div.item {
width: 30%;
float: left;
height: 100%;
margin: 0 1.5%;
background: #eee;
text-align: center;
font-size: 4em;
line-height: 4;
cursor: pointer;
}
#portfolio #portfolio-details {
position: absolute;
top: -9999px;
}
JavaScript
var Portfolio = {
Elements: {
items: $('div.item', '#portfolio'),
details: $('#portfolio-details', '#portfolio')
},
fn: {
select: function() {
Portfolio.Elements.items.each(function() {
var $item = $(this);
var $row = $item.parent();
var $details = $row.next('div.details');
var $li = $('li', Portfolio.Elements.details);
$item.click(function() {
$('div.details').hide();
$details.empty();
var $html = $li.eq($item.data('rel')).html();
$details.html($html).slideDown(600);
$('html, body').animate({
scrollTop: 0
}, 0).animate({
scrollTop: $details.offset().top
}, 300);
});
});
}
}
};
Portfolio.fn.select();