参考如下:
<input type="text">
<div id="divShow" style="display:noneposition:absolute">显示的内容;</div>
display:none,表示此层隐藏;
position:absolute,表示此层的为绝对位置,方便后期进行绝对定位
添加事件,完成效果;
<script type="text/javascript">
function showDiv(obj) {
// 保存元素;
var el = obj
// 获得元素的左偏移量;
var left = obj.offsetLeft
// 获得元素的顶端偏移量;
var top = obj.offsetTop
// 循环获得元素的父级控件,累加左和顶端偏移量;
while (obj = obj.offsetParent) {
left += obj.offsetLeft
top += obj.offsetTop
}
// 设置层的坐标并显示;
document.all.divShow.style.pixelLeft = left
// 层的顶端距离为元素的顶端距离加上元素的高;
document.all.divShow.style.pixelTop = top + el.offsetHeight
document.all.divShow.style.display = "block"
}
</script>
<style>
#divShow
{
width:150px
height:180px
border-width:thin
background:yellow
}
</style>
<input type="text" onfocus="showDiv(this)">
<div id="divShow" style="display:noneposition:absolute">显示的内容;</div>
注意:
offsetLeft和OffsetTop不是获得元素和页面的距离,只是获得元素和父元素的的距离,所以要进行while循环一层层累加距离,最后得到元素和页面之间的距离
层次关系:本元素->父元素->……>body->null,当为null时,退出while循环。
最终效果如下:
<body><div id="div1" style="width:100px height:100px background:#ccc"></div>
</body>
<script>
var oDiv = document.getElementById('div1')
oDiv.style.position = 'fixed'
oDiv.style.top = '20px'
oDiv.style.left = '20px'
</script>
主要思想就是,在js中修改div的位置。所有的赋值,都可以计算后再传值,这样就不想CSS中只能写一个值了。