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

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

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

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

キャッシュ

キャッシュはドキュメントやデータを一時的に保管するもので、アクセス処理時間を短くするために使用されます。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

2回答

2122閲覧

JQueryとCookieを使ってサイトの背景色を変えたい

DylanSpriggs

総合スコア10

Cookie

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

キャッシュ

キャッシュはドキュメントやデータを一時的に保管するもので、アクセス処理時間を短くするために使用されます。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2018/11/20 00:00

前提・実現したいこと

jqueryとjquery.cookie.jsを使って、webサイトのBackground-colorを変えるコードを作っています。
addClassで追加したclassをクッキーに保存して、リロードしてもclassがついたままにしようとしています。

発生している問題・エラーメッセージ

addClassでつけたclassがリロードしてもついたままにするコードはできたのですが、クッキーを読み込むのが遅いのか、リロードするとaddClassでつけたclassがhtmlに反映するまでに1〜2秒のラグがあり、classをつけていない時のcssが一瞬表示されてしまいます

エラーメッセージは吐いていません。

該当のソースコード

html

1<body> 2 3<!-- 途中のhtmlは省略 --> 4 5<div class="md-thema" id="themaToggle"> 6 <span class="themaLight" style="cursor: pointer;">ライト</span> 7 <span class="themaDark" style="cursor: pointer;">ダーク</span> 8</div> 9 10<!-- 途中のhtmlは省略 --> 11 12</body>

css

1body { 2 background-color: white; 3} 4 5body.dark { 6 background-color: black; 7} 8

jquery

1$(function() { 2 $(".themaDark").click(function() { 3 4 $("body").addClass("dark"); 5 $(".themaDark").addClass("current"); 6 7 if ($.cookie("color_display")) { 8 9 $.cookie("color_display", '', {expires: -1}); 10 11 } else { 12 13 $.cookie("color_display", '1', {expires: 7}); 14 15 } 16 17 }); 18 19 if ($.cookie("color_display")) { 20 21 $("body").addClass("dark"); 22 $(".themaDark").addClass("current"); 23 24 } else { 25 26 27 } 28 29}); 30 31$(function() { 32 $(".themaLight").click(function() { 33 34 $("body").removeClass("dark"); 35 $(".themaDark").removeClass("current"); 36 $(".themaLight").addClass("current"); 37 38 if ($.cookie("color_display")) { 39 40 $.cookie("color_display", '', {expires: -1}); 41 42 } else { 43 44 $.cookie("color_display", '1', {expires: 7}); 45 46 } 47 48 }); 49 50 if ($.cookie("color_display")) { 51 52 $(".themaLight").addClass("current"); 53 54 } else { 55 56 57 } 58 59});

試したこと

クッキーの読み込みが遅いのか、リロードした時にclassがすぐに付かないので、jsの記述をhtml内に記述してみたり、<link>の並び順を変えてみたりしてみましたが素人考えでは歯が立たず。。。

補足情報(FW/ツールのバージョンなど)

サイトはwordpressで作っています。リロードしたさいに、bodyにclassを一瞬でつける方法はないでしょうか?上記の方法だとリロードした際に、classがbodyに付くまでに1-2秒のラグがあり、classの.darkが付く前のbackground-color:white;が一瞬表示されてしまします。

上記の例ではbackgroundを変えているだけですが、実際はbody.darkを元に、その他のcssを結構いじる予定です。colorやborder、box-shadowなどなど。

初めての質問であまり伝わっていないかもしれませんが、解決方法がわかる方は教えていただけると助かります。

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

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

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

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

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

guest

回答2

0

$(function() {


この記述は「ドキュメント読み込み後」実行されるので、「一瞬表示される」は仕様通りの挙動となります。
既に回答にある通り別のやり方を探られた方が良いかと。
WordPressでどこまで対応できるかわかりませんが、php側で保存したCookieを読んできてbodyにclassつけるように分岐させればまだ実現可能かもしれません。

投稿2018/11/20 00:20

m.ts10806

総合スコア80850

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

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

DylanSpriggs

2018/11/20 00:25

回答ありがとうございます。素人考えで申し訳ないのですが、クッキーに保存していても、リロードしたら$(function()を読み込みしなおして、addClassをつけているのでしょうか?もしそうならphpで実装した方がいい気もしてきました。。。
m.ts10806

2018/11/20 00:29

提示のコードにはクリック時のイベントしか書かれてないような。 プログラムは指示した通りにしか動かないので自身で何も指示してなければなにもしませんよ
DylanSpriggs

2018/11/20 00:48

すみません、今理解できました。ちょっとjsではなくphpとcookieで別の方法を考えてみようかと思います。
guest

0

Wordpress使ってるならjsなんかでやらずに
body_classフィルタを使ったらいいんじゃないでしょうか

投稿2018/11/20 00:07

KazuhiroHatano

総合スコア7804

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

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

DylanSpriggs

2018/11/20 00:20

回答ありがとうございます。body_classを少し検索してみましたが、body_classだと特定ページのみ背景色の変更となり、サイト全体で、例えば1ヶ月background-colorをbalckにするとかは難しいのではないでしょうか? https://www.dpreview.com/ このサイトの右上にあるReading mode: Light Darkを実装したいのですが、リロード時や戻るボタンを押した時にclassが付くのが遅いのでちらつきます。
KazuhiroHatano

2018/11/20 00:26

header.phpとかfunctions.phpに書くとかして特に分岐もしてなかったら普通 特定のページだけに適用ってことにはならんでしょう
DylanSpriggs

2018/11/20 00:46

回答ありがとうございます。body_classとcookieを使うということでしょうか?ユーザーがダークかライトの背景色の変更をできるようにし、その状態を3ヶ月ほど維持したいのですが。
KazuhiroHatano

2018/11/20 01:08

そうです、$_COOKIE変数から値をとってbody_classフィルタで追加です
DylanSpriggs

2018/11/20 01:20

ありがとうございます!うまく記述できれば解決しそうです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問