« 2019年6月 | トップページ | 2019年9月 »

2019年7月

2019年7月28日 (日)

LongDriver がスマートフォンでは使えなかった?

フットボールのプレイブックソフト LongDriver がスマートフォンでは使えなかったようですが、不具合の一部を修正しました。

今頃気付いた

そもそも私はスマートフォンを持っていませんでした。それで、携帯端末での動作確認・デバッグはタブレットを使用していたのですが、まさかタブレットとスマートフォンは動作が共通ではないと思っていませんでした(あるいは、私の持っているタブレットは少し古いので、その後仕様が変更されたのかも知れません)。

ところが、今まで使って来た所謂ガラケーは今年の11月いっぱいで、ほとんど使い物にならないほど機能が限定されるとの連絡が有り、止むを得ずスマートフォンに切り替えることになりました。そのスマートフォンで LongDriver を使ってみてビックリ。まともに動きません。今頃気付きました。

preventDfault() が効かない

最近のスマートフォンはデフォルトでは preventDfault() が効かないようです。効かせるためには、イベントリスナーの追加時にパラメータで指定する必要が有るそうです(参照: addEventListener の第3引数が拡張されてるという話スクロール禁止が overflow:hidden や preventDefault(); でできないときの対処法)。下記コードの赤色部分です。

    eventtarget.addEventListener(event, listener, {passive: false});

LongDriver では、今までイベント処理の指定は

    eventtarget.onevent = listener;

という方式でやっていたので、これらを置き換える必要が有るのですが、話しは単純ではありません。 addEventListener() するだけではなく、それまでリスナーだったものを removeEventListener() する必要が有ります。そのリスナーが何だったかを調べてコードを修正して行きました。

画像を拡大するとドラッグ時にページがスライドする

画像を拡大していない時は問題無いのですが、拡大した状態で選手マークをドラッグするとページがスライドするという問題が有ることも分かりました。これは、イベント touchstart, touchend のリスナー内では preventDfault() を実行していないことが原因と思われます。しかし、これを実行するとイベント click を捕捉出来なくなるので、現時点では preventDfault() は実行していません。イベント click はプレイルート作成のトリガである水平バーのクリックやメニュー等のクリックに使用しており、 preventDfault() を実行するとクリックに反応しなくなります。イベント click は使わずに touchstarttouchend でエミュレートすれば良いのかなと思っていますが、未だ修正していません。

« 2019年6月 | トップページ | 2019年9月 »