当-webkit-overflow-scrolling:touch和auto更改时,Cordova IOS像烂摊子一样滚动

时间:2019-01-22 09:46:51

标签: javascript ios css

示例代码

我的列表就像

<ul>
  <li *ngFor="let minute of minuteArr">{{minute}}</li>
</ul>

和部分CSS:

ul {
    overflow-y: auto;
    height: 200px;
    -webkit-overflow-scrolling: touch;
    position: relative;
    z-index: 1;
}
li {
    height: 40px;
    line-height: 40px;
}

我将滚动事件绑定到ul,并执行:

ul.scrollTop = [currentPos]

Math.abs(currentPos - lastPos)> 500像素或较大像素时,我的列表将为空白。

我做了一些研究,并将代码更改为:

ul.style.WebkitOverflowScrolling = 'auto'
ul.scrollTop = [currentPos]
ul.style.WebkitOverflowScrolling = 'touch'

避免硬件加速。顺便说一句,-webkit-overflow-scrolling: touch;是必需的,因为它可以使IOS内的滚动顺利进行。

然后解决空白问题。

但是现在问题变成了,在将WebkitOverflowScrolling重置为touch之后,似乎两种效果同时存在:

ul可以惯性滚动(-webkit-overflow-scrolling:touch), 但实际上,当我计算其上一个位置与后滚动位置之间的距离时,它表明它滚动了手指移动的距离(-webkit-overflow-scrolling:自动)

环境:

在iPhone 8(IOS 12)上测试, 无法使用Android设备或IOS野生动物园进行复制。它只能在由Ionic生产的IOS App上中断

我尝试使用以下方法解决此问题:

  1. 添加一些CSS,使浏览器欺骗ul或ul的父级使用GPU;
  2. 在设置ul.style.WebkitOverflowScrolling ='auto'时设置z-index:auto,因为结果就像两层重叠一样(-webkit-overflow-scrolling:touch将创建一个堆叠上下文)
  3. 更改-webkit-overflow-scrolling的不同方法

但是全部失败了。

一个适当的解决方案/解决方法,可以解决此问题而不会引起任何麻烦的副作用,并感谢您解释为什么会发生这种情况。

0 个答案:

没有答案