LoginSignup
29
27

More than 5 years have passed since last update.

iOS6のSafari/WebViewでスクロール中にsetTimeoutなどのイベントが発行されない問題をiScrollで解決!

Last updated at Posted at 2013-01-27

FrogApps 技術ブログ始めました!
RailsやiOS、HTML5の情報を発信中!! → http://qiita.com/teams/frogapps


 iOS 6のSafari/WebViewはChromeやOSX版Safariと少しずつ違う動きをして、モバイル版WebやWebAppを作るときに頭を悩ませます。

 先週、ミイルの中で使うHTML/Javascriptを書いている時に、iOS6でたまにsetTimeout/IntervalやWebWorkerからのmessageが届かない事に気がつきました。
ググってみると、iOS6のMobileSafariでは画面がスクロールしているときに上記の様なイベントが発行されないようなのです。jQuery本家のBBSでも打つ手無し的な事が書かれていました。

 これではsetIntervalで500ms毎にスクロール位置を検出して何かしたくても、検出する方法がありません。

 Safariのスクロール機能を使わずにタッチイベントとTrasform3Dを駆使してiOSのスクロールをエミュレートする、iScroll 4を使うことで、この問題を解決することができます。

 iScrollは元々CSSのoverflow:scrollをエミュレートするために作られたライブラリですが、MobileSafariが同機能をサポートした今は、高度なスクロールのカスタマイズやPull to Refreshの処理を行うためのライブラリとして提供されています。

 使い方は簡単でただscriptタグで読み込むだけです。
 
 iOS 6でタイマーイベントが’使えるようになるほかに、WebViewでHTMLの端まで引っ張ったときに、バウンス部分の影が見えて格好が悪いことがあります。しかし、このライブラリを使うことで見えなくすることが可能です。

 MobileSafariのスクロール処理で困った方は、iScroll4を試してみてください。

29
27
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
29
27