【发布时间】:2015-09-20 20:40:52
【问题描述】:
Stack Overflow 社区,借助一些网络资源和来自这个伟大社区的一些用户的帮助,创建了跟随标签列表过滤器。使用尽可能多的标签对任何类型的数据进行排序非常棒。
我想请你看看结果并建议如何添加一些动画或一些外部库,以便块的外观和重组看起来更平滑和自然。
例如,当我试图找到类似于这种过滤思想的东西时,我发现了这个很棒的Magento plugin,他们制作的动画非常棒,但不幸的是,这个插件不允许过滤 2 个或更多不同标签中的数据列表。
HTML
<h2>Composition</h2>
<ul class="filter" id="composition">
<li><a data-value="all" class="selected">All</a> </li>
<li><a data-value="landscape">Landscape</a></li>
<li><a data-value="portait">Portait</a> </li>
<li><a data-value="square">Square</a> </li>
</ul>
<h2>People</h2>
<ul class="filter" id="people">
<li><a data-value="all" class="selected">All</a> </li>
<li><a data-value="people">People</a></li>
<li><a data-value="nopeople">No People</a></li>
</ul>
<h2>Theme</h2>
<ul class="filter" id="theme">
<li><a data-value="all" class="selected">All</a> </li>
<li><a data-value="Nature">Nature</a></li>
<li><a data-value="Fashion">Fashion</a></li>
<li><a data-value="Mountains">Mountains</a></li>
<li><a data-value="Sea">Sea</a></li>
</ul>
<h2>Data to filter</h2>
<div class="item landscape people Nature"></div>
<div class="item portait nopeople Fashion"></div>
<div class="item landscape people Mountains"></div>
<div class="item portait people Sea"></div>
<div class="item square people Mountains"></div>
<div class="item landscape people Fashion"></div>
<div class="item square nopeople Sea"></div>
<div class="item landscape nopeople Mountains"></div>
<div class="item portait people Fashion"></div>
<div class="item square nopeople Sea"></div>
CSS
li {
list-style: none;
}
div {
height: 100px;
width: 100px;
background: grey;
display: inline-block;
opacity: 1s;
transition: opacity 1s ease-in-out;
}
JavaScript
$("ul.filter li a")
.on('click', function() {
var $this = $(this);
$this
.closest('ul')
.find('a')
.removeClass('selected');
$this
.addClass('selected');
var selector = [];
$('ul li a.selected')
.each(function() {
var selectedValue = $(this).data('value');
if (selectedValue !== 'all') {
selector.push(selectedValue);
}
});
$(".item")
.hide();
if (selector.length) {
$('.item.'+ selector.join('.')).show();
} else {
$(".item")
.show();
}
});
JSFiddle:https://jsfiddle.net/22vh08ah/13/
【问题讨论】:
标签: javascript jquery css jquery-animate transition