咱们一起来聊一聊HTML基础_13

咱们一起来聊一聊HTML基础_13

  • HTML5 地理定位
    • HTML5 Geolocation API 用于获得用户的地理位置。
    • HTML5 - 使用地理定位
    • getCurrentPosition() 方法 - 返回数据
  • HTML5 拖放
  • HTML 拖放实例
    • 拖到何处 - ondragover
  • HTML 本地存储
    • 什么是 HTML 本地存储?
    • HTML 本地存储对象
    • localStorage 对象
    • sessionStorage 对象
  • HTML5 应用程序缓存
    • 什么是应用程序缓存?
    • HTML Cache Manifest 实例
    • Cache Manifest 基础
  • Manifest 文件
    • manifest 文件有三个部分:
      • CACHE MANIFEST
      • NETWORK
      • NETWORK:
      • NETWORK:
    • 更新缓存

咱们一起来聊一聊HTML基础_13_第1张图片

HTML5 地理定位

定位用户的位置

HTML5 Geolocation API 用于获得用户的地理位置。

鉴于该特性可能侵犯用户的隐私,除非用户同意,
否则用户位置信息是不可用的。

HTML5 - 使用地理定位

请使用 getCurrentPosition() 方法来获得用户的位置。

下例是一个简单的地理定位实例,可返回用户位置的经度和纬度。
实例

  var x=document.getElementById("demo");
    function getLocation()
      {
      if (navigator.geolocation)
        {
        navigator.geolocation.getCurrentPosition(showPosition);
        }
      else{x.innerHTML="Geolocation is not supported by this browser.";}
      }
    function showPosition(position)
      {
      x.innerHTML="Latitude: " + position.coords.latitude +
      "
Longitude: "
+ position.coords.longitude; } </script>

例子解释:

检测是否支持地理定位

如果支持,则运行 getCurrentPosition() 方法。如果不支持,
则向用户显示一段消息。
如果getCurrentPosition()运行成功,
则向参数showPosition中规定的函数返回一个coordinates对象
showPosition() 函数获得并显示经度和纬度

上面的例子是一个非常基础的地理定位脚本,不含错误处理。

getCurrentPosition() 方法 - 返回数据

若成功,则 getCurrentPosition() 方法返回对象。
始终会返回 latitude、longitude 以及 accuracy 属性。
如果可用,则会返回其他下面的属性。
属性 描述
coords.latitude 十进制数的纬度
coords.longitude 十进制数的经度
coords.accuracy 位置精度
coords.altitude 海拔,海平面以上以米计
coords.altitudeAccuracy 位置的海拔精度
coords.heading 方向,从正北开始以度计
coords.speed 速度,以米/每秒计
timestamp 响应的日期/时间
Geolocation 对象 - 其他有趣的方法
watchPosition() 返回用户的当前位置,并继续返回用户移动时的更新位置(就像汽车上的 GPS)。
clearWatch() 停止 watchPosition() 方法
下面的例子展示 watchPosition() 方法。

实例

<script>
var x=document.getElementById("demo");
function getLocation()
  {
  if (navigator.geolocation)
    {
    navigator.geolocation.watchPosition(showPosition);
    }
  else{x.innerHTML="Geolocation is not supported by this browser.";}
  }
function showPosition(position)
  {
  x.innerHTML="Latitude: " + position.coords.latitude +
  "
Longitude: "
+ position.coords.longitude; } </script>

HTML5 拖放

拖放
拖放(Drag 和 Drop)是很常见的特性。
它指的是您抓取某物并拖入不同的位置。

拖放是 HTML5 标准的组成部分:任何元素都是可拖放的。

HTML 拖放实例

下列是关于拖放的简单例子:

实例

<!DOCTYPE HTML>
<html>
<head>
<script>
function allowDrop(ev) {
    ev.preventDefault();
}

function drag(ev) {
    ev.dataTransfer.setData("text", ev.target.id);
}

function drop(ev) {
    ev.preventDefault();
    var data = ev.dataTransfer.getData("text");
    ev.target.appendChild(document.getElementById(data));
}
</script>
</head>
<body>

<div id="div1" ondrop="drop(event)" ondragover="allowDrop(event)"></div>

<img id="drag1" src="img_logo.gif" draggable="true" ondragstart="drag(event)" width="336" height="69">

