LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

HTML 21 天入门:地理位置、拖放和存储

admin
2024年10月19日 22:16 本文热度 88

Geolocation

Geolocation 是 geography location 的简称,就是常说的地理位置。

HTML5 引用了地理位置 API,但大家回忆一下自己使用一个站点的经历,应该会有印象,网站会有询问信息,问是否允许使用。

地理位置信息属于用户的隐私,未经同意是不可以使用的。

使用 HTML 5 提供的地理位置信息 API,主要是 navigator.geolocation 下面的 getCurrentPosition 这个方法。

getCurrentPosition 返回地理位置对象,里面包含 coords 属性。

coords 属性也是个对象,它包含 latitude 和 longitude 两个值。

<head>   <script>     function getLocation() {       var x = document.getElementById("position");       if (navigator.geolocation) {         navigator.geolocation.getCurrentPosition(showPosition);       } else {         x.innerHTML = "该浏览器不支持获取地理位置。";       }     }      function showPosition(position) {       var x = document.getElementById("position");       x.innerHTML = `纬度: ${position.coords.latitude} <br>经度: ${position.coords.longitude}`;     }   </script>   <noscript>您的浏览器不支持 JavaScript或禁用了Javascript!</noscript> </head>  <body>   <div id="position">点击按钮获取您当前坐标:</div>   <button onclick="getLocation()">点我</button> </body> 

在第一次调用 getCurrentPosition 方法之前,浏览器会询问我们是否允许使用。

只有当同意之后,才会执行接下来的代码并获得位置信息。

getCurrentPosition() 方法的返回数据

返回的 coords 对象里,除了前面使用的 latitude 和 longitude,还有以下值:

  • accuracy: 位置精度。

  • altitude: 海拔,海平面以上以米计。

  • altitudeAccuracy: 海拔精度。

  • heading: 方向,从正北开始以度计。

  • speed: 速度,以米/每秒计。

另外,该方法还返回 timestamp 时间戳信息,表示响应的日期时间。

Geolocation 对象的 watchPosition()方法

除了 getCurrentPosition 方法,Geolocation 还有 watchPosition() 方法。

从名称上也能窥见一斑,它返回用户的当前位置,并持续返回用户移动时的更新位置。

是不是有点像导航?

相应的方法 clearWatch()则是停止 watchPosition()方法。

使用地图服务获得地理位置信息

除了使用 HTML5 提供的 getCurrentPosition 方法获取地理位置信息之外,还可以使用各大地图服务提供商的 API 去获取地址位置信息,比如说使用百度地图。

<script   type="text/javascript"   src="https://api.map.baidu.com/api?v=2.0&ak=xxxxxxxxxxxxx" ></script> <script type="text/javascript">   var x = document.getElementById("position");   function getLocation() {     var geolocation = new BMap.Geolocation();     geolocation.getCurrentPosition(function (e) {       if (this.getStatus() == BMAP_STATUS_SUCCESS) {         x.innerText = `纬度:${e.point.lat}  经度:${e.point.lng}`;       } else {         x.innerHTML = `failed ${this.getStatus()}`;       }     });   } </script> 

可以看到,这里通过 new BMap.Geolocation() 创建出了一个实例,代替上述的 navigator.geolocation。

而后面也略微有差别,它返回的对象是 point.lat 和 point.lng, 而不是 coords.latitude 和 coords.longitude。

但结果都是取到了经纬度信息。

地图服务提供的服务远不止这些,具体的需要查阅地图的 API 文档。

拖放(Drag/Drop)

拖放是 HTML5 的标准组,它包含了两个动,拖动和放开。

