HTML api学习笔记

别来无恙 提交于 2020-03-09 06:43:47

HTML api学习

拖放

<!DOCTYPE HTML>
<html>
<head>
<script>
function allowDrop(ev) {
    ev.preventDefault();  //阻止原生事件
}

function drag(ev) {
    ev.dataTransfer.setData("text", ev.target.id);  //为拖放事件ev添加data
}

function drop(ev) {
    ev.preventDefault();  //阻止原生事件
    var data = ev.dataTransfer.getData("text");  //从事件ev中读取data
    ev.target.appendChild(document.getElementById(data));  //利用data中的元素id构建标签完成拖放
}
</script>
</head>
<body>

<div id="div1" ondrop="drop(event)" ondragover="allowDrop(event)"></div>
//ondragover拖放结束

<img id="drag1" src="img_logo.gif" draggable="true" ondragstart="drag(event)" width="336" height="69">
//draggable属性值为 true设置元素可拖放
//ondragstart拖放开始事件

</body>
</html>

web本地存储

通过本地存储(Local Storage),web 应用程序能够在用户浏览器中对数据进行本地的存储。

在 HTML5 之前,应用程序数据只能存储在 cookie 中,包括每个服务器请求。本地存储则更安全,并且可在不影响网站性能的前提下将大量数据存储于本地。

与 cookie 不同,存储限制要大得多(至少5MB),并且信息不会被传输到服务器。

<!DOCTYPE html>
<html>
<body>

<div id="result"></div>

<script>
// Check browser support
if (typeof(Storage) !== "undefined") {
    // Store
    localStorage.setItem("lastname", "Gates");  //添加键-值对
    // Retrieve
    document.getElementById("result").innerHTML = localStorage.getItem("lastname");  //读取写入键-值对
} else {
    document.getElementById("result").innerHTML = "抱歉!您的浏览器不支持 Web Storage ...";
}
</script>

</body>
</html>

localStorage 对象存储的是没有截止日期的数据。当浏览器被关闭时数据不会被删除,在下一天、周或年中,都是可用的。
sessionStorage 对象等同 localStorage 对象,用法也一致,不同之处在于只对一个 session 存储数据。如果用户关闭具体的浏览器标签页,数据也会被删除。

应用缓存

HTML5 引入了应用程序缓存(Application Cache),这意味着可对 web 应用进行缓存,并可在没有因特网连接时进行访问。
<html manifest="demo.appcache">使用应用缓存
demo.appcache内容:

CACHE MANIFEST  
/theme.css
/logo.gif
/main.js
#CACHE MANIFEST部分规定浏览器会从网站的根目录下载这三个文件,然后,无论用户何时与因特网断开连接,这些资源依然可用

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

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

更新缓存
一旦应用被缓存,它就会保持缓存直到发生下列情况:
1.用户清空浏览器缓存
2.manifest 文件被修改(参阅下面的提示)
提示:以 “#” 开头的是注释行,但也可满足其他用途。应用的缓存只会在其 manifest 文件改变时被更新。如果您编辑了一幅图像,或者修改了一个 JavaScript 函数,这些改变都不会被重新缓存。更新注释行中的日期和版本号是一种使浏览器重新缓存文件的办法。
3.由程序来更新应用缓存

Web Workers

当在 HTML 页面中执行脚本时,页面是不可响应的,直到脚本已完成。

Web worker 是运行在后台的 JavaScript,独立于其他脚本,不会影响页面的性能。您可以继续做任何愿意做的事情:点击、选取内容等等,而此时 web worker 运行在后台。

<!DOCTYPE html>
<html>
<body>

<p>Count numbers: <output id="result"></output></p>
<button onclick="startWorker()">Start Worker</button> 
<button onclick="stopWorker()">Stop Worker</button>
<br><br>

<script>
var w;

function startWorker() {
    if(typeof(Worker) !== "undefined") {  //检查浏览器是否支持
        if(typeof(w) == "undefined") {
            w = new Worker("demo_workers.js");  //创建工作对象
        }
        w.onmessage = function(event) {
            document.getElementById("result").innerHTML = event.data;  //获取工作数据
        };
    } else {
        document.getElementById("result").innerHTML = "Sorry! No Web Worker support.";
    }
}

function stopWorker() { 
    w.terminate();  //工作结束
    w = undefined;  //使之可重用
}
</script>

</body>
</html>

demo_workers.js内容:

var i=0;

function timedCount()
{
i=i+1;
postMessage(i);  //传输数据,触发onmessage 事件
setTimeout("timedCount()",500);  //延时函数
}

timedCount();

Server-Sent

Server-Sent 事件指的是网页自动从服务器获得更新。

以前也可能做到这一点,前提是网页不得不询问是否有可用的更新。通过 Server-Sent 事件,更新能够自动到达。

var source = new EventSource("demo_sse.php");
source.onmessage = function(event) {
    document.getElementById("result").innerHTML += event.data + "<br>";
};

事件:
在这里插入图片描述

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!