文字サイズ変更ボタン設置
- 求道blog
- 2007-04-03(Tue) 22:21
- △
だいぶ前からサイトに「文字サイズ変更ボタン」を付けたいと思いつつ難儀していたのですが、Ogawa::memorandaの小川宏高さんが、既存Ajaxライブラリを活用した簡単な導入方法を公開されていました。
お陰で導入に成功。有難いことです(-人-)
Ogawa::memoranda:prototype.jsを用いたフォントサイズ変更スクリプト
私は大抵紹介されている技術を自分用に修正して利用しています。
どのような修正をしたか、参考に残しておきます。
More
せっかくなので、文字サイズ変更ボタンもCSSでデザイン変更できるようにしたいと思い、小川さんのコードの一部を以下のように修正しました。
JavaScriptで書き出される文章にこんなことをする必要は全くないのですが(笑)
結論: でかフォントは人を健康にします。
と仰っているだけに、小川さんのブログはフォントサイズが大きめの「100%」です。しかし、一般のブログは基本文字サイズがもっと小さくなっていることが多いです。
例えば、基本文字サイズが「90%」のこのブログにFontchangerをそのまま使うと、「小」ボタンを押したときの文字サイズがかなりの豆字になってしまいます。
そこで、fontchanger.jsの拡縮率の設定をWebbingStudio用に変更しました。
フォントサイズの保管には、cookiemanager.jsというライブラリが使われています。
このライブラリは「指定した名前と値を365日間保存するcookieを発行する」というものだそうです。
ですが「サイトの文字サイズを変更した」という記録だけを閲覧者のPCに365日=丸一年も保管させるというのは、ちょっと長すぎるような気がします。
数ヶ月ごとに定期的に訪問する可能性があるECサイトで個人情報を記録する、などであれば適切かもしれませんが、この場合、同様のcookieを発行している別ドメインのサイトが膨大にあり、一度しか使用されない可能性も高いからです。
そこで、cookieの保存期限を90日=三ヶ月に縮めてみました。
小川さんの方でバージョンアップ時に上記機能を追加してくださいました。
小川さんの記事後半の「2007-01-23追記:」以下をご参照ください。
InternetExplorer7は、基本の拡縮機能が「文字サイズ変更」から「ページ全体のズーム」に変わります。
ページが崩れないという点では便利なのですが、画像も拡大されてしまうため、写真等を綺麗に見せたいサイトにはネックとなります。
サイト内に簡単に文字サイズを変えられるボタンを付けておくことで、IE7や、同様にズーム機能がメインのOperaの閲覧者にも選択肢を与えられると思います。
おまけですが、WebbingStudioに使った文字サイズ変更ボタンの画像を置いておきますので、ご自由にお持ち帰りください。
※CSSレイアウト用なので、6個のボタンが一枚絵になっています。img要素で貼り付けたい方は、任意で切り分けてください。


