category
サイト構築 -JavaScript

[JS]簡単に設置できるページ内をスムーズにスクロールできるスクリプト -Page Scroller ver.3

  • この記事をdel.cio.usに登録する
  • この記事をはてなブックマークに登録する
  • この記事をGoogleブックマークに登録する
  • この記事をYahoo!ブックマークに登録する
  • この記事をdiggに登録する
  • この記事をlivedoor clipに登録する
  • この記事を@nifty クリップに登録する

以前、紹介した「Page Scroller」のバージョンアップ版「Page Scroller ver.3」の紹介です。

追記:

2008年1月31日
ver.3.0.3をリリース
2008年1月25日
ver.3.0.2をリリース
2007年12月26日
ver.3.0.1をリリース

今回のバージョンから、簡単にスクリプトの設置が可能になりました。
外部スクリプトとして指定するだけで、HTMLページに修正を加えることなく動作させることも可能です。

スクリプトの概要

ページの先頭や任意の要素に、スムーズにスクロールさせることができるスクリプトです。

使用には「jQuery」が必要です。demoではjquery-1.2.1.min.jsを使用しています。
prototype.jsなどと共存できるように「$」ではなく「$j」を使用しています。

動作環境

Win
IE6, IE7, Firefox1.5, Firefox2, Opera9, Netscape8, Netscape9b, Safari3b
Mac
Safari2, Firefox1.5, Firefox2

使用条件

本スクリプトは、非商用利用に限りフリーで使用することができます。詳しくは「表示 - 非営利 - 継承 2.1 日本」を参照ください。

商用利用の場合は、contactのフォーム、もしくはメールにてお問い合わせください。
contact

更新履歴

3.0.3
3.0.2
3.0.1
  • スクロール中のマウスのクリックに対して、スクロール動作が止まるようにしました。
  • スクロール中の別のアンカーへのクリックに対して、スクロール動作が止まるようにしました。
  • jQuery 1.2.1に対応しました。
  • ファイル名を「page-scroller.js」から「jquery.page-scroller.js」に変更しました。
    実際に使用する際は、どちらのファイル名を使用しても問題ありません。
3.0.0
  • jQuery 1.1.3.1に対応しました。

JSファイルのダウンロード

ページの先頭へスムーズにスクロールさせる方法

ページの先頭へ減速しながらスムーズにスクロールさせる方法です。

必要なファイル

  • jquery.page-scroller.js
    (jquery.page-scroller-303.js)
  • jquery-1.2.2.min.js
  • HTMLファイル

スクリプトの使い方

ページの先頭へスムーズにスクロールさせる方法

ページの下部にある「Top of Page」をクリックすると、ページの先頭へスクロールします。

リンク先の記述
ページの先頭に下記を記述
<a id="top"></a>
リンク元の記述
<a href="#top">Top of Page</a>
  1. スクリプトを使用するHTMLファイルに、外部スクリプトとして参照させます。

    ※jQueryは必ず先に記述してください。

  2. ページの先頭の要素にidを記述します。
  3. ページの先頭へ移動させる箇所に、下記のように記述します。

※一部のブラウザでは、「#top=ページの先頭」を拡張機能として実装していますが、本スクリプトではそれに依存していません。

ページ内の任意の場所にスムーズにスクロールさせる方法

ページの任意の場所へ減速しながらスムーズにスクロールさせる方法です。

スクリプトの使い方:ページの任意の場所にスクロール

ページ内の任意の場所にスクロールさせる方法

「h2-01に移動」をクリックすると、「h2-01」にスクロールします。

リンク先の記述
<p id="h2-01">h2-01</p>
リンク元の記述
<a href="#h2-01">h2-01に移動</a>
  1. スクリプトを使用するHTMLファイルに、外部スクリプトとして参照させます。

    ※jQueryは必ず先に記述してください。

  2. スクロールさせたい要素にidを記述します。
  3. リンク先には、同じ「id」を記述します。

スクロール先の地点をピクセル単位で調整する方法

スクロール先の地点をピクセル単位で自由に調整することができるオプションです。

スクリプトの使い方:スクロール先の地点を微調整

スクロール先の地点を微調整をする方法

「h2-01に移動」をクリックすると、「h2-01」の-30pxの地点にスクロールします。

