【jQuery】固定バナーをcookieで制御する方法

【jQuery】固定バナーをcookieで制御する方法

ウェブサイトにおいて、固定バナーはユーザーに重要な情報やプロモーションを効果的に伝えるための有力なツールです。
しかし、バナーが常に表示されているとユーザーの視覚を邪魔する場合もあります。そこで、jQueryとクッキーを活用して、ユーザーの操作に応じてバナーの表示・非表示を制御する方法を紹介します。本記事では、具体的な実装手順とコード例を通じて、固定バナーの制御方法を詳しく解説します。

必要なライブラリの導入

固定バナーの制御には、jQueryとjQuery Cookieプラグインが必要です。以下のスクリプトタグをHTMLの<head>セクションまたは<body>の終了タグ直前に追加します。

<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-cookie/1.4.1/jquery.cookie.min.js"></script>

注意点:

  • jQuery自体が既に読み込まれていることを確認してください。
  • プラグインのバージョンは最新の安定版を使用することを推奨します。

固定バナーの基本構造

固定バナーは通常、画面の特定の位置に固定されて表示される要素です。ユーザーがページをスクロールしてもバナーは常に同じ位置に表示されます。以下は、固定バナーの基本的なHTML構造です。

HTML

<ul class="ft-fixedBnr formReset">
  <li>
    <button type="button"></button>
    <a href="">
      <img src="https://placehold.jp/e2e2e2/2c2c2c/150x150.png?text=バナー1" alt="バナー1" width="100" height="100" class="imgauto">
    </a>
  </li>
  <li>
    <button type="button"></button>
    <a href="">
      <img src="https://placehold.jp/e2e2e2/2c2c2c/150x150.png?text=バナー2" alt="バナー2" width="100" height="100" class="imgauto">
    </a>
  </li>
</ul>

CSS

.ft-fixedBnr {
  position: fixed;
  bottom: 30px;
  right: 30px;
  z-index: 1000;
  display: grid;
  gap: 10px;
}
.ft-fixedBnr li {
  display: none;
  width: 150px;
  position: relative;
}
.ft-fixedBnr li button {
  position: absolute;
  top: -10px;
  right: -10px;
  width: 20px;
  height: 20px;
  background-color: #fff;
  border: 1px solid #ccc;
  border-radius: 50%;
  z-index: 1;
}
.ft-fixedBnr li button::before{
  content: "";
  display: inline-block;
  --MASK: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDI3LjkuNiwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDkuMDMgQnVpbGQgNTQ5ODYpICAtLT4KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSLjg6zjgqTjg6Tjg7xfMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IgoJIHk9IjBweCIgdmlld0JveD0iMCAwIDMwMCAzMDAiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMwMCAzMDA7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5zdDB7ZmlsbDojODk2QjU4O30KPC9zdHlsZT4KPGcgaWQ9IuOCsOODq+ODvOODl180MzQ5MSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTgzOS42ODkgNzE1LjIzOCkgcm90YXRlKC00NSkiPgoJCgkJPHJlY3QgeD0iMTA5MS45OTEiIHk9IjE1MC4xMjQiIHRyYW5zZm9ybT0ibWF0cml4KC0xIDIuNTM1MTU5ZS0wNiAtMi41MzUxNTllLTA2IC0xIDIxOTguOTgxIDYwMC4yNDUxKSIgY2xhc3M9InN0MCIgd2lkdGg9IjE0Ljk5OSIgaGVpZ2h0PSIzMDAiLz4KCQoJCTxyZWN0IHg9Ijk0OS40NzYiIHk9IjI5Mi42MiIgdHJhbnNmb3JtPSJtYXRyaXgoLTEgMi41MzUxNTllLTA2IC0yLjUzNTE1OWUtMDYgLTEgMjE5OC45NTE5IDYwMC4yMzY2KSIgY2xhc3M9InN0MCIgd2lkdGg9IjMwMCIgaGVpZ2h0PSIxNC45OTkiLz4KPC9nPgo8L3N2Zz4K) no-repeat center center / 100%;
  mask: var(--MASK);
  -webkit-mask: var(--MASK);
  background-color: #000;
  aspect-ratio: 1/1;
  width: 50%;
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}
@media (hover: hover){
  .ft-fixedBnr li button:hover{
    cursor: pointer;
  }
}

ポイント:

  • <ul> 要素に固定バナーのクラス名を付与しています。
  • 各バナーは <li> 要素内に配置され、閉鎖ボタンとリンクが含まれています。
  • 各バナーの <li>デフォルトでdisplay: none;にしておくことでページ遷移時にバナーがチラつかくことを防止します。

