【问题标题】:Tag list filter animation标签列表过滤动画
【发布时间】: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


    【解决方案1】:

    您对此有何看法?

    fiddle

    CSS

    li{
      transition: all 0.5s;
      overflow:hidden;
    }
    

    JS

    $(".item").css("height","0");
    if (selector.length) {
        $('.item.'+ selector.join('.')).css("height", "15px");
    }
    

    我确实发现手头问题的解决方案(使用 css 类过滤数据)有点奇怪。您应该将数据添加到 JS 并将其注入 html。

    【讨论】:

    • 这只是一个概念,绝对高度可能不适合较长的项目,但动画不适用于 height:auto
    • 你好,布雷特,我不确定我是否做得好 (jsfiddle.net/22vh08ah/14)。但无论如何,首先我想道歉,因为我已经为人们加载了旧版本的小提琴,在我的情况下,这个插件对带有照片的块进行排序,我实际上是在尝试制作类似于 docs.haundodesign.com/magnet/#animation_types 的东西。也许你有一些想法如何实现这些家伙制作的动画?
    • jsfiddle.net/22vh08ah/15 确实忘记更新小提琴,请看一下保存的:)
    • 如果答案正确,请将其标记为答案。
    猜你喜欢
    • 1970-01-01
    • 2017-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-04
    • 1970-01-01
    • 2012-03-24
    • 2013-08-05
    相关资源
    最近更新 更多