4

Javascriptでは、ユーザーがピンチしていることを検出すると同時に、ユーザーがピンチできるようにしようとしています。

var elm = $("#wrapper")[0];
var myGesture = new MSGesture();
myGesture.target = elm;

elm.addEventListener("MSGestureChange", handleGesture);         
elm.addEventListener("MSPointerDown", function (e) {
    myGesture.addPointer(e.pointerId);
});

イベントを開催していMSPointerDownます。

しかし、私が知る限り、ピンチしたときにイベントを受信できるようにするには、問題の要素(#wrapper)を-ms-touch-action: none(またはpan-y pan-x)でスタイル設定する必要があります。MSGestureChange

デフォルトのピンチ動作を防ぎたくないので、私のオプションは何ですか?

これを回避する方法はありますか、それとも私はどちらか一方をやり続けていますか?

4

2 に答える 2

3

いくつかのウィンドウ/ドキュメント/画面変数の比率を確認することで、ズームの変化を検出できます。http://jsbin.com/abuzaz/8を参照してください。

onscrollウィンドウ上のイベントとイベントを登録することにより、ズームの変化を検出しonresizeます。サイズ変更またはスクロールイベントが「失われる」ことを心配している場合(発生する可能性があります)、醜い解決策は、低速インターバルタイマーを登録して再確認することです。

document.documentElement.offsetHeight-に対するの比率を調べることで、現在のピンチズームレベルを検出できますがwindow.innerHeight、これはバグ/癖が原因である可能性があります(以下を参照)。

screen.deviceXDPIonresizeイベントでの変更を確認することで、ページズーム(ctrl- +)レベルを検出できます。

さらに楽しくするには、http://jsbin.com/otocer/12の緑色のボックスで遊んでください。一方の指をタッチしてからもう一方の指をタッチするとMSPointerCancel、2本目の指がタッチするとイベントが発生します。ただし、両方を同時にタッチすると、イベントは発生しません。

タッチズーム時にウィンドウスクロールイベントが発生することがよくありますが、100%信頼できるかどうかはわかりません。タッチズームの最後にウィンドウサイズ変更イベントが発生するようです(ただし、常にではない場合があります-http ://social.msdn.microsoft.com/Forums/en-US/iewebdevelopment/thread/1065f624-32a8-4c80を参照してください- 8ced-998ba624763e)-http://jsbin.com/otocer/17を試してください

タッチズーム(ページズームではない)にはいくつかの大きなバグがあることに注意してください。

于 2013-02-11T06:22:46.727 に答える
0

このコメントは、Windows8の最終リリースで廃止されたことに注意してください

指定したcssスタイルを適用するドキュメントを読む-ms-touch-action:noneと、その要素に対して、アプリケーションがキャッチしたいjavascriptイベントを生成する必要があることがブラウザに通知されます。したがって、事実上、JSイベントを取得するか、組み込みの動作( http://msdn.microsoft.com/en-US/)を取得するかのいずれかで、ケーキを持ってそれを食べることは不可能だと思います。 library / ie / hh673557.aspx)。

于 2012-10-04T02:33:02.330 に答える