【问题标题】:Getting element offset returns same values before setting position: absolute在设置位置之前获取元素偏移量返回相同的值:绝对
【发布时间】:2014-10-07 08:56:51
【问题描述】:

我的问题是我有 2 个<div>s,包含相同的元素。这些元素被放置在彼此下方。将元素的topleft属性设置为.offset()提供的值,然后将position设置为absolute,元素的偏移值都返回为0。为什么?

$(function(){
    $('[data-distance]').each(function(i,el){
        var $this = $(el),
            offset = $this.offset();
        $this.css(offset);
        $this.css('position','absolute');
    });
});
body {
    margin: 0;
    height: 1000px;
    font-family: arial;
}
h1 {
    margin: 0 0 10px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<div data-distance="1">
    <h1>Text</h1>
    <p>Assssssdddddddasdasdasdasdasdasdasdsda</p>
</div>
<div data-distance="0.5">
    <h1>Text</h1>
    <p>Assssssdddddddasdasdasdasdasdasdasdsda</p>
</div>

【问题讨论】:

    标签: javascript jquery css offset absolute


    【解决方案1】:

    它是0,因为当循环的第一次迭代发生时,它将第一个$('[data-distance]') 的位置设置为绝对位置,所以当第二次迭代发生时,第一个元素位于位置top: 0left: 0。正因为如此,属性position: absolute应该在找到所有匹配元素的偏移后添加。

    应该是这样的http://jsfiddle.net/vp7jt2xj/

    $('[data-distance]').each(function (i, el) {
        var $this = $(el),
            offset = $this.offset();    
        $this.css(offset);    
    });
    
    $('[data-distance]').css('position', 'absolute');
    

    【讨论】:

    • 哦,我现在明白了。感谢您的澄清。第一个元素是绝对定位的,然后第二个向上跳跃。
    • 是的,对不起,我写的太匆忙了,我现在已经修正了解释:)
    猜你喜欢
    • 2012-07-23
    • 1970-01-01
    • 1970-01-01
    • 2015-10-03
    • 2012-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多