設定の記述
<script type="text/javascript">
adjPosition = -30;
</script>
リンク先の記述
<p id="h2-01">h2-01</p>
リンク元の記述
<a href="#h2-01">h2-01に移動</a>
  1. スクリプトを使用するHTMLファイルに、外部スクリプトとして参照させます。

    ※jQueryは必ず先に記述してください。

  2. script 内に設定を記述します。
    「adjPosition」に調整したいピクセルを指定します。
    マイナスを指定すると、指定した場所の上にスクロールします。
    設定は、個別にHTMLファイル、一括にJSファイルに記述しても動作します。

  3. スクロールさせたい要素にidを記述します。
  4. リンク先には、同じ「id」を記述します。

横移動有りでスムーズにスクロールさせる方法

任意の場所に縦横にスムーズにスクロールさせるオプションです。

スクリプトの使い方:横移動有りでスクロール

横移動有りでスクロールさせる方法

「h2-01に移動」「h2-02に移動」をクリックすると、それぞれ横移動有り・無しでスクロールします。

adjTraverser = 1
横移動有り。
横移動有り。縦無し。
adjTraverser = 0
横移動有り、左0pxに固定。
no adjTraverser
adjTraverserの設定が無い場合は、横移動無しで垂直にスクロール。
設定の記述
<script type="text/javascript">
adjTraverser = 1;
</script>
リンク先の記述
<p id="h2-01">h2-01</p>
リンク元の記述
<a href="#h2-01">h2-01に移動</a>
  1. スクリプトを使用するHTMLファイルに、外部スクリプトとして参照させます。

    ※jQueryは必ず先に記述してください。

  2. script 内に設定を記述します。
    「adjTraverser=1」は、横移動有り。
    「adjTraverser=0」は、横移動有りですが左0pxに固定。
    「adjTraverser無し」は、クリックした地点から横移動無しで垂直に移動。
    設定は、個別にHTMLファイル、一括にJSファイルに記述しても動作します。

  3. スクロールさせたい要素にidを記述します。
  4. リンク先には、同じ「id」を記述します。

id="top"無しでスムーズにスクロールさせる方法

id="top"の記述無しで、ページの先頭へスクロールさせるオプションです。

スクリプトの使い方:id="top"無しでページの先頭にスクロール

id="top"の記述無しで、ページの先頭へスクロールさせる方法

「Top of Page」をクリックすると、ページの先頭へスクロールします。

virtualTop = 0
0,0 の座標に移動。
virtualTop = 1
水平位置はそのままで、ページの最上部に移動。
設定の記述
<script type="text/javascript">
virtualTop  = 0;
</script>
リンク先の記述
「<a id="top"></a>」を記述するは必要ありません。
リンク元の記述
<a href="#top">Top of Page</a>
  1. スクリプトを使用するHTMLファイルに、外部スクリプトとして参照させます。

    ※jQueryは必ず先に記述してください。

  2. script 内に設定を記述します。
    「virtualTop=0」は、常に0,0 の座標に移動。
    「virtualTop=1」は、水平位置はそのままで、ページの最上部に移動。
    設定は、個別にHTMLファイル、一括にJSファイルに記述しても動作します。

  3. ページの先頭に「id="top"」を記述する必要はありません。
  4. ページの先頭へ移動させる箇所に、下記のように記述します。

※「id="top"」が存在しなくても動作しますが、存在しない「#top」にリンクを設定するのはおかしいので、記述することをお勧めします。

「id="top"」有りで、virtualTop = 1
demo 8に「id="top"」を記入

「virtualTop」の機能は、「id」が「top」でなくても動作します。

「id」を「top」以外で機能させる設定
demo 7にidを「pageTop」で設定
設定の記述
<script type="text/javascript">
virtualTopId  = "pageTop";
</script>
リンク先の記述
<a id="pageTop"></a>
リンク元の記述
<a href="#pageTop">Top of Page</a>

外部ページのリンクからスムーズにスクロールさせる方法

外部ページのリンクからでも、スムーズにスクロールできるオプションです。

外部ページのリンクからスクロール

外部ページのリンクからスクロールさせる方法

外部ページに移動後、「h2-01」にスクロールします。

