【发布时间】:2017-09-09 06:44:43
【问题描述】:
我在 iOS 上的 Safari 遇到了一个奇怪的问题。 我正在使用 jQuery 来操作几个 div,移动它们,包装它们并赋予它们动态高度。在每个浏览器上,这些更改在第一页加载期间完美运行,在 Safari 上,有时是,有时不是。
基本上在 Safari 中,它加载页面而不应用任何更改,然后如果我不断刷新它,它永远不会工作,但如果我在地址栏上重新输入 url,然后我点击“输入”,那么它就会工作。
现在,我解决了它,将触发这些 DOM 操作的函数包装在一个 setTimeout 函数中,我给它一个 400 的延迟。所以现在它在触发该函数之前等待 400 毫秒,这样它就可以工作了,但我没有非常喜欢它。我想知道你们是否知道更好的系统。
我的代码:
$('.wrap-services, .wrap-banner-cta, .wrap-logos, footer').wrapAll('<div class="fixer"></div>');
$('.fixer').insertAfter('.content');
function getHeight() {
var imgOffset = $('.wrap-hero-home picture.splash-main img').offset().top;
var fixerHeight = $('.fixer').height();
imgHeight = $('.wrap-hero-home picture.splash-main img').height();
$('.fixer').css('top', (imgOffset + imgHeight) + 50);
$('.container').height((imgOffset + imgHeight + fixerHeight) + 50);
}
//this is what I use now to prevent that issue
setTimeout(getHeight, 400);
谢谢
【问题讨论】:
-
您是否只需要页面和所有资产完全加载?你也许可以这样做:
$(window).load(function(){/* Do something */}); -
我已经在 $(document).ready... DOM 已加载
-
我不认为你应该把那个里面的文件准备好,但我一直在用它自己的方式。也许值得一试。
-
如果我将功能从准备好的文档中移出,它根本不起作用。我试图将它包装在 $(window).load 中......但它根本不起作用
-
也许你应该展示一些 HTML 和 JS。毕竟,这是 Stack Overflow,一个获取代码帮助的网站 :)
标签: javascript jquery ios iphone