2013-07-14 8 views
5

私はiPadで使用する少しの "pdf"ビューアを持っています。私はHTMLでPDFをレンダリングするのが非常に遅いことを発見して以来、私はPNGソリューションを使用しようとしました。 Webアプリケーションで、すべてがピクセル完全であるため、ズームは無効です。ハンマーで偽のズームが動作しない

私のアイデアは、どれほど大きくてもイメージをカプセル化する実際にはdivである「ウィンドウ」の種類を作成することでした。ここまでは順調ですね。

しかし、私はピンチピンチをエミュレートするためにハンマーを試してみることにしました。ピンチインやアウトするとページが揺れるように見えますが、何もできません...しかし、イベントハンドラ(アラート)にアラートを追加すると、期待通りに機能します。

これはコードです:

(function($){ 
    var pdfViewer = { 
    pdf: {}, 
    currentPage : 1, 
    currentZoom : 200, 
    defaultZoom : 200, 
    intervalZoom : 30, 
    el : { 
     pdfWindow : $('.pdf-window'), 
     image : $('.pdf-window').find('img') 
    }, 
    init : function(){ 
     this.bindEvents(); 
    }, 
    bindEvents : function(){ 
     var self = this; 
     this.el.pdfWindow.hammer().on('pinchin',function(e){ 
     self.currentZoom = self.currentZoom - self.intervalZoom; 
     self.updateZoom.apply(self); 
     }); 
     this.el.pdfWindow.hammer().on('pinchout',function(e){ 
     self.currentZoom = self.currentZoom + self.intervalZoom; 
     self.updateZoom.apply(self); 
     }); 
    }, 
    updateZoom : function(){ 
     this.el.image.attr('width',this.currentZoom + '%'); 
    } 
    }; 

    pdfViewer.init(); 
})(jQuery); 

そして、これはきれいデモです。あなたはiOSデバイスで試してみてください...間違っている可能性のあるアイデアはありますか?

バグデモ:私のiPad 1、iOSの5.1にhttp://jsbin.com/ivixov/1/quiet

+0

pinchイベントと仕事を使用することだと思います警戒?同時に2つのコードで矛盾することをしようとする問題があるかもしれないように思えます。この警告は現在、あなたがこれを防ぐ手段です。 – pandavenger

+0

@pandavenger私はイベントハンドラの中にアラートを置きます。本当に意味をなさないし、コードはあなたが見ることができるように本当に簡単です。 –

+0

これらのイベントのいずれかを追加すると役立つかどうか教えてください。それ自身でズームするなど、iPadのデフォルト動作を防ぐ必要があるかもしれません。 https://github.com/EightMedia/hammer.js/wiki/Event-delegation-and-how-to-stopPropagation---preventDefaults – pandavenger

答えて

0

期待どおりに動作します。私の推測ではピンチイベントはあまりにも敏感でピンチ移動ごとに何度も何回も呼び出されますが、最初のピンチイベントが発生した後でコード実行を一時停止するよう警告します。私はあなたがこのようなpinchinイベント変更することをお勧め:

this.el.pdfWindow.hammer().on('pinchin',function(e){ 
    self.currentZoom = self.currentZoom - self.intervalZoom; 
    if(self.currentZoom < 0) self.currentZoom = 0; 
    self.updateZoom.apply(self); 
}); 

をそしてintervalZoom

を小さくしようとする。しかし、私は良いアイデアがevent.gesture.scaleパラメータであなたが置いている

関連する問題