jquery - 如何在过渡期间过滤选项而不让所有内容重新出现?

标签 jquery html css filter

我正在尝试实现一个带有按钮的过滤器,您可以在其中单击一个按钮,页面上的某些面板就会被过滤掉。在 w3schools 和堆栈溢出之间,我已经能够弄清楚基础知识,但我在动画方面遇到了麻烦。

问题:
这就是现在发生的事情。假设我显示过滤器 1 选项。

  • 我点击过滤器 2
  • 过滤器 1、2 和 3 的所有面板出现
  • 过滤器 1 和 3 淡出的选项
  • 滤镜 2 的选项淡入

我怎样才能让它在转换之间停止出现所有内容?我正在努力实现这样的目标:

  • 正在显示过滤器 1 的选项
  • 我点击过滤器 2
  • 过滤器 1 选项淡出
  • 过滤器 2 选项淡入

我觉得可能有一个简单的解决方法,但我找不到任何东西(也许我不知道要找什么?)。我想尝试一个大的 if/else 循环,其内容类似于“如果选择了过滤器 1 并且刚刚选择了过滤器 2,则淡出过滤器 1 并淡入过滤器 2”。但这看起来很乱。

感谢您的帮助。

按钮和面板结构:

<div id='filter'>
    <center>
        <button class='all'>Show All</button>
        <button class='filter1'>Filter 1</button>
        <button class='filter2'>Filter 2</button>
        <button class='filter3'>Filter 3</button>
    </center>
</div>

<div class='post filter1 all'>
     <div class="col-sm-6"> 
        <div class="panel panel-default">
            <div class="panel-body">
                   <a href="lessons/option1.php"><img 
                   src="images/option1.png" alt="" class="standard-image">
                   </a> 
            </div>
        </div>
     </div>
</div>

过滤代码:

<script>
$("#filter button").each(function() {
    $(this).on("click", function(){
        var filtertag = $(this).attr('class');
        $('.post').fadeIn();
        $('.post:not(.' + filtertag + ')').fadeOut();
    });
});
</script>

最佳答案

解决方案是只淡入匹配的元素。此外,此处的 .each() 是不必要的,因为 .on() 已经将处理程序附加到每个匹配的元素。

$("#filter button").on("click", function(){
  var filtertag = $(this).attr('class');
  $('.post.' + filtertag).fadeIn();
  $('.post:not(.' + filtertag + ')').fadeOut();
});
.post.all { display: none}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id='filter'>
    <center>
        <button class='all'>Show All</button>
        <button class='filter1'>Filter 1</button>
        <button class='filter2'>Filter 2</button>
        <button class='filter3'>Filter 3</button>
    </center>
</div>

<div class='post filter1 all'>
Filter 1
</div>

<div class='post filter2 all'>
Filter 2
</div>

<div class='post filter3 all'>
Filter 3
</div>

关于jquery - 如何在过渡期间过滤选项而不让所有内容重新出现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48471494/

相关文章:

javascript - 当另一个下拉菜单打开时,angularjs 下拉菜单不会关闭

jquery - 如何将JSON渲染为jQuery

javascript - 属性 'success' 不存在 - jQuery

javascript - 为什么jQuery或诸如getElementById之类的DOM方法找不到元素?

javascript - 只有当它的父节点(div)有一个特定的类名时,才将类添加到<img>? - 没有 jQuery

html - 全屏引导网页只占显示的一半

javascript - Canvas使用后不绘图

javascript - 进度条完成后显示按钮

javascript - 带有 css 和 jquery 的子菜单没有显示子菜单

javascript - 如何加速淡入/淡出