我在我的网页上使用 parallax.js。
http://www.edizarca.com/karpaz/(页面现已更新,视差被移除,直到找到可行的解决方案)
但是打开页面并保持刷新。有时背景图像开始怪异(关闭位置)。我已经在 chrome 和 firefox 中进行了测试,但我无法弄清楚它为什么这样做。
你有什么主意吗?
谢谢
我在我的网页上使用 parallax.js。
http://www.edizarca.com/karpaz/(页面现已更新,视差被移除,直到找到可行的解决方案)
但是打开页面并保持刷新。有时背景图像开始怪异(关闭位置)。我已经在 chrome 和 firefox 中进行了测试,但我无法弄清楚它为什么这样做。
你有什么主意吗?
谢谢
以下是我通过检查发现的。
parallax.js 存储应用它的元素的初始顶部偏移量。该值存储在一个名为 的变量中firstTop
。将background-position
根据 的值firstTop
和当前滚动位置放置,这样background-position
只有在为 0 时才能达到firstTop
0 [例如,如果firstTop
是 96background-position
将不会小于 67]。
注:更多关于96以后。
没错,firstTop
并不总是 0,我不时设法达到一个非零值。我怀疑它与浏览器缓存有关。
那么,价值firstTop
从何而来?这是代码:
//get the starting position of each element to have parallax applied to it
$this.each(function(){
firstTop = $this.offset().top;
});
其中 offset 是 JQuery 中定义的函数。在查询元素的特定情况下,它将回退到 getBoundingClientRect。所以,如果问题出在哪里,那将是浏览器的错误......
所以,换个方向看……我得到的值是 96,它只是 [有时] 在缓存清理之后。在断点处,除了灰色背景和滚动条之外,还没有渲染任何内容……但如果我没有在断点处清除缓存,则页面布局是可见的。
大约 96,它是 id 为“header”的 div 的高度。当我到达断点时,高度会有所不同,这取决于我是否清理了缓存。如果我已经清除了缓存,它是 [有时] 96,如果没有它是 150(但现在 id 为“wrapper”的 div 有position: relative
并且它的顶部偏移量是 0)。
所以....我们如何解释这种行为?
当然是文件style.css
。如果缓存失效浏览器必须重新下载它,同时它会去执行javascript。如果它在应用 css 之前读取 id 为“wrapped”的 div 的位置,则偏移量是错误的。当然,当从缓存中加载样式时,它会立即应用,不会让 javascript 行为不端。
注意:我还得到了 233 的 firstTop 和 id “header”为 195.875 的 div 的高度。
解决方案?我不知道。我怀疑 parallax.js 可能允许以某种方式设置固定的初始偏移量。(没有办法按照代码设置初始偏移量)。
您可以寻找一个允许检查样式的库。(注意:使用 javascript 读取样式不起作用,因为它们可能已加载但未应用)。
如果我是你,我会修改 parallax.js(或尝试其他版本)。无需修改 parallax.js。
编辑 1:
您应该尝试:
这个想法是让浏览器“稍后”执行视差的初始化,以便它会应用 css,但不会“太晚”用户开始与页面交互。
编辑 2:
$(document).load
而不是$(document).ready
运行 parallax.js