私のアプリの一部には、ユーザーがコンテナー内の画像をズームインおよびズームアウトできる必要があるという点で、Google マップに似た機能が含まれています。
Googleマップと同じように、ユーザーがマウスホイールでスクロールできるようにし、画像上のピクセルを常にマウスポインターの真下に置いておきます。したがって、基本的に、ユーザーはマウス ポインターがある場所にズームします。
ズーム/翻訳のために、私は次のようにcss変換を使用しています:
見える
$('#image').css({
'-moz-transform': 'scale(' + ui.value + ') translate(' + self.zoomtrans.xNew + 'px, ' + self.zoomtrans.yNew + 'px)',
'-moz-transform-origin' : self.zoomtrans.xImage + 'px ' + self.zoomtrans.yImage + 'px',
'-webkit-transform': 'scale(' + ui.value + ') translate(' + self.zoomtrans.xNew + 'px, ' + self.zoomtrans.yNew + 'px)',
'-webkit-transform-origin' : self.zoomtrans.xImage + 'px ' + self.zoomtrans.yImage + 'px',
'-o-transform': 'scale(' + ui.value + ') translate(' + self.zoomtrans.xNew + 'px, ' + self.zoomtrans.yNew + 'px)',
'-o-transform-origin' : self.zoomtrans.xImage + 'px ' + self.zoomtrans.yImage + 'px',
'-ms-transform': 'scale(' + ui.value + ') translate(' + self.zoomtrans.xNew + 'px, ' + self.zoomtrans.yNew + 'px)',
'-ms-transform-origin' : self.zoomtrans.xImage + 'px ' + self.zoomtrans.yImage + 'px',
'transform': 'scale(' + ui.value + ') translate(' + self.zoomtrans.xNew + 'px, ' + self.zoomtrans.yNew + 'px)',
'transform-origin' : self.zoomtrans.xImage + 'px ' + self.zoomtrans.yImage + 'px'
});
これを行う方法のさまざまな実装を見つけることができましたが、マウスイベントを補間して勢いを与えるために自己ロールスムーズスクロール技術を使用しています。
この 2 つを正しく連携させようとするのは面倒です。
ここに大量のコードを貼り付けるのではなく、これまでに使用したズーム機能とともにマウスホイールのスムーズスクロール技術を含む jsFiddle を作成しました。
http://jsfiddle.net/gordyr/qGGwx/2/
これは基本的に、私のアプリのこの部分の完全に機能するデモです。
マウスホイールをスクロールすると、jqueryui スライダーが補間され、運動量/減速が正しく提供されることがわかります。ただし、ズームは正しく反応しません。
マウスホイールを 1 点だけスクロールすると、ズームは完全に機能しますが、それ以上のスクロールは機能しません。これは、画像の縮尺が変更され、計算が不正確になったためだと思います。私はこれを補おうとしましたが、これまでのところ運がありません.
要約すると、画像が常にマウスポインターに直接ズームするように、jsFiddle のコードを変更したいと思います。
喜んで助けてくれる人に、前もって感謝します。