jqueryでのフォント変更について

このQ&Aのポイント
  • jqueryを使ってサイト全体のフォントを変更する方法についての質問です。
  • 質問者はクラス名と保持期間、サイトのパスを考えています。また、コードをスマートにまとめる方法も教えてほしいとしています。
  • 回答者にはjqueryの知識があり、フォントサイズの切り替えやcookieの使用方法について説明できることが求められています。
回答を見る
  • ベストアンサー

jqueryでのフォント変更について

今jqueryを勉強していまして、 今回サイトでよくある大中小ボタンを押すとサイト全体のフォントが変更されるように なっているものを制作しようと思っています。 実際実装はできるのですが、キャッシュに入れ次アクセスしても同じフォントサイズ(フォントの大を押してみていた人が、またアクセスした際に同じ)のままでいてほしいんですね。 いろいろと調べましてやったのですがなかなかうまくいかず、 ご教示して頂ければ幸いです。 jquery.jsと、 jquery.cookie.jsは入れています。 jqueryとcssを掲載します。 自分の考えとしましては、boxという箱にclassname(bodyに大きさによって振り分けるためのクラス)と、保持する期間、あとサイトのパスを入れればいいのではないかと思ってるのですが。。。 fontswictherはリストをくくっている親のul要素のID名です。 あとちなみにですが、下記のjsをスマートにまとめられる書き方はございますでしょうか。 そちらも一緒に教えて頂ければ幸いです。 $("#fontswitcher li").attr({href:$.cookie('box')}); var classname = "font-s , font-m , font-l"; $("#fontswitcher li:eq(0)").click(function(){ $('body').removeClass(classname); $('body').addClass('font-s'); $.cookie('box',classname,{expires:10,path:'/'}); }); $("#fontswitcher li:eq(1)").click(function(){ $('body').removeClass(classname); $('body').addClass('font-m'); $.cookie('box',classname,{expires:10,path:'/'}); }) $("#fontswitcher li:eq(2)").click(function(){ $('body').removeClass(classname); $('body').addClass('font-l'); $.cookie('box',classname,{expires:10,path:'/'}); }) body.font-s{ font-size:10px; } body.font-m{ font-size:12px; } body.font-l{ font-size:14px; } お忙しい中恐縮ではございますが、 おわかりになる方、ご教示いただければ幸いです。 どうぞ宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • LancerVII
  • ベストアンサー率51% (1060/2054)
回答No.1

