无法诊断:页面打开时背景位置不同

时间:2013-03-26 14:42:18

标签: javascript jquery css parallax parallax.js

我在网页上使用parallax.js。

http://www.edizarca.com/karpaz/(页面现已更新,视差会被删除,直到找到可用的解决方案)

但是打开页面并保持清爽。有时背景图像开始怪异(关闭位置)。我已经在chrome和firefox中进行了测试,我无法弄清楚为什么会这样做。

你有什么想法吗?

由于

1 个答案:

答案 0 :(得分:0)

以下是我通过检查发现的内容。

parallax.js存储应用它的元素的初始顶部偏移量。该值存储在名为firstTop的变量中。我会根据background-position的值和当前滚动位置放置firstTop,这样background-position只有firstTop为0时才能达到0 [例如,如果firstTop为96 background-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为“标题”的div的高度。到达断点时,高度会有所不同,具体取决于我是否清理了缓存。如果我已经清除缓存,它[有时]是96,如果不是150(但是现在带有id“wrapper”的div有position: relative并且它的顶部偏移是0)。

那么....我们如何解释这种行为?

文件style.css当然。如果缓存无效,浏览器必须再次下载,同时它将执行javascript。如果它在应用css之前读取id为“wrapped”的div的位置,则偏移量是错误的。当然,当从缓存加载样式时,它立即应用,不会让javascript出错。


注意:我还得到了233的firstTop和div的高度,标题为“标题”195.875。


解决方案?我不知道。 我怀疑parallax.js可以允许某种方式设置一个固定的初始偏移。(没有办法设置代码所代表的初始偏移量。)

您可以查找允许检查样式的库。 (注意:使用javascript读取样式不起作用,因为它们可能已加载但未应用)。

如果我是你,我会修改parallax.js(或尝试其他版本)。无需修改parallax.js。


编辑1

你应该尝试:

这个想法是让浏览器“稍后”执行视差初始化,这样它就会应用css但不会“太晚”,用户将开始与页面进行交互。

编辑2

  • 将样式放在任何javascript之前(或将javascript放在文档的末尾)。
  • 使用$(document).load而不是$(document).ready来运行parallax.js