【发布时间】:2013-05-02 11:27:16
【问题描述】:
我正在设计一个专门在 iPad 上使用的 HTML/JS 应用程序。在应用程序中,有一些可滚动的元素。
我将文档的宽度和高度分别设置为 1024 和 768。我将视口设置为
<meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=no" />
然后我使用类
.scrollable {
overflow: auto;
-webkit-overflow-scrolling: touch;
}
让可滚动的 div 正确滚动。最后,我使用了一些 javascript 来阻止文档本身的过度滚动,同时允许可滚动的 div 和列表:
$(document).on('touchmove',function(e){
e.preventDefault();
});
//uses body because jquery on events are called off of the element they are
//added to, so bubbling would not work if we used document instead.
$('body').on('touchstart','.scrollable',function(e) {
if (e.currentTarget.scrollTop === 0) {
e.currentTarget.scrollTop = 1;
} else if (e.currentTarget.scrollHeight === e.currentTarget.scrollTop + e.currentTarget.offsetHeight) {
e.currentTarget.scrollTop -= 1;
}
});
//prevents preventDefault from being called on document if it sees a scrollable div
$('body').on('touchmove','.scrollable',function(e) {
e.stopPropagation();
});
所有这些都有效 - 主要是。然而,有一个障碍。如果可滚动元素不包含需要滚动的足够内容,则尝试滚动它会启动整个文档的过度滚动。我已经阅读了数百个博客和其他 SO 问题,但找不到解决方案。任何想法都非常感谢。
【问题讨论】:
-
为了快速修复它,你可以在你的班级设置一个最小高度。
-
这不是那么简单,因为可滚动的类在不同的地方,高度在运行时动态确定。
标签: html css ipad scroll overscroll