こんにちは。 addClassを使うと、removeClassが必要だったり面倒でしたので以下のようにしてみました。 (参考にならないかもしれませんが) ==== HTML <ul id="fontswitcher"> <li>小</li> <li>中</li> <li>大</li> </ul> ==== js $().ready ( function() { // フォントの大きさ var FSIZE = new Array ( '0.8em', '1.0em', '1.2em' ); // ※A クッキーより設定されているフォントサイズを取得 var def = $.cookie('box'); if ( def !== null ) { // クッキー情報が取得できた場合は取得したフォントサイズでbodyに設定 // すなわち取得できなかった場合はなにもしない $('body').css ( 'font-size', def ); } $('#fontswitcher').find('li').click ( function() { // #fontswitcher内の全てのliにclickイベントを設定 // クリックされたliのindexを利用してフォントサイズを取得(小:0番目,中:1番目,大2番目) // すなわち小の場合はFSIZE[0]なので0.8emが設定 var size = FSIZE[$(this).index()]; // 取得したサイズをクッキーに設定 // これにより次回アクセス時に※Aの処理で選択されたフォントサイズを取得できる $.cookie ( 'box', size ); // bodyに選択されたフォントサイズを設定することにより画面上のフォントサイズが変更される $('body').css ( 'font-size', size ); }); });

yukiponta
質問者

お礼

こんにちは。 LancerVIIさんのおかげでクッキーの使い方やスマートに書く方法が学べまして、本当に感謝感激です。 どうもありがとうございました。 クッキーの動作も問題なくできてますし、わかりやすいご説明本当にありがとうございました。webデザイナーとしてやっとjqueryが多少ではありますが自力で書けるようになってきたので、すこしずつ難しいことに挑戦して壁にぶつかることは多いですが、お時間があった際にでもまた教えて頂ければ幸いです。 どうもありがとうございました。また宜しくお願い致します。

関連するQ&A

  • フォントサイズの変更

    jqueryを使用したフォントサイズの変更について質問です。 サイズの変更は以下のスクリプトで動作するのですがクラス名(active)が付与されずうまく動作しません。 html <ul class="switch"> <li><span class="fontChangeSmall">小</span></li> <li><span class="fontChangeNormal">中</span></li> <li><span class="fontChangeLarge">大</span></li> </ul> font-change.js $(document).ready(function() { var bodyClass = 'font'; var switchClass = 'fontChange'; var startClass = 'Normal'; var activeClass = 'active'; var value = $.cookie('fontSize'); if ( value ) { $('body').addClass(bodyClass + value); $('.switch .' + switchClass + value).addClass(activeClass); } else { $('body').addClass(bodyClass + startClass); $('.switch .' + switchClass + startClass).addClass(activeClass); } $('.switch span').click( function() { value = $(this).attr('class').replace(switchClass, ''); $('body').removeClass(bodyClass + 'Normal').removeClass(bodyClass + 'Small').removeClass(bodyClass + 'Large'); $('body').addClass(bodyClass + value); $('.switch span').removeClass(activeClass); $('.switch .' + switchClass + value).addClass(activeClass); $.cookie('fontSize', value); }); }); 上記だけであれば動作するのですが下記のスクリプトがあるとactiveが付与されない状況です。 下記をコメントすると正常に動作します。 ※どちらのjsも外部ファイルとして読込みしてます。 common.js $(function() { $('body :first-child').addClass('firstChild'); $('body :last-child').addClass('lastChild'); }); どのようにすればactiveが付与されるようになりますでしょうか?

  • cookieを使ったフォントチェンジ

    動作が思いどうりにいかないので、??? 困っています。 cookie.jsの読み込みと下記の読み込みを行っていますが、 $(function () { if($.cookie("file")) { $(".main").attr("class",$.cookie("file")); }; $('#font-size .layout').click(function(){ $('.main').removeClass('fontS fontM fontL'); $('#font-size .layout').removeClass('current'); $(this).addClass('current'); switch(this.id){ case 'fontS': $('.main').addClass('fontS'); $.cookie('file', 'fontS',{expires: 365, path: '/'}); break; case 'fontM': $('.main').addClass('fontM'); $.cookie('file', 'fontM',{expires: 365, path: '/'}); break; case 'fontL': $('.main').addClass('fontL'); $.cookie('file', 'fontL',{expires: 365, path: '/'}); break; }; return false; }); }); 上記の記述だと、cookieがおかしな挙動をしてしまうので・・・。 アドバイスや助言をお願いします。

  • jQueryでのclassの操作

    現在Wordpressに、文字のサイズを「小・中・大」と変えるjQueryを設置しています。 http://az-store.nrym.org/download/extend/jquery-fontsize-switcher/ Wordressではもともとbodyのclassに指定があるのですが、このjQueryを設置すると removeAttr("class")で削除されてしまいます。 そこで、もともとのClassを活かしたまま文字サイズ変更用のクラスだけを 削除&追加ができればいいのですが、 どうすればよいでしょうか? ただ、単純に「removeAttr("class")」の記述を削除してしまうと、 文字サイズ変更スイッチを押す度に、クラスが追加され続けるのでそれは避けたいです。 $(function(){ var currentstyle = readCookie('fontStyle'); if (currentstyle){ switchFont(currentstyle); }; $("li.sizeL").click(function(){ switchFont("fontL"); return false; }); $("li.sizeM").click(function(){ switchFont("fontM"); return false; }); $("li.sizeS").click(function(){ switchFont("fontS"); return false; }); }); function switchFont(className){ $("body").removeAttr("class").addClass(className); createCookie('fontStyle', className, 365); }; // cookie script http://www.quirksmode.org/js/cookies.html function createCookie(name,value,days){ if (days){ var date = new Date(); date.setTime(date.getTime()+(days*24*60*60*1000)); var expires = "; expires="+date.toGMTString(); } else var expires = ""; document.cookie = name+"="+value+expires+"; path=/"; } function readCookie(name){ var nameEQ = name + "="; var ca = document.cookie.split(';'); for(var i=0;i < ca.length;i++) { var c = ca[i]; while (c.charAt(0)==' ') c = c.substring(1,c.length); if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length); } return null; }

    • ベストアンサー
    • AJAX
  • cookie.jquery.jsでのcookie

    cookie.jquery.jsでのcookie取得について 現在、cookie.jquery.jsでcookieを以下のように取得しています。 $(window).load(function(){ $.cookie("access",$('body').addClass('access'));}) たとえば、サイトを表示して10秒後にcookie取得したいと思い、setTimeoutを使用すれば良いと思ったのですが、うまく動作しませんでした。 このような使い方はできないのでしょうか?

  • jQueryタブメニュー内へのリンク方法。

    javascript勉強中です。 調べたり試してみたりしたのですが、なかなか上手くいかず質問させていただきました。 下記のjQueryを使ったタブメニューなのですが、他のページからタブ内(tab1~tab3)へリンクさせるjavascriptの書き方や方法を教えていただけないでしょうか。 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> <script type="text/javascript"> $(function($) { $(".area").hide(); $(".tab_content").hide(); }); jQuery.event.add(window,"load",function(){ $(".tab01 li:first-child").addClass("active"); $(".area:first-child").show(); $(".tab01 li").each(function(i){ $(this).click(function(){ $(".content .area").hide(); $(".content .area").eq(i).fadeIn(400); if($(this).hasClass("active")){ $(".tab01 li").removeClass("active");} else {$(".tab01 li").removeClass("active"); $(this).addClass("active"); } }); }); }); </script> </head> <body> <div> <ul class="tab01"> <li><a href="#">1</a></li> <li><a href="#">2</a></li> <li><a href="#">3</a></li> </ul> <div class="content"> <div class="area" id="tab1">tab1</div> <div class="area" id="tab2">tab2</div> <div class="area" id="tab3">tab3</div> </div> </div> </body> </html> どうぞ宜しくお願い致します。

  • id 及び class の指定についてです。

    中途半端な知識で対応できず、苦しんでおります。 下のJavaScriptは、jquery.cookie.js 使用で <p>タグ内の文字のフォントサイズを変更しているのですが… <p>の指定を、idやclass の指定にするには、どう書き換えたら良いのでしょうか? <script type="text/javascript"> <!-- $(function(){ $("p").css("font-size",$.cookie('fsize')); }); function font(size){ $("p").css("font-size",size); $.cookie("fsize",size,{expires:30,path:'/'}); } //--> </script> ちなみに、分かりやすく詳しく教えて頂けると非常に助かります。 もし宜しければ何方か教えて下さい。宜しくお願いします。

  • mootoolsとjQueryの共存がうまくいかない。

    mootoolsとjQueryの共存がうまくいかない。 ▼共存参考サイト http://h2ham.seesaa.net/article/106053238.html 参考サイトを見て、共存したいのですが、Operaでうまくいきません。 IE、fox、safari、chromeではうまくいくのですが・・・ $をj$などに変えてみたりいろいろ試しましたがうまくいきませんでした。 お力添えよろしくお願いします。 <script type="text/javascript" src="http://code.jquery.com/jquery-1.4.2.min.js"></script> <script type="text/javascript" src="../js/yuga.js" charset="utf-8"></script> <script type="text/javascript" src="../js/jquery-easing-1.3.pack.js"></script> <script type="text/javascript" src="../js/jquery-easing-compatibility.1.2.pack.js"></script> <script type="text/javascript" src="../js/coda-slider.1.1.1.pack.js"></script> <script type="text/javascript"> var theInt = null; var $crosslink, $navthumb; var curclicked = 0; theInterval = function(cur){ clearInterval(theInt); if( typeof cur != 'undefined' ) curclicked = cur; $crosslink.removeClass("active-thumb"); $navthumb.eq(curclicked).parent().addClass("active-thumb"); $(".stripNav ul li a").eq(curclicked).trigger('click'); theInt = setInterval(function(){ $crosslink.removeClass("active-thumb"); $navthumb.eq(curclicked).parent().addClass("active-thumb"); $(".stripNav ul li a").eq(curclicked).trigger('click'); curclicked++; if( 5 == curclicked ) curclicked = 0; }, 15000); }; $(function(){ $("#main-photo-slider").codaSlider(); $navthumb = $(".nav-thumb"); $crosslink = $(".cross-link"); $navthumb .click(function() { var $this = $(this); theInterval($this.parent().attr('href').slice(1) - 1); return false; }); theInterval(); }); </script> <script type="text/javascript"> <!-- jQuery.noConflict(); var j$ = jQuery; --> </script> <script src="../js/mootools.js" type="text/javascript"></script> <script src="../js/menu.js" type="text/javascript"></script> <script src="../js/main.js" type="text/javascript"></script>

  • jquery.cookie.jsを使用していますが

    jquery.cookie.jsを使用していますが、ページ遷移した際に、クッキーが外れるみたいなのです。 現象としては、文字サイズや背景色を変えて(別CSSを読み込む)同じ階層のページへ遷移してもそのまま文字サイズも背景色も適用されたままなのですが、別階層(index.htmlからlink/a.htmlなどフォルダ内のHTMLファイル)に遷移すると適用が外れます。そしてlink/a.htmlでサイズ変更してそこからindex.htmlに戻ると変えたはずの文字サイズなどは解除されています。 おそらくjquery.cookie.jsの問題かと思いますが、どこをいじればいいのか分かりません。 お願いします。 以下、jquery.cookie.jsのソースです。 jQuery.cookie = function (key, value, options) { // key and value given, set cookie... if (arguments.length > 1 && (value === null || typeof value !== "object")) { options = jQuery.extend({}, options); if (value === null) { options.expires = -1; } if (typeof options.expires === 'number') { var days = options.expires, t = options.expires = new Date(); t.setDate(t.getDate() + days); } return (document.cookie = [ encodeURIComponent(key), '=', options.raw ? String(value) : encodeURIComponent(String(value)), options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE options.path ? '; path=' + options.path : '', options.domain ? '; domain=' + options.domain : '', options.secure ? '; secure' : '' ].join('')); } // key and possibly options given, get cookie... options = value || {}; var result, decode = options.raw ? function (s) { return s; } : decodeURIComponent; return (result = new RegExp('(?:^|; )' + encodeURIComponent(key) + '=([^;]*)').exec(document.cookie)) ? decode(result[1]) : null; };

  • offset().topでIE6エラー

    以下のjs(jquery)を実行すると IE6でエラーになります。 どうもoffset().topが引っかかているようですが、 対策がわかりません。 $(document).ready(function() { $(".test li").click(function(){ $(".test li").removeClass("hide");   $("div.box .orn").removeClass("active");   $('div#' + $(this).attr('id')).addClass("active");   $('.scroll').animate({ scrollTop: $('div#' + $(this).attr('id')).offset().top }); }) }) どなたか教えていただけると助かります。

  • jQueryのタブにスクロールバーをつけたい

    jQueryのタブにスクロールバーをつけたい jQueryの「ui.tabs.js」を使ってタブを制作し、「jquery.cookie.js」でタブの内容を記憶し。 さらに、そのタブの中身が設定した枠を超えると「jScrollPane.js」を使って横にスクロールバーがでるようにしたいのですがうまくいきません。 <script src="./js/jquery-1.2.6.js" type="text/javascript"></script> <script src="./js/jquery.cookie.js" type="text/javascript"></script> <script src="./js/ui.core.js" type="text/javascript"></script> <script src="./js/ui.tabs.js" type="text/javascript"></script> <script src="./js/jScrollPane.js" type="text/javascript"></script> <script src="./js/jquery.mousewheel.js" type="text/javascript"></script> <script type="text/javascript"> $(document).ready(function() { $('#container1 > ul').tabs({ event: 'click' ,cookie: { expires: 30 } , cache: true}); $('#fra_sl').jScrollPane({scrollbarWidth:13, scrollbarMargin:9}); }); </script> <body> <div id="container1"> <ul> <li id="tab1"><a href="#tab_categry">タブ1</a></li> <li id="tab2"><a href="#tab_all">タブ2</a></li> </ul> <div id="pane1"> <div id="tab_categry"> <p>中身1(省略)</p> </div> <div id="tab_all"> <p>中身2(省略)</p> </div> </div> </div> </body> 以前同じような質問をされていた方がいたのでそちらも参考にして試してみたのですが→http://okwave.jp/qa/q4819862.html javascriptは初心者なものでよくわかりませんでしたorz どなたかわかる方がいましたら教えてもらえないでしょうか??

専門家に質問してみよう