設定の記述
<script type="text/javascript">
callExternal = “pSc”;
delayExternal= 200
</script>
リンク先の記述
<p id="h2-01">h2-01</p>
リンク元の記述
<a href="demo-10-02.html#h2-01" onclick="location.href='demo-10-02.html?pSch2-01'; return false;">demo-10-02.htmlに移動して、h2-01にスクロール</a>
  1. リンクの記述は、下記のようにします。

    「?pSc」の後に、idを記述します(ここでは「h2-01」)。
    「pSc」はスクロールを起動するサインで、スクリプト内の「callExternal = “pSc”」を変更することで自由な文字列に変更できます。
    ※onclickだけでなく、onkeypressなどと合わせて記述することをお勧めします。

  2. リンク先のページに、外部スクリプトとして参照させます。

    ※jQueryは必ず先に記述してください。

  3. リンク先のページのスクロールさせたい要素にidを記述します。
  4. ページのロードが完了してから、スクロールが起動するまでの時間は、初期設定で「200」になっています。
    スクリプト内の「delayExternal= 200」を変更することにより、時間を変更することができます。

Post on:2007年8月20日

  • この記事をdel.cio.usに登録する
  • この記事をはてなブックマークに登録する
  • この記事をGoogleブックマークに登録する
  • この記事をYahoo!ブックマークに登録する
  • この記事をdiggに登録する
  • この記事をlivedoor clipに登録する
  • この記事を@nifty クリップに登録する

トラックバック

トラックバック(URL)

コメント

comment:

info from 1432
on 2007年8月21日

[web][JavaScript]ページ遷移とユーザビリティ…

[JS]簡単に設置できるページ内をスムーズにスクロールできるスクリプト -Page Scroller ver.3.00 | コリス コリス ページ内リ (more…)

トレーニングAjax入門3 jQueryプラグインを読み込ませる方法 : 4GALAXYのメモ
on 2007年9月11日

[...] 応用編DEMO - DOWMLOAD シンプルすぎますね。プラグインの容量も4KBなのでお手軽です。ページスクローラーは利用頻度も高いのでいいですね。 作者さんが日本の方なので驚きました。更に詳しい内容を知りたい方は作者さんのページへどうぞ。 Page Scroller | コリス [...]

ゆーすけ
on 2007年9月13日

jquery.jsとjquery-pack.js違いって何なんでしょうね。。

コリス
on 2007年9月13日

> ゆーすけさん

下記ページにあるPacker(多分)を使用して、軽量化している版としていない版です。
あと、pack版はコメント等も削除してます。

http://coliss.com/articles/build-websites/operation/javascript/334.html

ゆーすけ
on 2007年9月13日

さっそくご教授頂きありがとうございます!
なるほど!そういうことでしたか。重い・軽い、ソースがわかりにくい・わかりやすいはあるものの一緒のデータなんですね。ソース見てもjquery-pack.jsは汚いなー何やコレぐらいにしか思っていませんでした。。もっと頑張って勉強しないと!

コリス
on 2007年9月13日

> ゆーすけさん
少しでも容量が軽い方がよいと思うので、軽量化を行っている人も増えてきているようですよ。

vike
on 2007年9月27日

i beg you - please make english variant of this page :)

coliss
on 2007年9月27日

Hi, vike.
Sorry, it is difficult for me to translate all this text.

I introduce this translation machine.
http://babelfish.altavista.com/

When you input this URL, this page will be translated into English.
If you don’t understand partially, please tell me.

ぎんじ
on 2007年11月27日

はじめまして。 突然すみません。
ぜひ利用させていただこうと思っているのですが、インストラクションどおりにダウンロードしても動きません。
現在なにか不具合等が出ているのでしょうか?

コリス
on 2007年11月27日

> ぎんじ さん

動作しない環境や実装したページを教えていただけると確認できるのですが、情報が無いため的確なアドバイスができません。

もし、こういった場所に明記するのがまずいようでしたら、フォームやメールにて連絡ください。

※多数の実装歴がありますが、不具合の報告というのは特に受けていません。

ぎんじ
on 2007年11月27日

見ず知らずの通行人へのご返信、ありがとうございます! 今朝になって再びパソコンを立ち上げたところ、キレイに動きました・・・先走って質問してしまい、大変申し訳なく思っております。 今思えば、正しく設置すれば簡単に正しく動いてくれる様子。

縦横に動くというのが魅力です。 ありがたく使わせていただきます。

コリス
on 2007年11月27日

> ぎんじ さん

無事に動作して、よかったです。

成海
on 2007年12月12日

はじめまして。
こちらのJacascriptの「使用条件」について質問させてください。

「非商用利用に限りフリー」とのことですが、
仕事で作っているページにこれを使うことはできない

ということでよろしいでしょうか。
認識間違いないでしょうか。

