【发布时间】: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