這是不幸的-webkit-overflow-scrolling
不處理這更好。您需要跟蹤y
的位置才能使其工作。我將類scroll
放在我想要在我的頁面上滾動的任何內容上,例如<ul>
元素。圍繞<ul>
圍繞<div>
填充視口,使用overflow-y: auto
。不要把overflow
或height
放在<ul>
上。 <ul>
將會像其內容一樣高,並且它實際上是滾動的<div>
。 -webkit-overflow-scrolling
是繼承的,因此儘可能將DOM放在你想要的位置。
演示:http://jsfiddle.net/ThinkingStiff/FDqH7/
腳本:
var swipeY = 0;
function onTouchMove(event) {
var scroll = event.target.closestByClassName('scroll');
if (scroll) {
var top = scroll.positionTop - scroll.parentNode.positionTop,
heightDifference = (0 - scroll.offsetHeight + scroll.parentNode.offsetHeight);
if((top >= 0) && (event.touches[0].screenY > swipeY)) {
event.preventDefault(); //at top, swiping down
} else if((top <= heightDifference) && (event.touches[0].screenY < swipeY)) {
event.preventDefault(); //at bottom, swiping up
};
} else {
event.preventDefault();
};
};
function onTouchStart(event) {
swipeY = event.touches[0].screenY;
};
Element.prototype.closestByClassName = function (className) {
return this.className && this.className.split(' ').indexOf(className) > -1
? this
: (this.parentNode.closestByClassName && this.parentNode.closestByClassName(className));
};
window.Object.defineProperty(Element.prototype, 'positionTop', {
get: function() {
return this.offsetTop - this.parentNode.scrollTop;
}
});
document.getElementById('viewport').addEventListener('touchmove', onTouchMove, false);
document.getElementById('viewport').addEventListener('touchstart', onTouchStart, false);
HTML:
<div id="viewport">
<div id="scroll-view">
<ul class="scroll">
<li>scroll scroll scroll scroll scroll </li>
<li>scroll scroll scroll scroll scroll </li>
<li>scroll scroll scroll scroll scroll </li>
. . .
</ul>
</div>
</div>
CSS:
#viewport {
border: 1px solid black;
height: 460px;
width: 320px;
-webkit-overflow-scrolling: touch;
}
#scroll-view {
height: 100%;
overflow-y: auto;
width: 100%;
}
我不認爲你的事件處理程序會碰到preventDefault(),因爲target是觸發事件的元素,它永遠不會是document.documentElement()。所以你會看到和沒有事件處理程序一樣的行爲。 – ThinkingStiff
這將是'currentTarget'恐怕。目標可以返回任何內容,你可能想嘗試;) – zanona
currentTarget返回元素與監聽器,而不是拋出事件的元素。 – ThinkingStiff