0

スクロール可能な領域でドラッグ可能な div の場合を考えてみましょう。div の内側をタッチすると、さらに指を動かすと、div が領域内でドラッグされます。div の外側に触れると、さらに指を動かすと、スクロール可能な領域がパンされます。

これを示す JSFiddle があります。マウスを使用すると、div を簡単にドラッグできますが、タッチ イベントも同様に機能しないようです。

注: 私はフィドルでポインター イベントを使用しているため、それらをサポートしていないブラウザーを使用している場合、フィドルが壊れているように見えるかもしれません。

この相互作用を適切に実装する方法を知っている人はいますか?

http://jsfiddle.net/mrmills/13t34jsv/

HTML:

<div id="scroll-outer">
  <div id="scroll-inner">
    <div id="handle">
    </div>
  </div>
</div>

CSS:

#scroll-outer { width: 400px; height: 400px; overflow: auto }
#scroll-inner { width: 2000px; height: 2000px }
#handle { width: 44px; height: 44px; background-color: rgba(0,0,0,0.5) }

JS:

function pointerDown(ev) {
  scrollInner.addEventListener("pointermove", pointerMove);
  scrollInner.addEventListener("pointerup", pointerUp);

  dragStartX = ev.pageX; dragStartY = ev.pageY;
}

function pointerMove(ev) {
  handle.style.transform = "translate3d(" +
    (x + ev.pageX - dragStartX) + "px, " +
    (y + ev.pageY - dragStartY) + "px, 0)";
}

function pointerUp(ev) {
  scrollInner.removeEventListener("pointermove", pointerMove);
  scrollInner.removeEventListener("pointerup", pointerUp);

  x = x + ev.pageX - dragStartX;
  y = y + ev.pageY - dragStartY;
}

var x = 0;
var y = 0;
var dragStartX = 0;
var dragStartY = 0;

var handle = document.getElementById("handle");
var scrollInner = document.getElementById("scroll-inner");
handle.addEventListener("pointerdown", pointerDown);
4

1 に答える 1