模拟jQuery偏移函数的回调?

时间:2012-07-09 17:48:07

标签: jquery callback offset

我正在使用jQuery offset()函数定位DIV。为了避免DIV在不正确的位置闪烁,我在定位之前隐藏了DIV,然后再次显示DIV。但是,存在同步问题,并且在某些平台(例如iPhone)上我仍然可以看到闪存。模拟offset()函数的回调函数的最佳方法是什么?

$('div').hide();
y = Math.round(($(window).height() - $('div').outerHeight())/2);
$('div').offset({top : y});
$('div').fadeIn();

修改

此外,如果禁用JavaScript,此元素仍然可见。

2 个答案:

答案 0 :(得分:1)

您可以从一开始就在视口之外渲染<div>元素,然后在隐藏它之前重新定位它并继续设置其偏移并将其淡入:

CSS:

.outside-viewport {
    position: absolute;
    left: -10000px;
}

使用Javascript:

var $div = $("div.outside-viewport");
$div.css({
    position: "relative",
    left: "0px"
}).hide().offset({
    top: ($(window).height() - $div.outerHeight()) / 2
}).fadeIn();

答案 1 :(得分:0)

在这种情况下,jQuery偏移的奇怪之处在于Frederic的上述建议是唯一能够有效恢复元素原始左偏移量的建议。 jQuery在隐藏元素和偏移方面存在一些问题。例如,如果使用position: static(根据CSS规范更正),左偏移将仍为-10000像素,尽管该元素在视口中可见。只是一张纸条。我希望它会有用。 : - )