수직 작업을 스크롤하고 엘레멘트를 수평으로 이동하려면 Math.abs()를 사용하여 좌표 차이를 비교하여 x 축과 y 축의 이동이 더 많은지 확인한 다음 touchmove 이벤트에서 .preventDefault()를 호출할지 결정해야합니다. .
소리가 좀 이상하지만 나는이 거대한 기능 "과장된 내비게이션 탐색"을 제어하는 유일한 방법이라고 생각합니다. 블레어.
$(function() {
function extract(e) {
if (e.changedTouches) {
e = e.changedTouches;
if (e['0'])
e = e['0'];
}
return e;
}
var div = $('div').html('Drag me left and right and see that Overscroll is disabled & drag me up and down to see that scroll still works<br /><br /><br />'.repeat(300));
var di = div.get(0); // get native dom element
var startx, lastx, lasty, l = false, active = false;
di.addEventListener("touchstart", function (e) {
active = true;
e = extract(e);
// init
lastx = e.pageX;
lasty = e.pageY;
l = parseInt(div.css('left'), 10);
startx = e.pageX;
}, false);
di.addEventListener("touchmove", function (ee) {
if (active) {
var e = extract(ee);
// check if preventDefault to cancel Overscroll history navigation only if it's needed
if (Math.abs(lastx - e.pageX) > Math.abs(lasty - e.pageY)) {
ee.preventDefault();
}
// update x y to next above calculation
lastx = e.pageX;
lasty = e.pageY;
// repositioning
div.css({left: (l + (e.pageX - startx))+'px'})
}
}, false);
di.addEventListener("touchend", function (e) {
active = false;
}, false);
});
터치 기기에서 테스트 할
완료 예 : DEMO
혹시이 문제를 파악 했습니까? 나는 하루 종일 인터넷 검색을하고있어 아무데도 갈 수 없다. –
예, 답변으로 추가했습니다. – Lg102