【问题标题】:Parallax Flickering.. position:fixed is no option视差闪烁..位置:固定是没有选项
【发布时间】:2013-04-30 13:29:15
【问题描述】:

我需要在另一个 div 中使用溢出重新定位图像:隐藏,以获得某种“视差效果”,但这里没有选择使用“位置:固定”,因为固定定位的元素不在乎关于“溢出:隐藏”父母...所以我需要在 JS (jQuery) 中执行此操作。

在 Firefox 中一切看起来都很好,但在基于 Webkit 的浏览器和 IE9 上,背景图像(狗)在闪烁,请看这个 jsfiddle 示例:http://jsfiddle.net/7J5AM/1/

有没有办法解决这个问题? Spotify 使用相同的效果:https://www.spotify.com/uk/,但他们使用 2 个元素来实现此效果,第一个只是 Keyvisual-Image 的占位符,第二个是固定位置的元素,其中包含实际图像。

对于我的示例,这是不可能的,因为我稍后需要使用 CMS(Typo3),在那里,不可能将每个 Keyvisual 放置两次(占位符 + 图像) - 这是可能的,但这对我来说很不舒服编辑...

有没有办法绕过这种闪烁?

编辑:使用图像作为背景图像也是不可能的,因为我需要调整图像的大小以实现响应式设计...

这是脚本的重要部分:

var win_h = jQuery(window).height();
var scroll_top = jQuery(document).scrollTop();
var kv_pos = jQuery(this).parent().offset();

if(parseFloat(kv_pos.top) < (win_h + scroll_top)) {
    var new_top = (((scroll_top - kv_pos.top + 90) / 100) * 60);
    jQuery(this).css('top',new_top);
}

【问题讨论】:

  • 我实际上并没有在 MAC 上的 Chrome v26 中看到闪烁。您可以考虑尝试的一件事是在 vanilla js 中设置自己的滚动事件侦听器。我知道 jQuery 动画可能有点滞后。最后,您的代码可以得到极大的优化。您对文档反复运行 jQuery 选择器。这会减慢你的进程。 (这是一个评论,因为我真的没有任何答案。抱歉)
  • 没问题,谢谢约瑟夫的回答!在 Chrome 上闪烁较少,但在 Mac Chrome(使用 Magic Mouse)和 Windows IE9 上闪烁很多! “您对文档反复运行 jQuery 选择器”是什么意思。 ?
  • 每次滚动事件触发时,您都会调用repos_keyvisual_headline();repos_keyvisual();,它们依次运行jQuery('.selector').each()。 jQuery 必须在每个滚动周期搜索整个文档以查找这些元素。如果您缓存 jQuery 元素而不是每次都重新获取它们,理论上它会运行得更快。您还可以使用 jQuery('.selector', someElement) 来缩小 jQuery 选择器的范围,而不是搜索整个文档。编辑:我试过了,但似乎没有帮助:jsfiddle.net/BSxCB
  • 啊,我知道你的意思,是的,你是对的,但这不是一个真正的问题 :-) 我在所有脚本中都使用这种方法.. 这样你确实有一些优势和性能损失微乎其微......

标签: jquery internet-explorer google-chrome webkit parallax


【解决方案1】:

似乎没有办法用 position:absolute 做到这一点。问题是,Webkit 和 IE 的引擎在滚动时设置了一个 position:absolute Element 的新 Viewport Position。在计算并设置新位置后,我的 jQuery(window).scroll 会跳入并为 position:absolute Element 设置一个新的/其他位置。因此,如果您按像素滚动(例如 Mac 上的魔术鼠标),那么每次在 jQuery 施展魔法之前,浏览器引擎都会自行设置一个新位置 - 这会导致闪烁!

仅当您将元素设置为 position:fixed 时浏览器不会触及它们的位置...

所以我解决这个问题的方法是:在 document.ready 之后,我将 Keyvisuals 设置为 visibility:hidden 并在 body-tag 之后复制内容。然后,所有这些副本都是位置:固定的,我现在所做的就是根据它们的“隐藏占位符”将高度和顶部值设置为一个 - 就像 Spotify。

【讨论】:

  • 对不起,从整个项目/站点中提取这个 Js 很复杂,但是您可以查看 Spotify-Site,启用 Firebug 很容易了解该技术的工作原理!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-30
  • 1970-01-01
  • 2013-08-13
  • 2018-06-28
  • 1970-01-01
  • 2020-04-12
  • 1970-01-01
相关资源
最近更新 更多