2012-01-13 51 views
1

我正在创建一个具有固定div(例如200px高度)和该滚动内容的iOS网络应用程序。我不喜欢默认的iOS滚动,因为它不像您通过向下滑动浏览网页时发现的本地滚动(iOS中的本地滚动具有动量,而overflow的默认滚动没有动量)。iOS div势头滚动没有固定高度(内容通过ajax加载)?

div我想在滚动具有以下素质:

  1. 设置宽度
  2. 动态高度(通过AJAX内容)

的内容是从外部网站加载到使用jQuery AJAX的div,并且有一个选项可以重新加载AJAX请求。这意味着,根据所加载页面中的内容数量,div的高度将会改变。

我似乎无法找到允许势头的iOS滚动在div没有一组与任何解决方案,我已经试过如下:

  1. - webkit-overflow-scrolling: touch
  2. iScroll

及存在的问题与这些:

  1. 这是我的第一选择,因为它只是一个css标签,通常工作正常。这是新的,但有很多的错误,包括一个为我的网络应用程序的交易断路器。如果您focusinput元素上,页面放大(即使meta标记设置为user-scalable:no),并不会缩小,直到您在文本框中键入文本,然后一切都关闭3px
  2. 此解决方案滞后,高度需要固定。使用它的刷新功能,是因为它需要时重新加载页面时,AJAX请求被重新加载到被调用,如果元素是隐藏的太麻烦了,等

TL; DR:是否有比其他任何解决方案-webkit-overflow-scrollingiScroll这将允许我在动态高度(通过AJAX加载的内容)的div上使用动量滚动吗?

回答

1

我目前所做的克服动态高度问题的方法是在DOM更新后设置高度。我通过使用以下代码做到这一点:

document.getElementById('content').style.height = window.innerHeight - getPosition('loading')[1] + "px"; 

在这个例子中的主要DIV是“内容”我有一个右上面DIV称为装载跨度它使用作为基准点,因为在尺寸报头的改变取决于你所在的webapp的哪一部分。下面是getPosition函数:

function getPosition(who){ 
var e = document.getElementById(who); 
var position = {x:0,y:0}; 
while (e) { 
    position.x += e.offsetLeft; 
    position.y += e.offsetTop; 
    e = e.offsetParent; 
} 
return [position.x , position.y];}; 

此外,我相信自iOS 5.0.1以来,缩放已被修复。

相关问题