</body>
</html>
它也许看上去有点复杂,不过让我们研究一下拖放事件的所有不同部分。

把元素设置为可拖放
首先:
为了把一个元素设置为可拖放,请把 draggable 属性设置为 true:

<img draggable="true">
拖放的内容 - ondragstart 和 setData()
然后,规定当元素被拖动时发生的事情。

在上面的例子中,ondragstart 属性调用了一个 drag(event) 函数,规定拖动什么数据。
dataTransfer.setData() 方法设置被拖动数据的数据类型和值:

function drag(ev) {
    ev.dataTransfer.setData("text", ev.target.id);
}

在本例中,数据类型是 “text”,而值是这个可拖动元素的 id (“drag1”)。

拖到何处 - ondragover

ondragover 事件规定被拖动的数据能够被放置到何处。

默认地,数据/元素无法被放置到其他元素中。
为了实现拖放,我们必须阻止元素的这种默认的处理方式。

这个任务由 ondragover 事件的 event.preventDefault() 方法完成:

event.preventDefault()
进行放置 - ondrop
当放开被拖数据时,会发生 drop 事件。

在上面的例子中,ondrop 属性调用了一个函数,drop(event):

function drop(ev) {
    ev.preventDefault();
    var data = ev.dataTransfer.getData("text");
    ev.target.appendChild(document.getElementById(data));
}

代码解释:

调用 preventDefault() 来阻止数据的浏览器默认处理方式
(drop 事件的默认行为是以链接形式打开)
通过 dataTransfer.getData() 方法获得被拖的数据。
该方法将返回在 setData() 方法中设置为相同类型的任何数据
被拖数据是被拖元素的 id ("drag1")
把被拖元素追加到放置元素中

HTML 本地存储

HTML 本地存储:优于 cookies。

什么是 HTML 本地存储?

通过本地存储(Local Storage),web 应用程序能够在用户浏览器中对数据进行
本地的存储。
在 HTML5 之前,应用程序数据只能存储在 cookie 中,包括每个服务器请求。
本地存储则更安全,并且可在不影响网站性能的前提下将大量数据存储于本地。
与 cookie 不同,存储限制要大得多(至少5MB),并且信息不会被传输到服务器。
本地存储经由起源地(origin)(经由域和协议)。
所有页面,从起源地,能够存储和访问相同的数据。

HTML 本地存储对象

HTML 本地存储提供了两个在客户端存储数据的对象:
  • window.localStorage - 存储没有截止日期的数据
  • window.sessionStorage - 针对一个 session 来存储数据(当关闭浏览器标签页时数据会丢失)

在使用本地存储时,请检测 localStorage 和 sessionStorage 的浏览器支持:

if (typeof(Storage) !== "undefined") {
    // 针对 localStorage/sessionStorage 的代码
} else {
    // 抱歉!不支持 Web Storage ..
}

localStorage 对象

localStorage 对象存储的是没有截止日期的数据。
当浏览器被关闭时数据不会被删除,在下一天、周或年中,都是可用的。

实例

// 存储
localStorage.setItem("lastname", "Gates");
// 取回
document.getElementById("result").innerHTML = localStorage.getItem("lastname");

实例解释:

创建 localStorage 名称/值对,其中:name="lastname",value="Gates"
取回 "lastname" 的值,并把它插到 id="result" 的元素中

上例也可这样写:

// 存储
localStorage.lastname = "Gates";
// 取回
document.getElementById("result").innerHTML = localStorage.lastname;

删除 “lastname” localStorage 项目的语法如下:

localStorage.removeItem("lastname");

注释:名称/值对始终存储为字符串。如果需要请记得把它们转换为其他格式!

下面的例子对用户点击按钮的次数进行计数。在代码中,
值字符串被转换为数值,依次对计数进行递增:

实例

if (localStorage.clickcount) {
    localStorage.clickcount = Number(localStorage.clickcount) + 1;
} else {
    localStorage.clickcount = 1;
}
document.getElementById("result").innerHTML = "您已经点击这个按钮 " +
localStorage.clickcount + " 次。";

sessionStorage 对象

sessionStorage 对象等同 localStorage 对象,
不同之处在于只对一个 session 存储数据。
如果用户关闭具体的浏览器标签页,数据也会被删除。

下例在当前 session 中对用户点击按钮进行计数:

