Hatena::Diary

KAZUMiX memo

2008-04-18

こだわりのページ内リンクスムーズスクロール scrollsmoothly.js

| こだわりのページ内リンクスムーズスクロール scrollsmoothly.js - KAZUMiX memo を含むブックマーク

こだわりのページ内リンクスムーズスクロール scrollsmoothly.js 動作サンプル

「ページ内リンク スムーズスクロール」でググればいくらでも出てくるシロモノだけど、自分の要望をすべて満たすものが無かったので作ってみた。

以下のソースコードをサンプルページのようにhead内で読み込むだけでOK。

ソースコード(Javascript)
scrollsmoothly.js

読み込み例

<script type="text/javascript" src="scrollsmoothly.js"></script>

特徴

  • 縦横斜めにスクロール可能
  • スクロール中にもリンクをクリック可能
  • 別のページからのリンクでも指定の場所までスムーズスクロールします
  • MIT License

動作確認ブラウザ

関連エントリー

umeume 2008/06/29 00:38 素晴らしいスクリプトを公開していただき、ありがとうございます。
これを利用させていただくことにより、問題が解決しました。
今後のご活躍をお祈り申し上げます。

KAZUMiXKAZUMiX 2008/06/30 14:05 umeさん
どもです。このスクリプトは動きの気持ちよさにもこだわってみました。

☆ 2008/07/18 18:09 すごいですね!気持ちいい!
何より他のライブラリに依存していないところが素晴らしいです。

拝借して色々実験していたのですが、
「別のページからのリンクでのスクロール」が
一旦、そのアンカー部分を表示した後で、
また一番上からスクロールし直すという挙動のようですね。
(スクロール動作までの時間を弄んでいて気づいた)
これだとなんかスクロールする意味が希薄かもしれませんね…。

<a href=”ホニャララ.html#ホゲホゲ”>のそもそもの動作を
捻じ曲げるわけですから、やっぱり難しいのかな…。

KAZUMiXKAZUMiX 2008/07/18 20:03 そうなんですよね。ご指摘の通り、特にページが読み込み終わるまでに時間がかかる場合の挙動はいまいちかもしれません。でも読み込み終わらないとスクロール先の座標が確定できないので悩ましいところです。
そもそもの挙動をのっとるのは難しくてひとまず諦めました。何か方法が見つかれば何とかしたいです。

はまちゃんはまちゃん 2008/09/06 11:33 これはすごいですね。
他のものもいろいろ試しましたが、動きがなんとといっても1番気持ちいいですね。

