jQueryとjquery.cookie.jsを使って開閉を保持するメニューを作ってみる

前々からcookieを使用してメニューを制御したかったのですが、なかなかうまくいかず断念していたところjQueryで簡単にcookieを扱えるプラグインを発見しました。

早速試してみたところ、それらしいものが出来ましたのでプラグインの使い方と合わせて紹介していきたいと思います。

cookieを使用して開閉を保持するメニュー完成サンプル

サンプルを見て頂ければ分かりますが、開閉状態をcookieによって保持するというものです。
お使いのブラウザのcookieの設定とか眺めながらご覧ください。

jquery.cookie.jsのダウンロードと使用方法

まずはjquery.cookie.jsを以下サイトよりダウンロードします。

jquery.cookie.js | jQuery Plugins

これをhead内で読み込んであげると、以下の様な簡単な記述でcookieが扱えます。

$.cookie('the_cookie'); //cookieの取得
$.cookie('the_cookie', 'the_value'); //cookieをセット
$.cookie('the_cookie', 'the_value', { expires: 7 }); //cookieを有効期限を7日間でセット
$.cookie('the_cookie', '', { expires: -1 }); //cookieを削除
$.cookie('the_cookie', null); //cookieを削除

参考:Klaus Hartl - Stilbüro : Cookie Plugin for jQuery
参考:とほほのCookie入門

開閉メニューの動きの構想

jquery.cookie.jsの使用方法が分かったところで動きの構想をします。

実装したい動き

  1. デフォルトでは閉じている
  2. クリックするとアニメーションで開閉する
  3. リロードしても開閉状態を保持する

これを実現したいので、考えたのはcookieがあれば開いた状態にするという仕様です。

クリック時にcookieが無ければセット、既にあれば削除、更にページ読み込み時に初期状態の設定という形で実装出来そうです。

サンプルソース

1.head要素内にScriptの追加

まずはhead要素内に以下の記述を追加します。
<script type="text/javascript" src="http://www.google.com/jsapi"></script>
<script type="text/javascript">google.load("jquery", "1.2.6");&lt;/script>
<script src="js/jquery.cookie.js" type="text/javascript"></script>

前回同様Google AJAX APIを使用してjQueryを読みこんでいます。
3行目のパスは適宜変更してください。

2.開閉、cookie、初期状態を制御するScriptの追加

続いて根幹のScriptを記述してあげます。

こんな感じで記述しています。

9行目、11行目の[show][hide]は表示、非表示をコントロールしています。
[eq]は、マッチした要素の中から指定したインデックス番号の要素を抽出する関数?です。
eq(position) - jQuery 1.3.2 日本語リファレンス


20行目の[slideToggle]は

各要素の高さを操作して、slideDown/slideUpの動作を交互に行います。
slideToggle- jQuery 1.3.2 日本語リファレンス

というものです。

もっとスマートな書き方があるのかも知れませんが、現在の知識で精一杯やってみました。

3.HTMLの記述

HTML部分は以下の様にスマートな記述でいけます。
ここをクリック
中身
ここをクリック
中身
ここをクリック
中身

以上で完成です。

cookieを使用して開閉を保持するメニュー完成サンプル

本当はopendd[0]~[n]というcookieが複数セットされるのを避けたかったのですが、うまく記述できませんでした><

でも出来て嬉しいので公開してみました!

詳しい方アドバイスとか頂けると元気出ます!よろしくお願いします。

090304追記

cookieが複数セットされる部分に関して、コメントでアドバイス頂きまして、やり方は違うのですが閃きました!
ひとまず動作サンプルを公開します。

cookieを使用して開閉を保持するメニュー(cookie一つ版)サンプル

内容については後日改めて記事にしたいと思います。
まだ無理やり感は否めないですが、cookie名ひとつで動作致します。

ありがとうございました。

090306追記

修正版を書きました。合わせてご覧ください。
jQueryを使用したCookie開閉保持メニューをよりjQueryっぽく書き直す

このエントリーをはてなブックマークに追加 この記事をクリップ! Yahoo!ブックマークに登録 この記事をdeliciousにブックマーク
Tumblr
2009年3月 3日

このエントリーのトラックバックURL:

このエントリーへのトラックバック:

ちょっと仕事でクッキーを使うことがあって、いろいろ調べていたら、javascri...

2009年3月 5日 10:02  Blog | sevenstyleweb

唐突ですが。私はペンネーム「水上啓」として、創作文芸サークル「HELLO-SUISEI」で同人誌を出していたりします。Web上に小説をアップロードして公開...

2010年5月29日 21:57  kzhrk.com

コメント

>本当はopendd[0]~[n]というcookieが複数セットされるのを避けたかったのですが、うまく記述できませんでした

var nameをクッキー名じゃなくてカンマ区切りか何かで値に突っ込んで、見に行くときはカンマをキーにしてばらしてあげるとか...言ってみるテスト。

ボクもちょうどクッキーと格闘しているところだったのでお邪魔してみました。
ではまた。。。

Posted by ; uk : 2009年3月 3日 11:29

>ukさん
コメントありがとうございます!

アドバイスから閃きましたので(教えて頂いたやり方とは違うと思われますが(;´Д`))追記しました。

公開してみるものですね。

これからも生暖かくお見守りください。

Posted by ; caraldo_k : 2009年3月 4日 01:28

ちょうど僕も同じ時期にjquery.cookie.jsについて調べていたので、実に参考になりました。

いや~本当にこれは便利ですね~。
caraldo_kさんみたく、いろいろアイデア出して実験してみようと思います。

Posted by ; seven : 2009年3月 5日 10:03

>seven様

コメントありがとうございます。
サイトでも紹介して頂けたようで嬉しいです。

私もcookieとかよく分からず手を出したのですが、こうやってコメント頂けるとやって良かったな、と思えます。

実はサンプルで直したいところがあるので、それはまた別の記事にしようと思っています。

そちらもよろしくお願いします。

Posted by ; caraldo_k : 2009年3月 5日 10:51

(初めてのコメントの時は、コメントが表示されるためにこのブログのオーナーの承認が必要になることがあります。承認されるまでコメントは表示されませんのでしばらくお待ちください)




太字 イタリック アンダーライン ハイパーリンク 引用

caraldo_K

Webディレクター的な事やってます!iPhone楽しい!マラソン・ロードバイクで肉体改造計画中!でも一番好きなのは漫画です㌰㌰⋋( 'Θ')⋌㌰㌰

poooooon

俗に言うWeb屋の人。馬車馬のように働きお休みがありません。いつか目の前に天使ちゃんが舞い降りてきてくれるのではないかと妄想を膨らませる毎日。

Our tweets
Loading..
Facebook caraldo.net公式ページ

POWERED BY MT4