获取页面中元素到文档区域document的横向 纵向坐标的两种方法及其比较
在js控制元素运动的过程中 对于页面元素坐标位置的获取是经常用到的 这里主要总结下两种方法
一 通过叠加元素对象和它的offsetParent(如果存在)的offsetLeft/offsetTop属性来实现
在阅读javascript高级程序设计第三版DOM部分时 了解到要获取某个元素在页面上的偏移量 需要将这个元素的offsetLeft和offsetTop与其offsetParent的相同属性相加 一直循环直至根元素 所以 要得到元素到文档区域的坐标位置 只需通过while循环不断获取offsetParent的offsetLeft/offsetTop直到offsetParent = null为止
js代码
代码如下:
// 获取元素到文档区域的坐标
function getPosition(element) {
var actualLeft = element offsetLeft
actualTop = element offsetTop
current = element offsetParent; // 取得元素的offsetParent
// 一直循环直到根元素
while (current !== null) {
actualLeft += current offsetLeft;
actualTop += current offsetTop;
current = current offsetParent;
}
// 返回包含left top坐标的对象
return {
left: actualLeft
top: actualTop
};
}
例子截图
firebug下测试结果截图 (注 其他浏览器已通过测试!)
二 通过 getBoundingClientRect() 方法实现
getBoundingClientRect方法用于获得页面中某个元素的左 上 右和下分别相对浏览器视窗window的位置 返回的是一个对象 该对象有四个属性 top left right bottom;该方法原本是IE Only的 但是FF +和Opera +已经支持了该方法 可以说在获得页面元素位置上效率有很大的提高 另外 该方法避免使用while循环 而是直接获取数值来实现 比第一种方法性能要好 特别是在复杂的页面上更为明显
js代码
代码如下:
// 获取元素到文档区域的坐标
function getPosition(element){
var dc = document
rec = element getBoundingClientRect()
_x = rec left // 获取元素相对浏览器视窗window的左 上坐标
_y = rec top;
// 与或body元素的滚动距离相加就是元素相对于文档区域document的坐标位置
_x += dc documentElement scrollLeft || dc body scrollLeft;
_y += dc documentElement scrollTop || dc body scrollTop;
return {
left: _x
top: _y
};
}
经测试 该方法与第一种方法获取元素相对于document的坐标大小相同 对于IE低版本浏览器 存在一些差异
注意 记得要累加上(IE除外)或body(针对IE)元素的水平或垂直滚动距离!
lishixinzhi/Article/program/Java/JSP/201311/20207
Geocoding API包括地址解析和逆地址解析功能。
地址解析是指,由详细到街道的结构化地址得到百度经纬度信息,且支持名胜古迹、标志性建筑名称直接解析返回百度经纬度。例如:“北京市海淀区中关村南大街27号”地址解析的结果是“lng:11631985,lat:39959836”,“百度大厦”地址解析的结果是“lng:11630815,lat:40056885”
逆地址解析是指,由百度经纬度信息得到结构化地址信息。例如:“lat:31325152,lng:120558957”逆地址解析的结果是“江苏省苏州市虎丘区塔园路318号”。注意:
1因为Geocoding和反Geocoding使用的门址数据以及算法都不是一样的,所以会出现不能一一对应的现象。
2解析过程中可能会出现一对坐标值对应多个地址门牌信息,本接口将返回距离坐标点最近的一个地址门牌信息。
使用限制
目前无任何使用限制。请申请key,然后使用该接口。
如何使用
第一步,申请key,点击这里获取密钥,申请key需要注册百度账号;
第二步,拼写发送>
在开发过程中有时会遇到这种情况,需要调用js的一些方法,又不需要显示h5界面。比如,在你开发的产品中,PC、h5,移动端(Android、IOS)都需要使用到同一个算法,而且这个算法又非常的复杂,若每个端都写一边,不仅浪费时间,而且如果算法涉及到复杂的数字计算,那么就可能会导致每个端写出来的算法结果不一致。
所以这个时候,使用js编写一个通用算法是比较理想的一个解决方法,因为pc、h5、Android、ios都可以直接调用js代码,并执行计算结果。
Android调用本地js步骤:步骤一:在assets下添加你需要执行的js代码步骤二:Android代码 WebView mWebView = null;
@Override protected void onCreate(Bundle savedInstanceState) {
superonCreate(savedInstanceState);
if (mWebView == null) {
initWebView();
}
getPrxResult();
}
/
调用js方法
/
private void getPrxResult(){
String e ="";
String t ="";
String url2 = "javascript:jclqBonusRange(" + e + "," + t + ")"; //调用js方法
mWebViewloadUrl(url2) } / 初始化webview
protected void initWebView() {
mWebView = new WebView(this);
mWebViewgetSetting
当时遇到这个地图也是花了一些功夫解决了点击跳转的需求,当时是实现了效果,但没有优化,提供给你参考。
这个地图插件依据浏览器不同,生成的地图代码不同,建议多测试一下。
在脚本最后注释的那个 alert就是click事件,自行替换即可。
实际的参考网站在百度发不出来地址,需要可以私信我。
//数据可以动态生成,格式自己定义,cha对应china-zhjs中省份的简称var dataStatus = [{ cha: 'HKG', name: '香港', des: '' },
{ cha: 'HAI', name: '海南', des: '' },
{ cha: 'YUN', name: '云南', des: '<br/>' },
{ cha: 'BEJ', name: '北京', des: '<br/>' },
{ cha: 'TAJ', name: '天津', des: '<br/>' },
{ cha: 'XIN', name: '新疆', des: '' },
{ cha: 'TIB', name: '西藏', des: '' },
{ cha: 'QIH', name: '青海', des: '' },
{ cha: 'GAN', name: '甘肃', des: '<br/>' },
{ cha: 'NMG', name: '内蒙古', des: '<br/>' },
{ cha: 'NXA', name: '宁夏', des: '<br/>' },
{ cha: 'SHX', name: '山西', des: '<br/>' },
{ cha: 'LIA', name: '辽宁', des: '<br/>' },
{ cha: 'JIL', name: '吉林', des: '<br/>' },
{ cha: 'HLJ', name: '黑龙江', des: '<br/>' },
{ cha: 'HEB', name: '河北', des: '<br/>' },
{ cha: 'SHD', name: '山东', des: '<br/>' },
{ cha: 'HEN', name: '河南', des: '<br/>' },
{ cha: 'SHA', name: '陕西', des: '' },
{ cha: 'SCH', name: '四川', des: '<br/>' },
{ cha: 'CHQ', name: '重庆', des: '' },
{ cha: 'HUB', name: '湖北', des: '<br/>' },
{ cha: 'ANH', name: '安徽', des: '<br/>' },
{ cha: 'JSU', name: '江苏', des: '<br/>' },
{ cha: 'SHH', name: '上海', des: '' },
{ cha: 'ZHJ', name: '浙江', des: '<br/>' },
{ cha: 'FUJ', name: '福建', des: '' },
{ cha: 'TAI', name: '台湾', des: '' },
{ cha: 'JXI', name: '江西', des: '' },
{ cha: 'HUN', name: '湖南', des: '' },
{ cha: 'GUI', name: '贵州', des: '' },
{ cha: 'GXI', name: '广西', des: '<br/>' },
{ cha: 'GUD', name: '广东', des: '<br/>'}];
$('#container')vectorMap({ map: 'china_zh',
color: "#95cee9", //地图颜色
onLabelShow: function (event, label, code) {//动态显示内容
$each(dataStatus, function (i, items) {
if (code == itemscha) {
labelhtml(itemsname + itemsdes);
}
});
}
})
var hasNum = new Array();
$each(dataStatus, function (i, items) {
if (itemsdesindexOf('br') != -1) {//动态设定颜色,此处用了自定义简单的判断
var josnStr = "{" + itemscha + ":'#1c84b7'}";
hasNumpush(itemscha);
$('#container')vectorMap('set', 'colors', eval('(' + josnStr + ')'));
}
});
$('jvectormap-zoomin')click(); //放大
$('#container')find("[id='jvectormap1']")each(function(){
var _this = $(this);
var _thisid = $(this)attr('id');
for (var i=0; i<hasNumlength; i++){
if(_thisidindexOf(hasNum[i]) != -1){
_thisclick(function(){
//alert(_thisid)
})
}
}
})
function enters() {
var vkey=$("#shengfen")val();
var option = $("<option value=" + vkey + ">" + vkey + "</option>");
$("#province option")remove();
$("#province")append(option);
}
function enterc() {
var vkey=$("#chengshi")val();
var option = $("<option value=" + vkey + ">" + vkey + "</option>");
$("#city option")remove();
$("#city")append(option);
}
运行看一下效果
吸使用以下几种方式获取:
1PageX/PageX:鼠标在页面上的位置,从页面左上角开始,即是以页面为参考点,不随滑动条移动而变化
2clientX/clientY:鼠标在页面上可视区域的位置,从浏览器可视区域左上角开始,即是以浏览器滑动条此刻的滑动到的位置为参考点,随滑动条移动 而变化
可是悲剧的是,PageX只有FF特有,IE这个悲剧没有啊T_T,所以大牛们想出了一个办法
PageY=clientY+scrollTop-clientTop;(只讨论Y轴,X轴同理,下同)
3screenX/screenY:鼠标在屏幕上的位置,从屏幕左上角开始(w3c标准)
4offsetX/offsetY:IE特有,鼠标相比较于触发事件的元素的位置,以元素盒子模型的内容区域的左上角为参考点,如果有boder,可能出现负值
5
layerX/layerY:FF特有,鼠标相比较于当前坐标系的位置,即如果触发元素没有设置绝对定位或相对定位,以页面为参考点,如果有,将改变参考坐标系,从触发元素盒子模型的border区域的左上角为参考点也就是当触发元素设置了相对或者绝对定位后,layerX和offsetX就幸福地生活在一起^-^,几乎相等,唯一不同就是一个从border为参考点,一个以内容为参考点
chrome和safari一条龙通杀!完全支持所有属性其中(offsetX和layerX都是以border为参考点)
下面这个是获取相对于屏幕的坐标
documentonmousemove=function(e){e=e e:windowevent;documentwriteln("X:"+escreenX+"Y:"+escreenY);}
以上就是关于js获取元素到文档区域document的坐标方法全部的内容,包括:js获取元素到文档区域document的坐标方法、百度地图api如何根据城市名或经纬度获取当前城市东西经南北纬范围 js、安卓上本地网页如何用JS或HTML获取本地路径等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)