とても有益なので是非使いたいところです。

コリス
on 2007年12月12日

> 成海 さん

仕事などの商用利用の場合は、フリーでの使用はできません。
別途ご相談を受けていますので、お手数ですが、contactのフォームかメールにてお問い合わせをお願いします。

※上記に明記していなかったので、追記しました。

成海
on 2007年12月12日

お早いお返事ありがとうございます。
商用は不可でお金がかかるということですね、了解しました。

ちょっと残念ですが、お金の話をお客さんにすると、「じゃあ、いいです」と言われてしまうのがオチなので、今回の使用は控えますね。

それにしても、とても興味のあることをたくさん書いてらっしゃるので、
久々にヒットしたサイト様でした。
今後も参考にさせてもらいます。

コリス
on 2007年12月12日

> 成海 さん

すいません。
今後も、よろしくお願いします。

moco
on 2007年12月23日

はじめまして、有益なブログですね!
さっそくこのスクリプトを自分のブログに使わせて頂こうと思い、お礼のコメントをさせて頂きました。

優良な情報が多すぎてまだとても見きれていないのですが、今後も勉強させて頂きたいです。よろしくお願いします。

aimy.moco - 曖昧:模糊 -
on 2007年12月23日

Back Scroll Button…

今更だけどページ上部に戻るためのボタンを追加してみた。ちょうど前回でエントリー… (more…)

あざらし
on 2007年12月26日

いつもタメになる情報、ありがとうございます。
このスクリプトですが、自分のFirefoxだと、
「coliss has no properties」と出てデモページから
動きません。
・・・かなりいろいろアドオン入れているので、
正常な環境ではありませんけども。

コリス
on 2007年12月26日

> あざらし さん

ありがとうございます。
確かに、Firefoxでは動作しませんでした。

デモページ・圧縮ファイルなど全てに最新版をアップしなおしました。

あざらし
on 2007年12月26日

最速修正していただいて、ありがとうございます!
確かに動作しました。
縦横の動きが美しいですね。

コリス
on 2007年12月26日

> あざらし さん

確認まで、本当にありがとうございます。

ふれあい果樹園 Weblog
on 2008年1月26日

すみませ〜ん ^_^;/scloll…

この Blog JS ファイルなど取り除いて極力軽くしてみました〜などと宣言しておいて、その舌の根も乾かぬ内に、またまた JS ファイルを追加してしまいましたぁでも、ま (more…)

ななし
on 2008年2月11日

はじめまして!
スクロールのスピードを変更することはできるのでしょうか?

コリス
on 2008年2月12日

> ななし さん

スクロールのスピードは、変更できますよ。

mm
on 2008年2月13日

はじめまして、先ほどデモをまるごとダウンロードしたのですがfirefoxだと正常に表示されるのですがIEだと表示されません。web上のサンプルは通常通り拝見できました。どういう違いがあるのでしょうか?

コリス
on 2008年2月13日

> mm さん

すいませんが、ご利用のIEの環境(IEのバージョンとOS)を教えていただけますか?

先程、このページからデモファイル一式(page-scroller-303.zip)をダウンロードし、確認したところ、IE7+Windows XPの環境では、問題無く動作しました。

ちなみに、公開しているものとダウンロードできるファイルに違いはありません。

>コリスさん
on 2008年2月13日

早速のご返答ありがとうございます。環境はIE6で別PCでそれぞれダウンロードしたところ同じ結果でした。web上のものは問題無く作動しています。サイトに組み込んでもみましたがスクロールせずジャンプするだけになっていました。firefoxでは問題なく作動確認ができました。どういう理由でそうなるんでしょう??

mm
on 2008年2月13日

あーっとすいません。ぼーっとしてnameのところに・・・
追記しますとIE6+xpで、Alertでスクリプトが読めてないとかの確認もしてみましたが正常でした。たびたびすいません。

コリス
on 2008年2月13日

おそらく、hrefに記述した「#top」などが、スクリプトより先に反応してしまうことが原因だと思います。

ウェブ上では問題無いということと、IE7、Fx2などでは問題無いのを当方の環境で確認しているので、申し訳ありませんが、サポート外とさせていただきます。

以下、参考までに。
その箇所は、jQueryの機能で動作しており、その部分を当スクリプトで対応することは可能ですが、それにより当スクリプトが肥大化してしまうのを避けることを優先にしようと思います。

もし、次回のバージョンでjQuery不要版を作成した際は、対応可能になっていると思います。

