【发布时间】:2011-10-15 04:59:59
【问题描述】:
我正在尝试通过计算高度差,然后更新当前滚动位置来解决对滚动偏移上方元素高度的调整。
问题是我无法阻止一个非常快速闪烁的伪影。无论我是先调整元素的高度,然后再调整滚动位置,还是反过来,我似乎都无法阻止快速的视觉跳跃。
有谁知道如何克服这个问题?我希望这些操作同时发生,中间没有渲染,但我不确定这是否可能。
// Setup
...
var myElement = ...
var oldHeight = ...
var scrollOffset = window.scrollY;
var newHeight = 100;
var diff = newHeight - oldHeight;
// Determine if we need to counteract new size
var adjustScroll = (absoluteOffset(myElement) < scrollOffset);
// Adjust size
myElement.style.height = newHeight+'px';
// Adjust scroll to counteract the new height
if (adjustScroll) window.scrollTo(0, scrollOffset+diff);
我正在使用 WebKit,特别是在 iOS 上。
【问题讨论】:
-
我不确定是否有任何方法可以阻止闪烁的发生,因为您没有说明在页面上的哪个位置添加此元素,但如果您动画高度变化它不会比 2 次快速位置变化更让用户吃惊
-
如所述,正在调整高度的元素“高于滚动偏移”。该元素始终存在,但它的高度变化看不见,我试图抵消由此引起的页面高度和滚动位置的变化。
-
是的,它可能总是会有点偏离,但就像我说的,如果你为它制作动画,它会提供更好的用户体验。然后至少用户会知道发生了什么,而不必停下来思考他们在页面上的位置
-
动画看起来很奇怪。页面从特定的滚动位置开始,并且应该停留在那里。但是,该滚动位置上方的图像最终会加载,这会将正在查看的内容推到下方,因此无法查看。我正在尝试在调整图像大小后立即检测图像加载并重置滚动位置。动画只会导致滚动位置的来回平滑或晃动。如果可能的话,我正在尝试从中删除所有视觉伪影 - 因此问题!
标签: javascript html css dom webkit