質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
Cookie

HTTPにおけるCookieとは、クライアントのウェブブラウザ上に保存された一時的なデータを指します。クライアント側のJavaScriptでも、サーバー側のHTTPヘッダーでもクッキーの読み書き・修正・削除が可能です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

1回答

258閲覧

Cookie.jsを使用して閉じたバナーがしばらく表示されないように制御を追加したい

minchoco

総合スコア0

Cookie

HTTPにおけるCookieとは、クライアントのウェブブラウザ上に保存された一時的なデータを指します。クライアント側のJavaScriptでも、サーバー側のHTTPヘッダーでもクッキーの読み書き・修正・削除が可能です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2024/07/30 04:14

実現したいこと

閲覧いただきありがとうございます。

Wordpressにてサイトを作成しています。
会員登録のフローティングバナーをトップページで表示させたいと考えています。
更新や、毎回トップページに戻るたびにバナーが表示されてしまうと離脱率が上がってしまうと思い、
Cookie.jsを使用してバナーの×ボタンをクリックすれば1日は非表示になるようにしたいです。

発生している問題・分からないこと

JSにてCookieのコードを入力する箇所がイマイチ理解できておらず、
実装はしてみたものの、F5を押すと毎回フローティングバナーが表示されてしまいます。

該当のソースコード

HTML

1 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-cookie/1.4.1/jquery.cookie.min.js"></script> 2 3 4<div class="member-pop-wrap"> 5 <a href="<?php echo get_permalink(351); ?>" class="member-pop "><img 6 src="<?php echo $dir_path ?>top/img/memberpop_PC1.jpg"></a> 7 <button class="close-banner" type="button"> 8 <i class="las la-times"></i> 9 </button> 10</div>

JavaScript

1$(function () { 2 var btnOffset = $('.search').offset().top; 3 var winH = $(window).height(); 4 var fixedbtn = $('.member-pop-wrap'); 5 var closeButtonClicked = false; 6 7 fixedbtn.hide(); 8 9 $(window).scroll(function () { 10 if (closeButtonClicked) return; //クリックされていたら以下実行しない 11 if ($(this).scrollTop() > btnOffset - winH) { 12 fixedbtn.addClass('activepop'); 13 14 } else { 15 fixedbtn.removeClass('activepop'); 16 } 17 }); 18 19 // 閉じるボタン 20 $(document).ready(function () { 21 22 $('.close-banner').click(function () { 23 $(this).parent().removeClass('activepop') 24 closeButtonClicked = true; 25 }); 26 27 }); 28 29 $('.close-banner').on('click', function () { 30 $.cookie('memberbannerclose', 'true', { expires: 1 }); 31 }); 32 33});

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

同様の実装方法を記載してくださっているサイトを見ながら試行錯誤してみました。
が、結果は同様に更新のたびにフローティングバナーが表示されてしまいます。

補足

特になし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

cookieについてはcookie-jsの方が使い勝手がよいでしょう。
参考

html

1<script src="https://cdn.jsdelivr.net/npm/js-cookie@rc/dist/js.cookie.min.js"></script> 2<script> 3const vaild=30; 4const expires=vaild/86400; 5window.addEventListener('DOMContentLoaded', ()=>{ 6 let finish=Cookies.get("finish"); 7 if (!finish){ 8 dlg.showModal(); 9 dlg.addEventListener('close',()=>{ 10 finish=(new Date()).getTime()+vaild*1000; 11 Cookies.set("finish",finish,{expires}); 12 }); 13 } 14 setInterval((function myfunc(){ 15 let rest=(finish??0)-(new Date()).getTime(); 16 if(rest<=0) rest=0; 17 debug.textContent=((finish?rest:(vaild*1000))/1000).toFixed(3) 18 return myfunc; 19 })(),100); 20 document.querySelector('.close').addEventListener('click',()=>dlg.close()); 21}); 22</script> 23<div id="debug"></div> 24<dialog id="dlg">dialog 25<hr> 26<input type="button" value="close" class="close"></dialog>

※ちょっと挙動がわかりづらかったので修正
画面に残り秒数が表示されている間はダイアログは表示されません。
残りが0になった場合、リロードしてもあらたにページを開いてもダイアログが表示されます
ダイアログを閉じてから30秒間有効にしてあります。

投稿2024/07/30 05:08

編集2024/07/30 06:55
yambejp

総合スコア116468

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問