Comment
Re:文字サイズ変更ボタンを付けよう
this.cookieManager = new CookieManager();
の行を
this.cookieManager = new CookieManager({shelfLife: 90});
と書き換えた方がよいですよ。
わわっ(゜Д゜;
とても役立つスクリプトを紹介してくださってありがとうございます。
わっ、CookieManagerに値を送るんですね!失礼しました。
ライブラリをいじるのは良くないですよね。すぐ記事を修正します〜
Re:文字サイズ変更ボタンを付けよう
フォント拡大はこのパターンとクリックするとどんどん大きくなっていくパターンもありますが、あれはどうやっているのでしょうか?わかります?
こんな感じかな?
文字の大きさ:標準に戻す|拡大
Re:文字サイズ変更ボタンを付けよう
ご質問の件ですが、「標準に戻す」処理に関しては難しくないです。
「fontchanger.js」の、以下の文字列を
onClickMedium: function(e) { this.change('100%'); },
このように修正すると、
onClickMedium: function(e) { this.reset(); },
文字サイズがどれだけ大きくなっていても、一旦リセットしcookieも消去するようになります。
以降はややこしい話になってしまいますが…
ボタンを押すたびに拡大していくようにするには
「fontchanger.js」を以下のように編集する必要があるのでは、と考えました。
◆現在の処理
1. ボタンを押したときに「○○%」という文字列が送られる
2. 文字列をそのままbody要素の文字サイズに反映する
3. 文字列をcookieに保存する
◆どんどん拡大される処理
1. ボタンを押したときに「○○」という数値が送られる
2. 変数hoge(名前なんでもいいです)を定義
3. hogeに現在のbody要素の文字サイズを取得
3. 「○○%」と指定されていれば、最後の一文字(%)をカット
4. それ以外、または指定されていなければ「100」とする
5. hogeにボタンを押したときに送った数値を足す
6. 再び「%」を付けてbodyの文字サイズに反映する
7. hogeをcookieに保存する
※主にスクリプト中盤の「change: function(fontSize)」を編集します
※修正範囲が増えますが、cookieに数値だけ保存するようにしてもいいかもしれません
実際にいじって検証してみたいのですが、現在多忙につき、ちょっと難しいです…
すみません(´Д`;
もしJavaScriptの知識がございましたら、チャレンジしてみてください。
Re:文字サイズ変更ボタンを付けよう
ありがとうござますm(_ _)m
Re:文字サイズ変更ボタンを付けよう
私、小川さんの知識に乗っかってるだけですから〜
Re:文字サイズ変更ボタンを付けよう
変更は問題なくできたのですが1つ疑問があります。
例えば<div id="aaa">なんとか</div>のように
idがaaa内だけ文字の大きさを変更するということはできるのでしょうか?
自分なりに試してみたのですが手探り状態なもので・・・
もしおわかりであれば是非教えて頂きたいのですが宜しくお願い致します。
IDを指定した文字サイズ変更
getElementByIdを使用すれば、特定の場所だけ変更できますよ。
スクリプト前半にある以下の一行を、
if (fontSize) document.body.style.fontSize = fontSize;
このように書き換えてみてください。
if (fontSize) document.getElementById("ID名").style.fontSize = fontSize;
追記:間違えました…orz 以降のコメントもご参照ください 凹
Re:文字サイズ変更ボタンを付けよう
id="main_center"なのでfontchanger.jsの
if (fontSize) document.body.style.fontSize = fontSize;を
if (fontSize) document.getElementById("main_center").style.fontSize = fontSize;
としてみましたが変わらずで全ての箇所の文字サイズが変わってしまいました。。。^^;
他にも変更箇所があるのでしょうか?
やまーさんごめんなさいorz
ま、間違えました |||orz
先日指摘した箇所だけでは動作しません。
スクリプト中盤の、以下の箇所もそれぞれ変更が必要です。
change: function(fontSize) {
document.body.style.fontSize = fontSize;
this.cookieManager.setCookie(this.cookieName, fontSize);
},
reset: function() {
document.body.style.fontSize = '';
this.cookieManager.clearCookie(this.cookieName);
},
それぞれ、
document.getElementById("ID名").style.fontSize
に変更してください。
すみませんすみません。
Re:文字サイズ変更ボタンを付けよう
選択されている文字サイズがわかるようにできないでしょうか?
具体的には選択中のボタンだけ色が変わるような形で、
ユナイテッドアローズのサイト
(http://www.united-arrows.co.jp/)
の右上のボタンのようなイメージです。
ご存知でしたら教えてください。よろしくお願いします。
Re:文字サイズ変更ボタンを付けよう
私の投稿は無視してください。
自分で設置してから疑問点があれば再度質問させていただきます。
申し訳ありませんでした。
まことさん遅レスですが
ご質問の件は上手くいきましたでしょうか?
文字サイズ変更ボタンのa要素にはそれぞれ
「fontchangerを呼び出す時に指定したID」+「small」
「fontchangerを呼び出す時に指定したID」+「medium」
「fontchangerを呼び出す時に指定したID」+「large」
というidが付きます。
なので、選択したときの状態をボタンに反映させるには
「ページにアクセスしたとき」と
「ボタンを押したとき」に
「指定したidの要素の背景画像を変える」スクリプトを追加する必要が出てきます。
背景画像の変更については、このページが参考になります。
http://javascriptist.net/ref/element.style.backgroundimage.html
IDを指定した文字サイズ変更について
上のやまーさんではないのですが、私もページ全体ではなく、
特定のIDの部分だけ変更したいと思っていましたところ、
ちょうど洵さんの回答があったので、試してみました。
文字サイズ変更まではうまくいったのですが、文字サイズを変更し、
クッキーに情報が書き込まれてからページをリロードすると、
文字サイズ変更ボタンが表示されなくなってしまいました。
クッキーを削除すると、また表示されます。
カスタマイズする前はリロードしても問題ありません。
なにかやりかたが間違っているのでしょうか?
私の場合変更箇所3つのうち、一番上の行の所をかえると不具合がでます。
なにかわかりましたら教えてください。
よろしくお願いします。
Re:文字サイズ変更ボタンを付けよう
カスタマイズしたURLを提示していただかないと何とも言えないのですが、cookieを保存してから不具合が出るということは、functionの最初のブロックである
「cookieが保存されていれば指定したidに保存された文字サイズを反映する」
という箇所に間違いがあることが考えられます。
fontchangerの表示・非表示はこの処理とは直接関係がありません。
また、ゴンザレスさんの不具合とは関係ないかもしれませんが
テンプレートの指定したidの部分に、すでに「font-sitze」が指定されていると
(上の例では#main_centerにfont-size:75%;が指定されていたとか)
85%・120%という倍率のままでは文字サイズが想定した結果と食い違ってしまいます。
今の段階で言えるのはこのくらいなのですが、よろしくお願いします。
Re:文字サイズ変更ボタンを付けよう
お願いします。
Re:又佐さんこんばんは
ブログを拝見したところ、自己解決ができたようで何よりです。
個別にサイトへお伺いしてサポートということはできませんので、宜しくお願いします。
文字サイズ変更のスクリプトは、もともとのHTML構造やスタイルシートの書き方にかなりの影響を受けます。
特にHTMLタグの閉じ忘れ、スタイルシートの「font-size」を何度も重複して書いている、などの状況だと、実装は難しくなります。
どうしても上手くいかないときは、書いているHTML、スタイルシート全体を見直すようにしてみてくださいね。
Re:文字サイズ変更ボタンを付けよう
私もゴンザレスさんと同じ状況です。
試行錯誤してみるのですが、うまくいきません。
次のコメントにURLをいれますので、お忙しい中恐縮ですが
一度見ていただけますでしょうか?
よろしくお願いいたします。m(__)m
Re:文字サイズ変更ボタンを付けよう
どうもありがとうございます。全くはじめてなのですが、いろんな方の手助けをかりながらです。実は、老人ホームのサイトを作るにあたって、MT4で作成ということで前途多難ですが、いろいろやっていこうかと思っています。
ほんとは、タイトルと同じ行に文字変更ボタンを設置したいのですが、今のところうまく行きません。CSSは、こうかなぁと思って記したらうまく動作したようです。
ひとまず、ありがろうございました。こちらは関東の鎌倉ですが、昨日の大雪にまいりました。
あーーーー、原因わかったorz
不具合の原因が分かりました。
私の説明不足と、小川さんの元スクリプトのバージョンアップが絡んでいたようです。
新しく記事を書きますので、そちらをご参照ください。
Re:文字サイズ変更ボタンを付けよう
上のentry-507ですね。
まだリンクされてないようですが、楽しみにしております。