gpt4 book ai didi

javascript - Safari 在缩小窗口时将一个奇怪的对象插入到 DOM 中,这会扰乱 jQuery 的 position() 结果

转载 作者:行者123 更新时间:2023-11-28 02:14:15 26 4
gpt4 key购买 nike

在开发更复杂的脚本时,我在 Safari 中遇到了一个相当奇怪的问题。如果重要的话,我使用 5.0.5 Win。当浏览器窗口调整大小以重新定位 position:fixed 元素时,我依赖于 jQuery 的 position().left。根据窗口是否被放大或缩小,我得到了不同的 position().left 结果,因为 Safari 在那个时刻(并且只在那个时刻)渲染了一些奇怪的元素。

我写了一个展示问题的演示页面。

Demo page screenshot

在窗口模式下的 Safari 中加载下面的源代码并稍微缩小窗口。警报会使事情卡住,这样您就会在文档的左上角看到困扰我的奇怪元素。

那到底是什么东西,它来自哪里,我该如何绕过它?

谢谢。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
<head>
<style type="text/css">
#test{
width:500px;
height:2000px;
margin: 0 auto;
}
</style>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.5.js"></script>
<script type="text/javascript">
// <![CDATA[
function resizeWindow( e ) {
alert($('#test2').position().left);
};
$(window).bind("resize", resizeWindow);
// ]]>
</script>
</head>
<body>
<div id="test"><div id="test2">Something
</div></div>
</body></html>

最佳答案

我想出了该怎么做才能停止:通过 css 将 body 的宽度明确设置为 100% 就可以了。奇怪的元素是什么,为什么一开始就没有这个元素被注入(inject),但我仍然不知道。

body {
width:100%;
}

这个解决方案不可避免地增加了一个水平滚动条。所以我加了一个类

body.safariFix
{
width:100%;
}

并在获取我需要的值之前通过 JS 分配它,然后我再次将其删除。

if ($.browser.webkit) $('body').addClass('safariFix');
...
if ($.browser.webkit) $('body').removeClass('safariFix');

添加了浏览器检测部分,因为这样做会导致 MSIE 中的无限循环。毕竟这是在调整大小事件处理程序中,删除/添加类让 MSIE 触发调整大小事件。我没有使用特征检测,因为我不知道要检测哪个特征来发现这一点。检测到奇怪的显示对象会很好,但我没有进一步研究。

关于javascript - Safari 在缩小窗口时将一个奇怪的对象插入到 DOM 中,这会扰乱 jQuery 的 position() 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6162801/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com