2017-08-28 5 views
1

私はマウスとタッチ入力の両方で動作するjavascriptのドラッグ可能な操作に取り組んでおり、には依存性がありません。これまでのところ、それはデスクトップや携帯電話でうまく動作します。 Android版Firefoxの場合を除きページスクロール後のAndroid用Firefoxでドラッグ可能な対話が壊れた

は、次の動作を示しています

  • ページがスクロールされていません:罰金
  • ページが縦方向にスクロールさ:要素は、水平方向にのみ
  • ページが水平方向にスクロールされてドラッグすることができます:要素を垂直方向にのみドラッグすることができます
  • ページは垂直方向と水平方向にスクロールされます:要素は は戻って非常にトップにすべての
  • スクロールページにドラッグし、左:要素が再び期待

コードとしてドラッグすることができます。もう一度

var evtStart, evtMove, evtEnd; 
if ('ontouchend' in window) { 
    evtStart = 'touchstart'; 
    evtMove = 'touchmove'; 
    evtEnd = 'touchend'; 
} else { 
    evtStart = 'mousedown'; 
    evtMove = 'mousemove'; 
    evtEnd = 'mouseup'; 
} 

// BASIC DRAGGABLE INTERACTION 
// No further configuration, just drags .... 
var panel = document.querySelector('.testpanel'); 

panel.addEventListener(evtStart, function(e) { 
    e.preventDefault(); 
    var styles = window.getComputedStyle(panel), 
     left = parseFloat(styles.left),  // css left on mousedown 
     top = parseFloat(styles.top),  // css top on mousedown 
     psx = e.pageX || e.touches[0].pageX, // pointer x on mousedown 
     psy = e.pageY || e.touches[0].pageY; // pointer y on mousedown 

    // function actually draging the elmt 
    var drag = function (e) { 
     e.preventDefault(); 

     var pmx = e.pageX || e.touches[0].pageX, // current pointer x while pointer moves 
      pmy = e.pageY || e.touches[0].pageY; // current pointer y while pointer moves 

     panel.style.left = left + (pmx - psx) + 'px'; // set new css left of elmt 
     panel.style.top = top + (pmy - psy) + 'px'; // set new css top of elmt 

    }; 

    panel.addEventListener(evtMove, drag); 

    panel.addEventListener(evtEnd, function() { 
     panel.removeEventListener(evtMove, drag); 
    }); 
}); 

Demo page

、それは動作しますAndroid用のFFを除き、デスクトップと携帯では問題ありません。

なぜAndroid用FFで動作しないのですか?私のコードの中に何か、それともFFのバグですか?これまでのところ私は役に立たないものは見つけられませんでした。

私は非常に助けていただければ幸いです。

答えて

0

最後に、私はそれを自分自身を発見した:

ただclientX/clientYプロパティpageX/pageYを交換し、それは同様にAndroid用FFで動作します。

私はFF用の実装がやや異なっていると思いますが、pageX/pageYはまだMDNに基づいて最終化された標準ではありません。

関連する問題