- ベストアンサー
フリックとスクロールを同時に実装するには
フリックで左右に画像をスライドできるライブラリ(flickable)をカスタマイズし、スマホ用のギャラリーを作成しているのですが、この「フリックできる画像」の上ではページをスクロールすることができません。 (windowに伝わる前にギャラリーのdom要素で止まってしまっている?) フリックとスクロールを同時に行うためにはどのような処理が必要になるかお分かりになりますでしょうか? ライブラリの紹介ではなくコード的なご指南を頂けると助かります よろしくお願いいたします
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
if( ontouchmoveの方向がフリックの方向なら ){ event.preventDefault()を実行してスクロール処理を止め、 フリックの動作を実行 }else { // (フリックの方向でなければ) 何もしない。 }
その他の回答 (1)
- anyhelp
- ベストアンサー率43% (79/181)
概念的な話ですが、2つのイベントをまず作ります。 フリックイベントとスクロールイベントです。それぞれのハンドラをリスナーでつなぎます。 ところでフリックもスクロールもタッチダウンしてタッチアップするまでのイベントの間にタッチの移動イベントがなければ発生しませんね。フリックが判定された場合、スクロールする必要は無いことがわかります。一方でフリックが判定されなければ、スクロールを判定させればよいことがわかります。つまりフリックというイベント処理を優先処理し、フリックイベントがキャンセルされる条件を決めて、そのキャンセルの場合にのみスクロールイベントを発動させるようにします。そうするとフリックしない場合はスクロールイベントハンドラでスクロールイベントをキャプチャできるようになります。
お礼
「フリックの動作がスクロールを邪魔している」という点ばかりを考え、仕組みをきちんと理解していませんでした。 おかげで全体的な処理の流れを理解することが出来ました。 ありがとうございました!
お礼
なるほど! event.preventDefault() でブラウザ本来の処理を止めることが出来るのですね anyhelpさんの解説と合わせて実装の目途がつきました ありがうございました!