jqueryで絞り込み機能ともっと見るボタンを併用で設置したいと考えています。
絞り込みの種類⇒全て・新作・再販・予約
もっと見るをクリックで4件ずつ表示
全ての時は4つずつ表示がうまく動作するのですが、
新作・再販・予約をクリックしたときに最初の4件まで表示させることはできるのですが、
もっと見るをクリックで一気に他の分類のものまで全て表示されてしまいます。
またboxesの中身はjsonで取得させる予定です。
解決策はありますか?
html
1<div class="cta filter"> 2 <a class="tab-name all active" data-filter="all" href="#" role="button">すべて</a> 3 <a class="tab-name new-tab" data-filter="new-tab" href="#" role="button">新作</a> 4 <a class="tab-name re-tab" data-filter="re-tab" href="#" role="button">再販</a> 5 <a class="tab-name booking-tab" data-filter="booking-tab" href="#" role="button">予告と予約</a> 6</div> 7 8<div class="boxes"> 9 10<!--新作商品--> 11<div class="col1 new-tab tab-elm" data-category="new-tab"> 12<a href="" target="_top" class="block"> 13<div class="product-img img-col1"> 14<img src="" alt=""> 15</div> 16<div class="label-wrap"> 17<p class="img-label new-label">新作</p> 18</div> 19<p class="price-text">円<span>税込</span></p> 20</a> 21</div> 22<!--新作商品--> 23 24<!--再販商品--> 25<div class="col1 re-tab tab-elm" data-category="re-tab"> 26<a href="" target="_top" class="block"> 27<div class="product-img img-col1"> 28<img src="" alt=""> 29</div> 30<div class="label-wrap"> 31<p class="img-label re-label">再販</p> 32</div> 33<p class="price-text">円<span>税込</span></p> 34</a> 35</div> 36<!--再販商品--> 37 38<!--予約商品--> 39<div class="col1 booking-tab tab-elm" data-category="booking-tab"> 40<a class="block" href=""> 41<div class="product-img img-col1"> 42<img src="" alt=""> 43</div> 44<div class="label-wrap"> 45<p class="img-label booking-label">予約</p> 46</div> 47<p class="price-text">円<span>税込</span></p> 48</a> 49</div> 50<!--予約商品--> 51 52</div>
jquery
1$(document).ready(function(){ 2 3 var $filters = $('.filter [data-filter]'), 4 $boxes = $('.boxes [data-category]'); 5 6 $filters.on('click', function(e) { 7 e.preventDefault(); 8 var $this = $(this); 9 $filters.removeClass('active'); 10 $this.addClass('active'); 11 12 var $filterColor = $this.attr('data-filter'); 13 14 if ($filterColor == 'all') { 15 16 //全てをクリックされたときの処理 17 $('.tab-more-btn').remove(); 18 $boxes.removeClass('is-animated') 19 .fadeOut().promise().done(function() { 20 $('.boxes [data-category]:lt(4)').addClass('is-animated').fadeIn(); 21 $('.tab-more-btn:lt(4)').hide(); 22 $('.tab-elm:visible').closest('.boxes').after($('<div class="tab-more-btn">もっと見る</div>')); 23 $(document).on('click','.tab-more-btn',function(){ 24 $('.tab-elm:visible:lt(4)').addClass('is-animated').fadeIn(); 25 $('.tab-elm:visible').closest('.boxes').last().after($('.tab-more-btn')); 26 if($('.tab-elm:hidden').length==0) $('.tab-more-btn').remove(); 27 }); 28 29 }); 30 31 } else { 32 33 //全て以外をクリックしたときの処理 34 $('.tab-more-btn').remove(); 35 $('.tab-elm:visible').closest('.boxes').after($('<div class="tab-more-btn">もっと見る</div>')); 36 $boxes.removeClass('is-animated') 37 .fadeOut().promise().done(function() { 38 $boxes.filter('[data-category = "' + $filterColor + '"]:lt(4)').addClass('is-animated').fadeIn(); 39 }); 40 41 $(document).on('click','.tab-more-btn',function(){ 42 $boxes.filter('[data-category = "' + $filterColor + '"]:lt(4)').addClass('is-animated').fadeIn(); 43 $('.tab-elm:visible').closest('.boxes').last().after($('.tab-more-btn')); 44 if($('.tab-elm:hidden').length==0) $('.tab-more-btn').remove(); 45 }); 46 47 } 48 49 }); 50 51 //初期の全て表示されている状態 52 $('.tab-elm:gt('+(4-1)+')').hide(); 53 $('.tab-elm:visible').closest('.boxes').after($('<div class="tab-more-btn">もっと見る</div>')); 54 $(document).on('click','.tab-more-btn',function(){ 55 $('.tab-elm:lt('+($('.tab-elm:visible').length+4)+')').show(); 56 $('.tab-elm:visible').closest('.boxes').last().after($('.tab-more-btn')); 57 if($('.tab-elm:hidden').length==0) $('.tab-more-btn').remove(); 58 }); 59 60 }); 61コード