使用しているリセットクラスについて:

imgauto

当ブログではimgタグに対して以下のリセットを行っております。

img{
	height: auto;
	max-width: 100%;
	box-sizing: unset;
	vertical-align: bottom;
}
.imgauto{
	height: auto;
	width: 100%;
	box-sizing: unset;
	line-height: 1rem;
	display: block;
}
formReset

当ブログではform系のタグについて以下のリセットを行っております。

.formReset button,
.formReset input[type="button"],
.formReset input[type="submit"],
.formReset input[type="text"],
.formReset input[type="image"],
.formReset select{
	background-color: unset;
	color: #000;
	-webkit-appearance: none;
	border-radius: 0;
	border: none;
}
.formReset input[type="text"],
.formReset input[type="text"]::placeholder{
	color: #000;
}
@media (hover: hover){
  .formReset button:hover,
	.formReset input[type="button"]:hover,
	.formReset input[type="submit"]:hover,
	.formReset input[type="image"]:hover,
	.formReset select:hover{
		cursor: pointer;
	}
}
@media screen and (max-width: 767px){
  .formReset input[type="text"],
	.formReset input[type="text"]::placeholder{
		font-size: 16px;
	}
}

jQueryコードの実装

以下のjQueryコードを使用して、固定バナーの表示・非表示をクッキーで制御します。

$(function () {
  const fixedBnrItems = $(".ft-fixedBnr li");
  const fixedBnrCloseButtons = $(".ft-fixedBnr li button");

  let hiddenItems = $.cookie("hiddenItems") ? $.cookie("hiddenItems").split(",") : [];
  fixedBnrItems.each(function (index, element) {
    if (!hiddenItems.includes(index.toString())) {
      $(element).show();
    }
  });

  fixedBnrCloseButtons.on("click", function () {
    const index = $(this).parent().index();
    $(this).parent().hide();

    let hiddenItems = $.cookie("hiddenItems") ? $.cookie("hiddenItems").split(",") : [];
    if (!hiddenItems.includes(index.toString())) {
      hiddenItems.push(index);
    }
    $.cookie("hiddenItems", hiddenItems.join(","), { expires: 1 / 24 });
  });
});

コードの詳細説明

要素の取得:

const fixedBnrItems = $(".ft-fixedBnr li");
const fixedBnrCloseButtons = $(".ft-fixedBnr li button");
  • fixedBnrItems: すべてのバナーアイテムを取得。
  • fixedBnrCloseButtons: 各バナー内の閉鎖ボタンを取得。

閉鎖ボタンのクリックイベント:

  fixedBnrCloseButtons.on("click", function () {
    const index = $(this).parent().index();
    $(this).parent().hide();

    let hiddenItems = $.cookie("hiddenItems") ? $.cookie("hiddenItems").split(",") : [];
    if (!hiddenItems.includes(index.toString())) {
      hiddenItems.push(index);
    }
    $.cookie("hiddenItems", hiddenItems.join(","), { expires: 1 / 24 });
  });
  • ユーザーが閉鎖ボタンをクリックすると、対応するバナーを非表示にします。
  • 非表示にしたバナーのインデックスをクッキーに記録し、1時間後にクッキーが削除されるよう設定します。

ページ読み込み時のバナー表示制御:

let hiddenItems = $.cookie("hiddenItems") ? $.cookie("hiddenItems").split(",") : [];
  fixedBnrItems.each(function (index, element) {
    if (!hiddenItems.includes(index.toString())) {
      $(element).show();
    }
  });
  • ページが読み込まれる際、クッキーに記録されていないバナーのインデックスを取得し、該当するバナーを表示します。

まとめ

jQueryとクッキーを活用することで、固定バナーの表示・非表示をユーザーの操作に応じて柔軟に制御することができます。本記事では、具体的な実装手順とコード例を通じて、固定バナーのクッキー制御方法を解説しました。以下のポイントを押さえて、自サイトのユーザーエクスペリエンスを向上させるカスタマイズを行いましょう。

  • ユーザーエクスペリエンスの向上: 不必要なバナー表示を避けることで、ユーザーのサイト閲覧を快適にします。
  • クッキーの活用: ユーザーの操作状態をクッキーで管理し、表示状態を保持します。
  • カスタマイズ性: バナーの表示期間や位置、制御方法を柔軟に変更可能です。

ぜひ、今回紹介した方法を参考に、固定バナーの効果的な制御を実装してみてください。

この記事をシェアする

どなたでもコメントや質問をどうぞ

スパム対策のため、承認作業を行うまでは表示されません。ご了承ください。

CAPTCHA