sakazuki.info

たまに近況が更新されたりします

ページの自動スクロールを可能にするHandsFreadの裏ワザ?「速度調節」と「スクロールを止める」方法

calendar

reload

http://handsfread.herokuapp.com/

こんなツールを待っていました。

説明はこちら。

『どんなページでも自動スクロールが可能になるブックマークレット』
http://www.lifehacker.jp/2012/04/120420handsfread.html

設定するには、HandsFreadのホームページを開いて、スクロールインターバル、スクロール幅(1pxごとのスクロール、または数秒ごとに大きめの幅のスクロールなどの設定が可能)を設定し、HandsFreadブックマークレットをブックマークツールバーへドラッグします。あとは、自動スクロールをしたい時にブックマークレットをクリックするだけです。

2つほど、ライフハッカーに書いていなかった裏ワザ?を発見したので、共有してみます。

複数のブックマークレットを登録すれば、スピードを調節可能

表示するページの文章・コンテンツ量、文字の大きさなどによって
スクロールのスピードを変えたい場合。

そういう場合は、
「3px/100msのブックマークレット」
→ javascript:setInterval(function(s){scrollBy(0,s||3)},100) ブックマークレット用
「5px/100msのブックマークレット」
→ javascript:setInterval(function(s){scrollBy(0,s||5)},100) ブックマークレット用
「7px/100msのブックマークレット」
→ javascript:setInterval(function(s){scrollBy(0,s||7)},100) ブックマークレット用
のように、スクロール速度の異なるブックマークレットをまとめて登録しておけば問題ありません。

文字の大きいサイトや、1画面あたりの情報が少ないサイトなら、3px/100ms、
文字の小さいサイトや、1画面あたりの情報が多いサイトなら、7px/100ms、
という感じで使い分けられます。

自動スクロールを止めるには?

自動スクロールしていて、「ここはちゃんと読みたい!」と思った部分があった場合は、
スクロールを「相殺」することで自動スクロールを止めることができるようです。

例えば、3px/100msでの自動スクロールを止めたい場合は、
「-3px/100ms」のブックマークレットを作っておいて、それを押すだけでOK。

例: javascript:setInterval(function(s){scrollBy(0,s||-3)},100) ブックマークレット用

一瞬、上下にブルブル震えてしまう事もあるのですが、
少し待つと、うまく相殺され、自動スクロールが止まってくれます。

ただし、振動が止まるまでの時間はまちまちです。
すぐ止まることもあれば、10秒以上震え続ける場合も…w

なかなか震えが止まらない場合には、
「同じ速度でもう一度自動スクロールさせて、止める」という荒業(?)もあります。

この時、同じ速度で自動スクロールさせなければ、
振動周期の異なる振動が加わってしまい、物凄い勢いで画面が揺れます。
(それはそれで面白いですが)

例をあげると、
javascript:setInterval(function(s){scrollBy(0,s||3)},100) ブックマークレット用

javascript:setInterval(function(s){scrollBy(0,s||-3)},100) ブックマークレット用
を実行して震えている最中に
javascript:setInterval(function(s){scrollBy(0,s||5)},100) ブックマークレット用

のように違う速度のブックマークレットを実行すると、震えながら自動スクロールします。
大変読みづらいです。

その後に、
javascript:setInterval(function(s){scrollBy(0,s||-5)},100) ブックマークレット用
を実行すると、

ちなみに、間違ってもブログの更新画面で実行してはいけません。
今やってみましたが、物凄くブログが書きづらくなります。

もちろん、最初から上に向かって自動スクロールさせることも可能です。

震えたくないあなたへ

とは言いつつ、しばらく実験していると、かなりの確率で震え続けることがわかりました。

それではさすがに実用に至らない…。

ということで、解決方法を見つけました。

javascript:setInterval(function(s){scrollBy(0,s||1)},10) ブックマークレット用
javascript:setInterval(function(s){scrollBy(0,s||-1)},10) ブックマークレット用

この2つのブックマークレットで相殺すれば、振動が起きません。

今までは「100ミリ秒につき●ピクセル」という移動速度だったところを、
「10ミリ秒につき1ピクセル」という移動速度にした…ということですね。

なんでこの方法で震えないのか、できれば説明したいのですが
文章が無駄に長くなってしまいそうなので、ここではやめておきます。

「10ミリ秒につき1ピクセル」で移動速度が速すぎるという方は、
「20ミリ秒につき1ピクセル」くらいにしてみると良いでしょう。

javascript:setInterval(function(s){scrollBy(0,s||1)},20) ブックマークレット用
javascript:setInterval(function(s){scrollBy(0,s||-1)},20) ブックマークレット用

「10ミリ秒につき1ピクセル」と「20ミリ秒につき1ピクセル」の中間くらいの速度がいいなー、という方は
「15ミリ秒につき1ピクセル」くらいの速度にしてみるといいかもしれません。

javascript:setInterval(function(s){scrollBy(0,s||1)},15) ブックマークレット用
javascript:setInterval(function(s){scrollBy(0,s||-1)},15) ブックマークレット用

(「20ミリ秒につき1ピクセル」だと、止めた時に一瞬震えます。「15ミリ秒につき1ピクセル」だと、あんまり震えません。)

ぜひお試しあれ!