2015-04-07 87 views
0

我期待“提升”以前相对定位的<div>,以便我可以绝对控制其位置。 div使用自举网格进行定位。没有移动元素从相对固定位置改变

为此,我想将样式从“相对”更改为“固定”,但没有(最初)移动<div>

我试图找到获取相对元素的绝对左侧属性的方法,允许我在更改到固定位置时简单地设置它,但似乎没有?做一个合适的方式来做到这一点(它感觉有点不好意思)。

+0

不,那是保持位置,同时从相对转化到固定的方式。 – mohamedrias

+0

当你想从相对修改?滚动? – DrKey

+0

@drKey我想改变点击(以后能够动画) –

回答

1

使用Element.getBoundingClientRect()获得元素相对于视口的坐标。

在这个片段中,单击列表项冻结到位:

document.addEventListener('click', function(e) { 
 
    var el= e.target; 
 
    if(el.tagName==='SPAN') { 
 
    var br= el.getBoundingClientRect(); 
 
    el.style.position= 'fixed'; 
 
    el.style.left= br.left+'px'; 
 
    el.style.top = br.top +'px'; 
 
    } 
 
});
body {font: 40px verdana;} 
 
span {position: relative; color: white; cursor: pointer} 
 
#A {background: #036;} 
 
#B {background: #630;} 
 
#C {background: #063;} 
 
#D {background: #603;} 
 
#E {background: #360;}
<ul> 
 
    <li><span id="A">Alpha </span> 
 
    <li><span id="B">Bravo </span> 
 
    <li><span id="C">Charlie</span> 
 
    <li><span id="D">Delta </span> 
 
    <li><span id="E">Echo </span> 
 
</ul> 
 
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> 
 
<p>Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?</p>

+0

object.getBoundingClientRect()工作像一个魅力 –

1

这里是你的代码示例,你在评论问:

,我发现了元素的offset顶部和左侧位置在第一。

然后使用.css()设置它使用Jquery API。

$(function() { 
 
    var $tobechanged = $("#tobechanged").offset(); 
 
    $("#tobechanged").css({ 
 
     top : $tobechanged.top+"px", 
 
     left: $tobechanged.left+"px", 
 
     position: "fixed" 
 
    }); 
 
});
body { 
 
    height: 30000px; 
 
} 
 

 
#relative { 
 
    background: red; 
 
    height: 50px; 
 
    width: 100%; 
 
} 
 
#tobechanged { 
 
    height: 100px; 
 
    background: green; 
 
    width: 100%; 
 
    position: relative; 
 
}
<script src="//code.jquery.com/jquery-1.11.1.min.js"></script> 
 

 
<body> 
 
<div id="relative"> 
 
    
 
</div> 
 
<div id="tobechanged"> 
 
    
 
</div>

使用纯JS:

window.onload = function() { 
 

 
    var $tobechanged = document.querySelector("#tobechanged"), 
 
    $tobechangedOffset = $tobechanged.getBoundingClientRect(); 
 
    $tobechanged.style.top = $tobechangedOffset.top+"px"; 
 
    $tobechanged.style.left = $tobechangedOffset.left+"px"; 
 
    $tobechanged.style.position = "fixed"; 
 
};
body { 
 
    height: 30000px; 
 
} 
 

 
#relative { 
 
    background: red; 
 
    height: 50px; 
 
    width: 100%; 
 
} 
 
#tobechanged { 
 
    height: 100px; 
 
    background: green; 
 
    width: 100%; 
 
    position: relative; 
 
}
<body> 
 
<div id="relative"> 
 
    
 
</div> 
 
<div id="tobechanged"> 
 
    
 
</div>

相关问题