簡體   English   中英

如何重置 jquery/javascript 過濾器

[英]How to reset jquery/javascript filter

我有一個 div 項目列表,我正在通過 JS 過濾/排序。 每個項目都會動畫到位 - 在這種情況下,會放大到其最終大小。

當我通過按鈕過濾項目時,屏幕上的任何內容都不會再次播放此動畫。

每次選擇新按鈕時如何重置過濾器,因此無論正在過濾什么以及它當前是否在屏幕上,每個項目總是動畫到位?

在這里工作 CODEPEN

<div class="filter-list">
  <button class="active btn" id="all">All</button>
  <button class="btn" id="oranges">Oranges</button>
  <button class="btn" id="apples">Apples</button>
  <button class="btn" id="bananas">Bananas</button>
</div>
<div class="grid">
  <div class="artist-img item oranges">oranges</div>
  <div class="artist-img item apples">apples</div>
  <div class="artist-img item bananas">oranges</div>
</div>

JS

 var $items = $(".item");
  var $btns = $(".btn").click(function () {
    if (this.id == "all") {
      $items.show();
    } else {
      var $el = $("." + this.id).show();
      $items.not($el).hide();
    }
    $btns.removeClass("active");
    $(this).addClass("active");
  });

CSS

      @keyframes entrance {
    0% {
      transform: scale(0.5);
    }
    100% {
      transform: scale(1);
    }
  }
  .grid > div {
    padding: 1rem;
    position: relative;
    animation-duration: 0.5s;
    animation-name: entrance;
  }

要重置元素,您必須將它們恢復到動畫的 0%。 最簡單的方法是先將它們全部隱藏。 因此,與其隱藏所有當前未選擇的內容,不如先隱藏所有內容,然后再顯示您想要顯示的內容。 現在立即隱藏和顯示並沒有給第一個元素恢復到 0% 所需的時間,所以設置一個 1 毫秒的超時來給它時間。 這是修改后的代碼:

 var $items = $(".item"); var $btns = $(".btn").click(function() { $items.hide(); setTimeout(() => { if (this.id == "all") { $items.show(); } else { $("." + this.id).show(); } }, 1); $btns.removeClass("active"); $(this).addClass("active"); });
 button { padding: 1rem; } .filter-list { margin: 1rem; } .grid { display: grid; grid-template-columns: repeat(4, 1fr); grid-gap: 1rem; row-gap; 1rem; } .grid>div { background: #000; padding: 3rem; animation-duration: 0.5s; animation-name: entrance; color: #fff; } @keyframes entrance { 0% { transform: scale(0.5); } 100% { transform: scale(1); } }
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div class="filter-list"> <button class="active btn" id="all">All</button> <button class="btn" id="oranges">Oranges</button> <button class="btn" id="apples">Apples</button> <button class="btn" id="bananas">Bananas</button> </div> <div class="grid"> <div class="artist-img item oranges"> oranges </div> <div class="artist-img item apples"> apples </div> <div class="artist-img item oranges"> oranges </div> <div class="artist-img item oranges"> oranges </div> <div class="artist-img item apples"> apples </div> <div class="artist-img item bananas"> bananas </div> <div class="artist-img item apples"> apples </div> <div class="artist-img item bananas"> bananas </div> </div>

這個 JS 能達到你想要的嗎?

 var $items = $(".item");
  var $btns = $(".btn").click(function () {
    if (this.id == "all") {
      $items.show();
    } else {
      $items.hide();
      var $el = $("." + this.id).show();
      // $items.not($el).hide();
    }
    $btns.removeClass("active");
    $(this).addClass("active");
  });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM