
你好,JS没有直接获取元素相对于页面的绝对坐标的方法。但是我们可以通过相关值的计算而得到。首先我们假设input元素ID为"J_MyInput",然后看下面代码注释:
var input = documentgetElementById('J_MyInput'); // 根据ID取得元素对象var sizeObj = inputgetBoundingClientRect(); // 取得元素距离窗口的绝对位置
// 窗口的滚动偏移(垂直、水平)
var bodyOffset = {top: documentbodyscrollTop, left: documentbodyscrollLeft};
// 元素相对于页面的绝对位置 = 窗口滚动偏移 + 元素相对于窗口的绝对位置
var inputOffsetTop = sizeObjtop + bodyOffsettop; // 距顶部
var inputOffsetLeft = sizeObjleft + bodyOffsetleft; // 距左侧
希望能解决你的问题,有疑问可追问,望采纳~
题主,不知道你的代码上下文环境,全局变量是否被局部变量修改。
我这里写了一个按照你两个代码片段逻辑实现的代码,是没有问题的,由于我这里不引用jQuery,就用原生JS实现了,第一个返回值通过点击d出,第二个返回值通过鼠标离开元素d出,你可以试一下。
<!DOCTYPE html><html>
<head>
<meta charset="UTF-8">
<title>点击和移开鼠标获取元素在页面中距离左边的距离</title>
</head>
<body>
<div id="sv" style="display: block; position: absolute; left: 815px; top: 321px; height: 80px; width: 120px; background-color: #ccc; overflow: hidden;"></div>
</body>
<script>
var box = documentgetElementById("sv");
// 获得ID为sv的元素,保存为变量box
boxonclick = function() {
// 当ID为sv的元素被点击
var pos = boxgetBoundingClientRect();
// 获得box元素在页面中的位置,保存为变量pos
alert(posleft);
// d出box元素在页面中的左边距
};
var pos = boxgetBoundingClientRect();
// 获得box元素在页面中的位置,保存为变量pos(在两个代码片段中,这里的box是谁?和上图中的代码是同一个?这里默认是同一个)
boxonmouseout = function() {
// 当鼠标离开ID为sv的元素
alert(posleft);
// d出box元素在页面中的左边距
};
</script>
</html>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>无标题文档</title>
<script type="text/javascript">
<!--
var MaxLeft = 1000; //最大边距值
var Stepping = 100; //步进边距值
/上面的值可以改动, 下面的代码就不要改了/
var Margin = 0; //原边距
$ = function( id ) { return documentgetElementById( id );}
windowonload = function() {
$('a')onclick = function(){
Margin = parseInt( $('b')styleleft ); //取得B元素当前左边距
if ( Margin >= MaxLeft ) { //如果当前边距大于等于设定的最大边距
$('b')styleleft = '0px'; //设置左边距为0
$('view')innerHTML = 0; //这个只是个显示作用, 可以删除
} else { //否则
$('b')styleleft = (Margin + Stepping) + 'px'; //给原边距加上设定的步进值
$('view')innerHTML = (Margin + Stepping); //这个只是个显示作用, 可以删除
}
};
};
//-->
</script>
</head>
<body>
<button type="button" id="a">A元素</button>
<div id="b" style="width:500px;height:350px; background:#060; position:relative;z-index:0;top:100px;left:0px; line-height:350px;color:#fff; font-weight:bold; text-align:center">B元素,左边距:<span id="view">0</span>px</div>
</body>
</html>
经过测试, 在ie12、 360极速和兼容模式下都正常运行, 其他浏览器就不知道了, 没有测试!
以div为例:
拖动后记录x,y值
给div加上mousePosition事件
function mousePosition(evt){
evt = evt || windowevent;
return {
x : evtclientX + documentbodyscrollLeft - documentbodyclientLeft,
y : evtclientY + documentbodyscrollTop - documentbodyclientTop
}
}
第二次打开页面div定位
$(“div”)attr("top",y)attr("left",x);
如果元素是body内的一级元素,可以用offsetLeft直接获得其左边距。
如果元素是嵌套的,且父元素中存在容器元素(即具有定位属性的元素,包括绝对定位、相对定位、固定定位),则情况要变复杂了,需要把所有容器的offsetLeft和元素的offsetLeft相加才是最终的左边距:
var obj=documentgetElementById("test"); //假定元素的id为testvar left=objoffsetLeft;
while(obj=objoffsetParent){
left+=objoffsetLeft;
}
consolelog(left); //left就是左边距
以上就是关于JS中怎么获取input所在页面的绝对坐标全部的内容,包括:JS中怎么获取input所在页面的绝对坐标、关于js的getBoundingClientRect方法、求js代码,单击a元素之后获取b元素左边距,然后使b元素左边距等于原本边距加上100px,麻烦给完整些的答案等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)