实例

if (sessionStorage.clickcount) {
    sessionStorage.clickcount = Number(sessionStorage.clickcount) + 1;
} else {
    sessionStorage.clickcount = 1;
}
document.getElementById("result").innerHTML = "在本 session 中,您已经点击这个按钮 " +
sessionStorage.clickcount + " 次。";

HTML5 应用程序缓存

使用应用程序缓存,通过创建 cache manifest 文件,
可轻松创建 web 应用的离线版本。

什么是应用程序缓存?

HTML5 引入了应用程序缓存(Application Cache),
这意味着可对 web 应用进行缓存,并可在没有因特网连接时进行访问。

应用程序缓存为应用带来三个优势:

  • 离线浏览 - 用户可在应用离线时使用它们
  • 速度 - 已缓存资源加载得更快
  • 减少服务器负载 - 浏览器将只从服务器下载更新过或更改过的资源

HTML Cache Manifest 实例

下例展示了带有 cache manifest 的 HTML 文档(供离线浏览):

实例

<!DOCTYPE HTML>
<html manifest="demo.appcache">

<body>
文档内容 ......
</body>

</html>

Cache Manifest 基础

如需启用应用程序缓存,请在文档的 标签中包含 manifest 属性:

<!DOCTYPE HTML>
<html manifest="demo.appcache">
...
</html>
每个指定了 manifest 的页面在用户对其访问时都会被缓存。
如果未指定 manifest 属性,则页面不会被缓存
(除非在 manifest 文件中直接指定了该页面)。
manifest 文件的建议文件扩展名是:".appcache"。

注意:manifest 文件需要设置正确的 MIME-type,即 “text/cache-manifest”。必须在 web 服务器上进行配置。

Manifest 文件

manifest 文件是简单的文本文件,
它告知浏览器被缓存的内容(以及不缓存的内容)。

manifest 文件有三个部分:

  • CACHE MANIFEST - 在此标题下列出的文件将在首次下载后进行缓存
  • NETWORK - 在此标题下列出的文件需要与服务器的连接,且不会被缓存
  • FALLBACK - 在此标题下列出的文件规定当页面无法访问时的回退页面(比如 404 页面)

CACHE MANIFEST

第一行,CACHE MANIFEST,是必需的:

CACHE MANIFEST
/theme.css
/logo.gif
/main.js

上面的 manifest 文件列出了三个资源:

一个 CSS 文件,一个 GIF 图像,以及一个 JavaScript 文件。
当 manifest 文件被加载后,浏览器会从网站的根目录下载这三个文件。
然后,无论用户何时与因特网断开连接,这些资源依然可用。

NETWORK

下面的 NETWORK 部分规定文件 "login.php" 永远不会被缓存,
且离线时是不可用的:

NETWORK:

login.asp
可以使用星号来指示所有其他其他资源/文件都需要因特网连接:

NETWORK:

FALLBACK
下面的 FALLBACK 部分规定如果无法建立因特网连接,则用 “offline.html” 替代 /html/ 目录中的所有文件:

FALLBACK:
/html/ /offline.html

注释:第一个 URI 是资源,第二个是替补。

更新缓存

一旦应用被缓存,它就会保持缓存直到发生下列情况:

  • 用户清空浏览器缓存
  • manifest 文件被修改(参阅下面的提示)
  • 由程序来更新应用缓存
    实例 - 完整的 Cache Manifest 文件
CACHE MANIFEST

/theme.css
/logo.gif
/main.js

NETWORK:
login.asp

FALLBACK:
/html/ /offline.html

提示:以 “#” 开头的是注释行,但也可满足其他用途。应用的缓存只会在其 manifest 文件改变时被更新。如果您编辑了一幅图像,或者修改了一个 JavaScript 函数,这些改变都不会被重新缓存。更新注释行中的日期和版本号是一种使浏览器重新缓存文件的办法。

关于应用程序缓存的注意事项
请留心缓存的内容。
一旦文件被缓存,则浏览器会继续展示已缓存的版本,
即使您修改了服务器上的文件。
为了确保浏览器更新缓存,您需要更新 manifest 文件。

注释:浏览器对缓存数据的容量限制可能不太一样(某些浏览器的限制是每个站点 5MB)。

你可能感兴趣的:(HTML,html)