2016-12-20 11 views
0

私は、ページ上のすべてをパンすることができるサイトを作成するためにパンズームプラグインを使用しています。このページには外部のウェブサイトへのリンクがあります。デスクトップブラウザで実行すると、すべて動作します(つまり、パンしてリンクをクリックできるようになります)。しかし、私がモバイル機器を使用しているときには、そこにリンクがないような気がします。私はそれをクリックすることはできません。私はPanzoom内の関連するコードがあると思う:モバイルでリンクが機能しない(Panzoom JSプラグインを使用)

_startMove: function(event, touches) { 
     if (this.panning) { 
      return; 
     } 
     var moveEvent, endEvent, 
      startDistance, startScale, startMiddle, 
      startPageX, startPageY, touch; 
     var self = this; 
     var options = this.options; 
     var ns = options.eventNamespace; 
     var matrix = this.getMatrix(); 
     var original = matrix.slice(0); 
     var origPageX = +original[4]; 
     var origPageY = +original[5]; 
     var panOptions = { matrix: matrix, animate: 'skip' }; 
     var type = event.type; 

     // Use proper events 
     if (type === 'pointerdown') { 
      moveEvent = 'pointermove'; 
      endEvent = 'pointerup'; 
     } else if (type === 'touchstart') { 
      moveEvent = 'touchmove'; 
      endEvent = 'touchend'; 
     } else if (type === 'MSPointerDown') { 
      moveEvent = 'MSPointerMove'; 
      endEvent = 'MSPointerUp'; 
     } else { 
      moveEvent = 'mousemove'; 
      endEvent = 'mouseup'; 
     } 

     // Add namespace 
     moveEvent += ns; 
     endEvent += ns; 

     // Remove any transitions happening 
     this.transition(true); 

     // Indicate that we are currently panning 
     this.panning = true; 

     // Trigger start event 
     this._trigger('start', event, touches); 

     var setStart = function(event, touches) { 
      if (touches) { 
       if (touches.length === 2) { 
        if (startDistance != null) { 
         return; 
        } 
        startDistance = self._getDistance(touches); 
        startScale = +matrix[0]; 
        startMiddle = self._getMiddle(touches); 
        return; 
       } 
       if (startPageX != null) { 
        return; 
       } 
       if ((touch = touches[0])) { 
        startPageX = touch.pageX; 
        startPageY = touch.pageY; 
       } 
      } 
      if (startPageX != null) { 
       return; 
      } 
      startPageX = event.pageX; 
      startPageY = event.pageY; 
     }; 

     setStart(event, touches); 

     var move = function(e) { 
      var coords; 
      e.preventDefault(); 
      touches = e.touches || e.originalEvent.touches; 
      setStart(e, touches); 

      if (touches) { 
       if (touches.length === 2) { 

        // Calculate move on middle point 
        var middle = self._getMiddle(touches); 
        var diff = self._getDistance(touches) - startDistance; 

        // Set zoom 
        self.zoom(diff * (options.increment/100) + startScale, { 
         focal: middle, 
         matrix: matrix, 
         animate: 'skip' 
        }); 

        // Set pan 
        self.pan(
         +matrix[4] + middle.clientX - startMiddle.clientX, 
         +matrix[5] + middle.clientY - startMiddle.clientY, 
         panOptions 
        ); 
        startMiddle = middle; 
        return; 
       } 
       coords = touches[0] || { pageX: 0, pageY: 0 }; 
      } 

      if (!coords) { 
       coords = e; 
      } 

      self.pan(
       origPageX + coords.pageX - startPageX, 
       origPageY + coords.pageY - startPageY, 
       panOptions 
      ); 
     }; 

リンクがあるパン機能を無効にする方法はありますか?私はリンクをクリック可能にしたいだけで、パンイベントはトリガーしません。私は起こっていることは、タッチイベントがモバイル上で(リンクの上にあっても)始めるといつでも、それがパンをトリガーするということです。

おかげで、 ギャレット

+0

Panzoomのドキュメントによれば、要素にPanzoomを無効にするには、次を使用して書かれています: $ elem.panzoom( "無効")を、 しかし、リンクにのみこれを追加する方法がわかりません。誰かが本当に素早く私を助けることができますか? – Garrett

+0

これで、リンク上でPanzoomを無効にすることができました: var $ links = $ section.find( 'a')。panzoom(); $ links.panzoom( '。panzoom'、options、{disablePan:true}); リンクをクリックしたときにパンが外れることはなくなりましたが、リンクはモバイルのどこにも移動しません。それは私もそれらをクリックしていないようです... – Garrett

答えて

0

は、私は同じ問題を持っていたと私はでpreventDefault()アクションに遅延を追加することで問題を解決しました。ソリューションのようにきれいではありませんが、それは仕事です。

setTimeout(function() { 
 
    e.preventDefault(); 
 
    e.stopPropagation(); 
 
}, 250);

関連する問題