少し初歩的な質問なのですが、よろしいでしょうか。
JavaScriptコード内の、
(function(){
var easing = 0.25;
var interval = 20;   
の部分なのですが、

他のブラウザはこのままでいいけれど、
例えば、ある特定のブラウザに対してだけその数値を変えたかったとすると、どういったコードの表記になるのでしょうか。

初歩的な質問で恐縮ですが、どうかよろしくお願いします。

ukeuke 2008/09/12 10:31 頂きました!ありがとうございます。
ビールの一箱でも贈呈したいくらいです。
こういう無償で活動されている方にお礼をしたい場合は
どうしたら良いのか社内のプログラマに聞いた所
「神!」と呼べば良いと言われました。。

ありがとうございます神様。

CHODACHODA 2008/10/21 16:29 動きのスムーズさとHTMLに実装したときのソースの簡素さが理想的!!
ライセンスはいかがいたしましょうか・・。

KAZUMiXKAZUMiX 2008/10/21 23:51 あ、ライセンスはMITです。ソースの中に書いておいたんですが、表にも書いておかないと分かりにくいですね。

CHODACHODA 2008/10/22 09:30 コードの中ちゃんと見てなかったです。。すみません。
活用させていただきます!

cagecage 2008/11/21 13:08 十字キーで移動出来ないですかね?

KAZUMiXKAZUMiX 2008/11/22 18:29 できません。
スライドショー的なページならそういうインターフェースも有りですね。

mitomito 2008/12/12 17:32 これはいいですね!
ひとつだけ、、
飛び先のアンカーが文書の最下部に近いと、イーズアウトされないのが残念。

KAZUMiXKAZUMiX 2008/12/12 20:31 確かに!
飛び先が表示の先頭になることを前提に座標の処理をしていたので、改良の余地有りですね。

ハルハル 2009/01/13 20:14 滑らかな動きで凄く気持ちいいですね!
早速実装してみたのですが、
flash上のボタンからだとスクロールせずに、
通常のアンカーのようになるのですが、
スルスルっと動かすにはどうすればよいでしょうか?

KAZUMiXKAZUMiX 2009/01/13 22:48 残念ながらFlashからのリンクには対応できません。このスクリプトはHTLM内のリンク動作をJSで乗っ取ることで実現していためです。
やろうとするとFlashからJavaScriptを呼び出し、JavaScript側もそれに対応するようにするかたちになります。埋め込んだだけで使えるこのスクリプトの仕様とは別物になってしまいます。

KAZUMiXKAZUMiX 2009/02/12 00:40 上記mitoさんのご指摘にあった「飛び先のアンカーが文書の最下部に近いと、イーズアウトされない」問題を修正しました。

HIHIHIHIHIHI 2009/04/09 19:03 スクロールしている途中で画面をクリック(またはマウスホイールを使用した際)した時はそこでストップするようにすることはできないものでしょうか?
スムーススクロール系で一番残念に思うのが強制的に飛び先までいってしまうものが多いのでぜひとも改良してください!!

まるまる 2009/10/14 18:05 これはいい! 使い勝手もよくて感動しました。

yukilinkyukilink 2010/01/31 08:54 はじめましてこんにちわ。
スムーズスクロール・・・いろいろ検索して試行錯誤して漂流してこちらにたどり着きました。
素敵です!!自分が理想としていたモノができそうです!!いや、できます!!
ありがとうございました。

じゃりおんじゃりおん 2010/02/27 21:02 とっても素敵なjsを、MITとはありがたいです。
今度の仕事のサイトで活用させていただきます。どうもありがとうございます!!

黒 2010/04/07 06:02 はじめまして。
サイト制作初心者なので初歩的な質問かもしれませんが、
「こだわりのページ内リンクスムーズスクロール scrollsmoothly.js 動作サンプル」
のソースを写して、勉強させてもらっているのですが、(悪魔で自分のPC内での使用ですが、もし違反行為でしたらすみません)
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
の部分を入れると文字化けになってしまうのですが、何故なのでしょうか?
「こだわりのページ内リンクスムーズスクロール scrollsmoothly.js 動作サンプル」のページを見ても文字化けしませんが、自分のPCに写して見ると文字化けしてしまいます。
それと<?xml version="1.0" encoding="utf-8"?>の記述が無いのも気になります。
変な質問ですが、どうかよろしくお願いします。

KAZUMiXKAZUMiX 2010/04/07 14:31 黒さん、はじめまして。
文字化けの原因は文字コードだと思います。元ソースの文字コードはutf-8ですが、保存した時にshift_jisになってしまったのではないでしょうか?
<?xml version="1.0" encoding="utf-8"?>の記述は、あえて入れていません。これを入れるとIE6が後方互換モード(IE5.5相当)の動作になってしまうためです。対策が面倒になるためため、私に限らず入れていないサイトがほとんどだと思います。

黒 2010/04/07 19:26 文字化けの原因はやはり保存した時に文字コードshift_jisで保存していたみたいです。
初歩的なミスで質問してしまって失礼しました。
<?xml version="1.0" encoding="utf-8"?>の記述は
<?php echo '<?xml version="1.0" encoding="utf-8"?>'; ?>で対処していますが、やはり入れないほうが良いのでしょうか?
連続的に質問してしまって申し訳ないですが、よろしくお願いします。

yoshiyoshi 2010/04/08 15:57 <a href="#">のように、「#」だけの場合スムーズスクロールになりません。
通常ブラウザの場合、「#」だけでページトップに移動します。
対応できませんか?m(_)m

KAZUMiXKAZUMiX 2010/04/09 10:56 >黒さん
IE6の場合は出力しないという分岐をしているのであれば問題ありません。そもそもIE6で正常表示されなくても気にしないというスタンスもありです。 Googleが今後はIE6のサポートををしないという立場のように。

>yoshiさん
今のところ空のアンカー名に対応する予定はありません。

JPJP 2010/07/27 06:17 はじめまして。とっても滑らかで気持ちがよいです。
初歩的な質問で恐縮ですが、質問させてください。
基本横だけにスクロールし、たまに注釈等のコンテンツを下などに配置したりするページ(基本は一方通行)をつくっているのですが、スクロール先の場所の指定はCSSのtopやleftのところで指定すればいいのですよね?セクション4の場所をセクション3の隣に書き変えてもデフォルトの1の下に移動してしまうのですが…
初心者の質問ですいません。よろしくお願いいたします。

KAZUMiXKAZUMiX 2010/07/28 17:41 >JPさん
スクロール先の指定はhtml内のidです。
CSSの方で見た目のレイアウトの指定をします。

nobitaniannobitanian 2010/08/04 01:19 初めまして。
とてもすてきなライブラリですね。
基本的な事を聞いて申し訳ありません。
scrollsmoothly.jsをダウンロードをしたいのですが、何処から
ダウンロードすることが出来るのですか?