用js如何算出浏览器中当前显示的页面的中心点的位置

JavaScript013

用js如何算出浏览器中当前显示的页面的中心点的位置,第1张

获取浏览器宽高是:

winWidth=document.body.clientWidth||document.documentElement.clientWidth

winHeight=document.body.clientHeight||document.documentElement.clientHeight

那么中心点应该就是取1/2

Var center={centerW:winWidth/2,centerH:winHeight/2}

可以这么试一下

在你的页面上某个位置放一个div或者就用你页面上已有的某个元素也行,当用户滚动的时候这个div相对于浏览器的顶部或底部的距离肯定会变化,然后你通过这个距离来判断用户浏览到当前页面的什么位置了。

参考一下,我没试过....

<!DOCTYPE html>

<html>

<head>

<title></title>

<meta http-equiv="Content-Type" content="text/htmlcharset=UTF-8">

<script type="text/javascript">

function a(){

var st = document.documentElement.scrollTop//滚去的高度

var ch = document.documentElement.clientHeight//窗口的高度

var at = document.getElementById("a").offsetTop//元素离页面顶部的高度

var v = ch - (at - st)//元素离窗口底部的高度,为负的话表示元素还在窗口底部下面

alert("距离底部的高度为:"+v)

}

</script>

</head>

<body>

<div>

test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/><input type="button" value="test" onclick="a()"/>

test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/><input type="button" value="test" onclick="a()"/>

test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/><input type="button" value="test" onclick="a()"/>

test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/><input type="button" value="test" onclick="a()"/>

test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/><input type="button" value="test" onclick="a()"/>

<div id="a" style="width:100pxheight:1pxbackground-color: red"></div>

test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/>test<br/><input type="button" value="test" onclick="a()"/>

</div>

</body>

</html>

其实有了 Haversine 公式,两点坐标之后就很简单了。你提供的上海范围太大,且没有坐标,下面例子以上海虹桥机场为参考(纬度:31.2,经度:121.4)。

要从地名获得它的经纬度应该需要有一个庞大的数据库,这点没有仔细研究过。谷歌地图应该会提供此类的 API。你可以百度一下"经纬度查询",有很多网站提供此功能。

测试的时候最好用 IE9 或 Opera 高版本,Firefox 和 Safari 有时会获取不到地理位置,Chrome 会自动屏蔽本地文件。

<script type="text/javascript">

// Haversine 公式

function getDistanceFromLatLonInKm(lat1, lon1, lat2, lon2) {

    var R = 6371

    var dLat = deg2rad(lat2 - lat1)

    var dLon = deg2rad(lon2 - lon1)

    var a =

        Math.sin(dLat / 2) * Math.sin(dLat / 2) +

        Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) *

        Math.sin(dLon / 2) * Math.sin(dLon / 2)

    var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a))

    var d = R * c

    return d

}

function deg2rad(deg) {

    return deg * (Math.PI / 180)

}

                              

// 上海虹桥机场经纬度

var lat = 31.2, lon = 121.4

                              

// 尝试获取地理位置

if(navigator.geolocation) {

    navigator.geolocation.getCurrentPosition(function(pos) {

        var d = getDistanceFromLatLonInKm(

            pos.coords.latitude,

            pos.coords.longitude,

            lat, lon).toFixed(2)

        alert("当前位置距上海虹桥机场:" + d + "公里")

    })

}

else {

    alert("浏览器不支持 geolocation")

}

</script>