Javascript Can';t诊断:打开页面时背景位置不同
我在我的网页上使用parallax.js (页面现在已经更新,视差被移除,直到找到一个可用的解决方案) 但是打开页面并保持刷新。有时背景图像开始怪异(关闭位置)。我在chrome和firefox上都进行了测试,我不明白为什么它会这样做 你知道吗 谢谢以下是我通过检查发现的 parallax.js存储应用它的元素的初始顶部偏移。该值存储在名为Javascript Can';t诊断:打开页面时背景位置不同,javascript,jquery,css,parallax,parallax.js,Javascript,Jquery,Css,Parallax,Parallax.js,我在我的网页上使用parallax.js (页面现在已经更新,视差被移除,直到找到一个可用的解决方案) 但是打开页面并保持刷新。有时背景图像开始怪异(关闭位置)。我在chrome和firefox上都进行了测试,我不明白为什么它会这样做 你知道吗 谢谢以下是我通过检查发现的 parallax.js存储应用它的元素的初始顶部偏移。该值存储在名为firstTop的变量中。背景位置将根据firstTop的值和当前滚动位置放置,这样背景位置只有在firstTop为0时才能达到0[例如,如果firstTop
firstTop
的变量中。背景位置
将根据firstTop
的值和当前滚动位置放置,这样背景位置
只有在firstTop
为0时才能达到0[例如,如果firstTop
为96,则背景位置将不小于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。所以,如果问题出在哪里,那将是浏览器的一个bug
所以,从另一个方向看。。。我得到的值是96,只是[有时]在缓存清理之后。在断点处,除了一个灰色背景和一个滚动条外,还没有任何渲染。。。但是如果我没有在断点处清除缓存,页面的布局是可见的
大约96,是id为“header”的div的高度。当我到达断点时,高度会有所不同,这取决于我是否清理了缓存。如果我清除了缓存,它是[有时]96,如果没有,它是150(但是现在id为“wrapper”的div有位置:relative
,它的顶部偏移量是0)
所以。。。。我们如何解释这种行为
当然,文件style.css
。如果缓存失效,浏览器必须再次下载缓存,同时执行javascript。如果在应用css之前读取id为“wrapped”的div的位置,那么偏移量是错误的。当然,当从缓存中加载样式时,会立即应用它,不会让javascript出现错误行为
注:我还得到了233的firstTop和195.875的id“header”的div高度
解决方案是什么?我不知道。我怀疑parallax.js可以通过某种方式设置固定的初始偏移。(无法在代码保持不变时设置初始偏移) 您可以查找允许检查样式的库。(注意:使用javascript读取样式不起作用,因为它们可能已加载但未应用) 如果我是你,我会修改parallax.js(或者尝试其他版本)。无需修改parallax.js
编辑1: 你应该尝试:
- 使用该属性运行代码李>
- 尝试使用
- 将样式放在任何javascript之前(或将javascript放在文档末尾)
- 使用
$(文档)。加载
而不是
$(文档)。准备好运行parallax.js
load
,而不是ready
。这些是提高javascript性能的一些常见建议,在这种情况下,它们也可以防止错误。因此,我不再尝试修改视差,至于视差,它需要的只是一点文档,我已经给作者发了一条关于这一点的信息。