mm
on 2008年2月13日

>コリスさん
なるほど!ありがとうございます。謎が解けてすっきりです。

コリス
on 2008年2月13日

> mm さん

また何かありましたら、よろしくお願いします。

ハル
on 2008年3月18日

初めましてこんにちは。
使わせて頂きました。有難うございます。
DLするファイル名は「jquery.page-scroller-303.js」ですが、「外部スクリプトとして参照させます」の説明部分では「jquery.page-scroller.js」になっていましたので一応お知らせを。

コリス
on 2008年3月18日

> ハル さん

ご利用、ありがとうございます。
ファイル名の件は間違いではなく、そのようにしています。

直接DLするファイルは、バージョンアップが分かるように数字有り。
使用する場合は、ファイル名を変更する手間がないように数字無し。

その旨、必要なファイルに記載があるので、使用する場合には間違いのないようにお願いします。

opus
on 2008年4月23日

外部ページからのスクロールに、スクロール先の地点を微調整を設定したいのですが、巧くいかないのですが・。

adjPosition = -30;
callExternal = “pSc”;のような指定は街が手いますでしゅか
delayExternal= 200

opus
on 2008年4月23日

↑すいません、途中で送ってしまいました。
外部ページのリンクからスクロール+スクロール先の地点を微調整を行うにはどのように記述すればよろしいのでしょうか。

コリス
on 2008年4月23日

> ops さん

外部リンク+微調整のデモ(-126pxで指定)をアップしてみました。

外部リンク+微調整のデモ

記述する箇所は、移動先ページのL.8-10にある「var adjPosition = -126;」の指定です。

なかにしゆうすけ
on 2008年4月23日

delayExternal= 200をdelayExternal= 150ぐらいにするとIEではスクロールの起動を遅く出来るのですがFirefoxでは変化がありませんでした。どうすれば良いでしょうか?お教え下さい。

opus
on 2008年4月24日

わざわざサンプルまで作っていただきありがとうございます。
無事地点指定することができました!

コリス
on 2008年4月24日

> なかにしゆうすけ さん

150で遅くは多分逆だと思うのですが、数が大きいほど遅延します。
50の増減だと、数字の単位が1/1000秒単位のため、あまり体感できないと思います。
体感できるくらい遅くする場合は、「1000」くらいを指定するといいと思います。

※Fx2で確認したところ、500くらいでワンテンポ遅れるくらいに感じました。
※200より速く(小さく)する場合、ページのロードが行えるか充分な検証を行ってください。

なかにしゆうすけ
on 2008年4月24日

変な質問をしてしまってすみません。
できました!ありがとうございます。

コリス
on 2008年4月24日

> opus さん
うまくいって、よかったです。

>なかにしゆうすけ さん
いえいえ、うまくいって、よかったです。

yh
on 2008年4月29日

優れたスクリプトの公開ありがとうございます。

ID属性を記憶?する事はできるでしょうか?

通常であればページ内のid属性を付けた箇所に#・・・で移動した後、”戻る”ボタンを押せば、ページ内のそのリンクをクリックした箇所に戻ることができますが、このスクリプトの場合、参照元の「ページ」に移動してしまいます。

視覚的に移動箇所は分かりますが、1ページにナビゲーションリンクを設置している場合、その場所に戻れるリンクをその都度設置するのも面倒なので…。

例えばこのページのナビゲーション位置から、「スクリプトの概要」をクリックし、その部分を読ん後に”戻る”ボタンを押すと、参照もとの”ページ”に移動してしまいます。

コリス
on 2008年4月29日

> yh さん

「戻る」ボタンの移動には、現在対応しておりません。

opus
on 2008年5月9日

お世話になります。
外部ページのリンクからスクロールでまた質問させてください。

外部ページスクロールの設定で、target=”_blank”を指定しても新規ウィンドウが開かないのですが。。なにか方法ございますでしょうか。ご教示いだけると助かります。

コリス
on 2008年5月9日

> opus さん

実際にどのようになっているのか分からないので想像ですが、おそらくtarget="_blank"の指定とonclickが混在しているためだと思います。

それを混在させるには、
・onclickで新規ウインドウを開く
・新規ウインドウのページにスクローラーを仕込む
の2つになると思います。

仕様によっては、新規ウインドウのページで、onloadにスクローラーを設定するとよいと思います。

ページの先頭へ




© coliss

RSS