<head>   <style type="text/css">     .container {       width: 350px;       height: 150px;       padding: 10px;       border: 1px solid #aaaaaa;     }   </style>   <script type="text/javascript">     function dragOver(e) {       e.preventDefault();     }      function dragStart(e) {       e.dataTransfer.setData("Text", e.target.id);     }      function drop(e) {       e.preventDefault();       var data = e.dataTransfer.getData("Text");       e.target.appendChild(document.getElementById(data));     }   </script> </head>  <body>   <p>拖动图片到矩形框中:</p>   <div     id="targetDiv"     class="container"     ondrop="drop(event)"     ondragover="dragOver(event)"   ></div>   <br />   <img     id="imgDrag"     src="../img/html-0.jpg"     draggable="true"     ondragstart="dragStart(event)"     width="300"     height="110"   /> </body> 

拖放都是标签的事件,在被拖放对象上,首先把属性 draggable 设置成 true。

然后实现它的 ondragstart()方法,在这个方法里,把通过传入的事件句柄对象(e),进行拖放对象的传输,也就是要 setData()。

同时在拖放的目标位置,实现方法 ondrop()和 ondragover()。

其中 drop 方法里,通过 getData()方法获取拖放对象,然后通过 appendChild()方法把它追加到目标位置里。

ondragover()方法决定被拖放的内容放置到何处,默认是无法将一个元素内容的东西放到另一个元素里,如果要允许,除了对被播放对象设置 draggable 为 true,还得要阻止目标元素的默认出处理方式。这里只使用事件的 preventDefault()方法阻止。

存储

以往前端本地存储使用 cookie,但是在 HTML5 里,有比 cookie 更好的本地存储方式。

本地存储的意思,是存储在用户的电脑端,这样有些数据从服务器端获取之后缓存到本地,可以大大提高网站的性能。

本地存储以键值对形式存在,而且某个网页存储的内容只能该网页访问。

客户端存储数据的对象有两个:localStorage 和 sessionStorage。

localStorage

用于长久保存整个网站的数据,数据没有过期时间,直到手动删除。

<head>   <script>     function readlocalStorage() {       var messageDiv = document.getElementById("messageDiv");       if (typeof Storage !== "undefined") {         localStorage.setItem("message", "这是一条存储在localStorage里的消息。");         messageDiv.innerHTML = localStorage.getItem("message");       } else {         messageDiv.innerHTML = "对不起,您的浏览器不支持 web 存储。";       }     }   </script> </head> <body>   <button id="getLocalStorage" onclick="readlocalStorage()" value="">     点我读取本地存储   </button>   <div id="messageDiv"></div> </body> 

localStorage 常用的方法有如下,相应的 sessionStorage 也一样。

  • 保存数据:localStorage.setItem(key,value)

  • 读取数据:localStorage.getItem(key)

  • 删除单个数据:localStorage.removeItem(key)

  • 删除所有数据:localStorage.clear()

  • 得到某个索引的 key:localStorage.key(index)

sessionStorage

用于临时保存同一窗口的数据,在关闭窗口之后会被删除。

sesessionStorage 和 localStorage 一样有相应的处理数据方法,上述示例改成 sessionStorage 如下:

<head>   <script>     function readsessionStorage() {       var messageDiv = document.getElementById("messageSessionDiv");       if (typeof Storage !== "undefined") {         sessionStorage.setItem(           "message",           "这是一条存储在sessionStorage里的消息。"         );         messageDiv.innerHTML = sessionStorage.getItem("message");       } else {         messageDiv.innerHTML = "对不起,您的浏览器不支持 web 存储。";       }     }   </script> </head> <body>   <button id="getSessionStorage" onclick="readsessionStorage()" value="">     点我读取本地session存储   </button>   <div id="messageSessionDiv"></div> </body> 

效果同上。

总结

  • 🍑 使用地理位置 API 能获取当前位置信息,但这个获取需要得到用户的允许。

  • 🍑 拖放是基于标签的事件实现的,需要在被拖放元素和目标元素实现相应的事件代码。

  • 🍑 本地存储比 cookie 更好的在本地保存数据,以提高网站的性能。


该文章在 2024/10/22 12:21:50 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved