在不移动元件的情况下从相对位置更改为固定位置
Change from relative to fixed position without moving element
我想"提升"一个以前相对定位的<div>
,这样我就可以绝对控制它的位置。div使用引导程序网格进行定位。
为此,我想将样式从"相对"更改为"固定",但不(最初)移动<div>
。
我试图找到获得相对元素的绝对左属性的方法,允许我在更改到固定位置时简单地设置它,但似乎没有?这是一种恰当的方式(感觉有点古怪)。
使用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>
下面是您在评论中询问的代码示例:
我首先得到元素的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>
相关文章:
- 在地图加载/页面加载时,我想将地图设置为当前地理位置,但不想在地图上显示定位图标
- JQuery定位:我可以滚动到正确的位置一次,但不能滚动两次
- 如何在jquerymobile中同时放置两个定位的经纬度位置
- Javascript / 根据一个元素的位置定位另一个元素
- 如何定位“隐藏”的 iframe?(应用程序:链接到嵌入“隐藏的海报图像”嵌入的 Youtube 视频的起始位置)
- 与位置的相对定位:绝对
- 在没有“位置”属性的情况下实现绝对定位,使用边距/填充
- 用于相对于用户在约束内单击的位置定位框的数学公式
- 运行地理位置定位的 js 文件
- 如果定位服务关闭,英特尔 XDK 地理位置将找不到纬度/经度
- 在 iPad 上绝对定位不会将元素设置在所需位置
- 如何使用 jQuery 计算相对定位元素的绝对位置*没有*
- 如果php返回位置头,我如何在jquery ajax中定位页面
- 试着根据父母的位置来定位孩子
- 地理定位api没有给出准确的用户位置
- 定位父元素,使子元素处于完全相同的位置
- 如何在Javascript/Mootools中根据页面上不同对象的位置定位箭头
- 使用javascript查找元素相对于最近相对定位的父元素的位置
- 多个谷歌位置请求功能(药房定位器)
- 点击html5地理定位当前位置,然后减去两点