フロントの人の雑多メモ

【bxSlider】スライドを動的に追加したり削除したり増減に対応する方法

【bxSlider】スライドを動的に追加したり削除したり増減に対応する方法

jQueryのスライダープラグイン「bxSlider」でスライドを動的に追加したり削除したり、増減に対応するサンプルコードをご紹介します。

サンプル

「このスライドを削除」をクリックすると、スライドが削除されます。

次の画像をクリックすると、現在のスライドの次に追加されます。

次の画像をクリックすると、末尾に追加されます。

やり方

こんなHTMLです。
追加は「現在のスライドの次に追加」モードと「末尾に追加」モードを用意してますが、片方でも大丈夫です。

<!--スライダー-->
<div id="bxslider">
	<div class="slide"><img src="img01.jpg"><button>このスライドを削除</button></div>
	<div class="slide"><img src="img02.jpg"><button>このスライドを削除</button></div>
	<div class="slide"><img src="img03.jpg"><button>このスライドを削除</button></div>
	<div class="slide"><img src="img04.jpg"><button>このスライドを削除</button></div>
</div>

<!--現在のスライドの次に追加-->
<ul class="add_list">
	<li><img src="img01.jpg"></li>
	<li><img src="img02.jpg"></li>
	<li><img src="img03.jpg"></li>
	<li><img src="img04.jpg"></li>
</ul>

<!--末尾に追加-->
<ul class="add_list_last">
	<li><img src="img01.jpg"></li>
	<li><img src="img02.jpg"></li>
	<li><img src="img03.jpg"></li>
	<li><img src="img04.jpg"></li>
</ul>

そして、JSはこちら。

$(function(){
	//bxSlider定義
	let initial = 0;
	let bxslider = $("#bxslider").bxSlider({
		auto: true,
		touchEnabled:false,
		startSlide: initial,
		onSlideAfter: function($slideElement){
			$("#bxslider .slide").removeClass("active-slide");
			$slideElement.addClass("active-slide");
		}
	});

	//現在のスライドの次に追加
	$(".add_list img").on("click", function(){
		//クリックした画像のsrcを取得
		let src = $(this).attr("src");
		//現在のスライドにクラス付与
		if($(".bx-wrapper #bxslider .active-slide").length){
			$(".bx-wrapper #bxslider .active-slide").addClass("_current");
		}else{
			//active-slideが無ければ最初のスライドにクラス付与
			$(".bx-wrapper #bxslider .slide:not(.bx-clone)").eq(0).addClass("_current");
		}
		//bxSlider解除
		bxslider.destroySlider();
		//現在のスライドが何枚目か数える
		initial = $("#bxslider .slide._current").index();
		//現在のスライドの次にスライド追加
		$("#bxslider ._current").after('<div class="slide"><img src="'+src+'"><button>このスライドを削除</button></div>');
		//クラス削除
		$("#bxslider ._current").removeClass("_current");
		//再度bxSlider
		bxslider = $("#bxslider").bxSlider({
			auto: true,
			touchEnabled:false,
			startSlide: initial,
			onSlideAfter: function($slideElement){
				$("#bxslider .slide").removeClass("active-slide");
				$slideElement.addClass("active-slide");
			}
		});
		//削除再定義
		remove();
	});

	//末尾に追加
	$(".add_list_last img").on("click", function(){
		//クリックした画像のsrcを取得
		let src = $(this).attr("src");
		//現在のスライドにクラス付与
		if($(".bx-wrapper #bxslider .active-slide").length){
			$(".bx-wrapper #bxslider .active-slide").addClass("_current");
		}else{
			//active-slideが無ければ最初のスライドにクラス付与
			$(".bx-wrapper #bxslider .slide:not(.bx-clone)").eq(0).addClass("_current");
		}
		//bxSlider解除
		bxslider.destroySlider();
		//現在のスライドが何枚目か数える
		initial = $("#bxslider .slide._current").index();
		//末尾にスライド追加
		$("#bxslider").append('<div class="slide"><img src="'+src+'"><button>このスライドを削除</button></div>');
		//クラス削除
		$("#bxslider ._current").removeClass("_current");
		//再度bxSlider
		bxslider = $("#bxslider").bxSlider({
			auto: true,
			touchEnabled:false,
			startSlide: initial,
			onSlideAfter: function($slideElement){
				$("#bxslider .slide").removeClass("active-slide");
				$slideElement.addClass("active-slide");
			}
		});
		//削除再定義
		remove();
	});

	//削除定義
	function remove(){
		//イベントを一旦削除
		$("#bxslider .slide button").off();
		//「このスライドを削除」をクリックしたとき
		$("#bxslider .slide button").on("click", function(){
			let remove_slide = $(this).closest(".slide");
			//そのスライドにクラス付与
			remove_slide.addClass("_remove");
			//次のスライドがあればクラス付与
			if(remove_slide.next(".slide").length){
				remove_slide.next(".slide").addClass("_current");
			}else{
				//無ければ現在のスライドにクラス付与
				remove_slide.addClass("_current");
			}
			//bxSlider解除
			bxslider.destroySlider();
			//次のスライドが何枚目か数える
			initial = $("#bxslider .slide._current").index();
			//クラス削除
			$("#bxslider ._current").removeClass("_current");
			//スライドを削除
			$("#bxslider ._remove").remove();
			//再度bxSlider
			bxslider = $("#bxslider").bxSlider({
				auto: true,
				touchEnabled:false,
				startSlide: initial,
				onSlideAfter: function($slideElement){
					$("#bxslider .slide").removeClass("active-slide");
					$slideElement.addClass("active-slide");
				}
			});
		});
	}
	remove();
});

かなりごちゃごちゃしてしまいましたが、

スライドを追加・削除する際は

一度「bxslider.destroySlider();」でbxSliderを解除し、appendでスライドを追加または、removeでスライドを削除。

その後、再度bxSliderを実行します。

現在のスライドの次に追加したり、追加削除した際に再び現在のスライドからスタートするために、色々工夫をしています。

コメント

「できました!」などの報告もお待ちしております。

内容を確認の上、個人情報などは省いて掲載させていただきます。

お名前・メールアドレスも入力する

メールで返信がほしい場合に入力してください。

頂いた個人情報は開示しません。返信のためだけに利用いたします。

直接送信されます。確認の上、「送信」してください。

お役に立てましたら応援をお待ちしております!
頂いた応援は子育てに活用させていただきます。

OFUSEで応援を送る


または以下のボタンからなにか買って応援 (PR)

Amazon

楽天市場

Yahoo!ショッピング

Amazonのアソシエイトとして「けん」は適格販売により収入を得ています。

シェア

Twitterでシェア Facebookでシェア LINEでシェア はてなブックマークでシェア

お役に立てましたら応援をお待ちしております!
頂いた応援は子育てに活用させていただきます。

OFUSEで応援を送る