摘要:和支持事件通知機(jī)制,可以將數(shù)據(jù)更新的通知發(fā)送給監(jiān)聽(tīng)者。語(yǔ)言采用的是單線程模型,的目的,就是為創(chuàng)造多線程環(huán)境,允許主線程將一些任務(wù)分配給子線程。在主線程運(yùn)行的同時(shí),子線程在后臺(tái)運(yùn)行,兩者互不干擾。等到子線程完成計(jì)算任務(wù),再把結(jié)果返回給主線程。
存儲(chǔ)
localStorage
存儲(chǔ): window.localStorage.setItem("key", "value"); 取值: window.localStorage.getItem("key"); 刪除: window.localStorage.removeItem("key"); 清除: window.localStorage.clear(); 長(zhǎng)度: window.localStorage.length
sessionStorage
存儲(chǔ): window.sessionStorage.setItem("key", "value"); 取值: window.sessionStorage.getItem("key"); 刪除: window.sessionStorage.removeItem("key"); 清除: window.sessionStorage.clear(); 長(zhǎng)度: window.sessionStorage.length
sessionStorate、localStorage、cookies三者區(qū)別: 1. sessionStorate和localStorage存儲(chǔ)空間更大, 5M或者更大;cookie存儲(chǔ)一般不能超過(guò)4kb。 2. sessionStorate和localStorage不會(huì)自動(dòng)把數(shù)據(jù)發(fā)給服務(wù)器,僅為本地存儲(chǔ);cookie在每次http請(qǐng)求都會(huì)傳送到服務(wù)端。 3. sessionStorage不在不同的瀏覽器窗口中共享,即使是同一個(gè)頁(yè)面;localStorage在所有同源窗口中都是共享的;cookie也是在所有同源窗口中都是共享的。 4. sessionStorate和localStorage支持事件通知機(jī)制,可以將數(shù)據(jù)更新的通知發(fā)送給監(jiān)聽(tīng)者。ApplicationCache
優(yōu)點(diǎn): 1. 離線瀏覽 - 用戶(hù)可在離線時(shí)瀏覽您的完整網(wǎng)站 2. 速度 - 緩存資源為本地資源,因此加載速度較快。 3. 服務(wù)器負(fù)載更少 - 瀏覽器只會(huì)從發(fā)生了更改的服務(wù)器下載資源
manifest 瀏覽器會(huì)打印如下信息: Creating Application Cache with manifest http://localhost:5555/index/cache.manifest cache:1 Application Cache Checking event cache:1 Application Cache Downloading event cache:1 Application Cache Progress event (0 of 1) http://localhost:5555/images/default_pic.jpg cache:1 Application Cache Progress event (1 of 1) cache:1 Application Cache Cached event
manifest屬性可指向絕對(duì)網(wǎng)址或相對(duì)路徑,但絕對(duì)網(wǎng)址必須與相應(yīng)的網(wǎng)絡(luò)應(yīng)用同源。清單文件可使用任何文件擴(kuò)展名,但必須以正確的MIME類(lèi)型提供。 cache.manifest文件配置如下: CACHE MANIFEST # 2010-06-18:v3 # Explicitly cached entries /index.html /images/default_pic.jpg # offline.html will be displayed if the user is offline FALLBACK: / /offline.html # All other resources (e.g. sites) require the user to be online. NETWORK: * # Additional resources to cache CACHE: /images/logo1.png /images/logo2.png /images/logo3.png
CACHE: 這是條目的默認(rèn)部分。系統(tǒng)會(huì)在首次下載此標(biāo)頭下列出的文件(或緊跟在 CACHE MANIFEST 后的文件)后顯式緩存這些文件。 NETWORK: 此部分下列出的文件是需要連接到服務(wù)器的白名單資源。無(wú)論用戶(hù)是否處于離線狀態(tài),對(duì)這些資源的所有請(qǐng)求都會(huì)繞過(guò)緩存。可使用通配符。 FALLBACK: 此部分是可選的,用于指定無(wú)法訪問(wèn)資源時(shí)的后備網(wǎng)頁(yè)。其中第一個(gè) URI 代表資源,第二個(gè)代表后備網(wǎng)頁(yè)。兩個(gè) URI 必須相關(guān),并且必須與清單文件同源。可使用通配符。
更新緩存 var appCache = window.applicationCache; appCache.update(); // Attempt to update the user"s cache. ... if (appCache.status == window.applicationCache.UPDATEREADY) { appCache.swapCache(); // The fetch was successful, swap in the new cache. } update()獲取新的應(yīng)用緩存 swapCache()將原緩存換成新緩存 此流程只是讓瀏覽器檢查是否有新的清單、下載指定的更新內(nèi)容以及重新填充應(yīng)用緩存。 上述過(guò)程需要對(duì)網(wǎng)頁(yè)進(jìn)行兩次重新加載才能向用戶(hù)提供新的內(nèi)容,其中第一次是獲得新的應(yīng)用緩存,第二次是刷新網(wǎng)頁(yè)內(nèi)容。 為了避免重新加載兩次的麻煩,可以設(shè)置監(jiān)聽(tīng)器 // Check if a new cache is available on page load. window.addEventListener("load", function(e) { window.applicationCache.addEventListener("updateready", function(e) { if (window.applicationCache.status == window.applicationCache.UPDATEREADY) { // Browser downloaded a new app cache. // Swap it in and reload the page to get the new hotness. window.applicationCache.swapCache(); if (confirm("A new version of this site is available. Load it?")) { window.location.reload(); } } else { // Manifest didn"t changed. Nothing new to server. } }, false); }, false);Drag and Drop
var drag1 = document.getElementById("drag1"); var drag2 = document.getElementById("drag2"); drag1.addEventListener("dragover", function (event) { event.preventDefault(); }, false); drag1.addEventListener("drop", function (event) { event.preventDefault(); var id = event.dataTransfer.getData("id"); drag1.appendChild(document.getElementById(id)); }, false) drag2.addEventListener("dragstart", function(event) { event.dataTransfer.setData("id", event.target.id); }, false);
屬性 | 描述 |
---|---|
ondrag | 元素被拖動(dòng)時(shí)運(yùn)行的腳本 |
ondragstart | 在拖動(dòng)操作開(kāi)端運(yùn)行的腳本 |
ondragover | 當(dāng)元素在有效拖放目標(biāo)上正在被拖動(dòng)時(shí)運(yùn)行的腳本 |
ondragenter | 當(dāng)元素元素已被拖動(dòng)到有效拖放區(qū)域時(shí)運(yùn)行的腳本 |
ondragleave | 當(dāng)元素離開(kāi)有效拖放目標(biāo)時(shí)運(yùn)行的腳本 |
ondragend | 在拖動(dòng)操作末端運(yùn)行的腳本 |
ondrop | 當(dāng)被拖元素正在被拖放時(shí)運(yùn)行的腳本 |
event.dataTrasfer.setData(),設(shè)置一個(gè)key-value。 dragover事件,默認(rèn)地,數(shù)據(jù)/元素?zé)o法被放置到其他元素中。為了實(shí)現(xiàn)拖放,我們必須阻止元素的這種默認(rèn)的處理方式。 drop事件的默認(rèn)行為是以鏈接形式打開(kāi)。Web Workers
JavaScript語(yǔ)言采用的是單線程模型,Web Worker的目的,就是為JavaScript創(chuàng)造多線程環(huán)境,允許主線程將一些任務(wù)分配給子線程。在主線程運(yùn)行的同時(shí),子線程在后臺(tái)運(yùn)行,兩者互不干擾。等到子線程完成計(jì)算任務(wù),再把結(jié)果返回給主線程。
主線程 main.js var worker = new Worker("worker.js"); worker.postMessage("I am main.js"); worker.addEventListener("message", function (event) { console.log("main receive:" + event.data); }, false);
子線程 worker.js self.addEventListener("message", function (event) { console.log("worker receive:" + event.data); self.postMessage("I am worker.js"); }, false);
關(guān)閉主線程 worker.terminate(); 關(guān)閉子線程 self.close();Web Sockets
客戶(hù)端 var connection = new WebSocket("ws://localhost:5555", "echo-protocol"); connection.onopen = function (event) { console.log("open") connection.send("This is a client") } connection.onmessage = function (event) { console.log("message:" + event.data) } connection.onclose = function (event) { console.log("close") }
服務(wù)端(node.js) var express = require("express"); var app = express(); var http = require("http"); var server = http.createServer(app); var WebSocketServer = require("websocket").server; var wsServer = new WebSocketServer({ httpServer: server }); var connection; wsServer.on("request", function(req){ connection = req.accept("echo-protocol", req.origin); connection.on("message", function(message) { var msgString = message.utf8Data; console.log(msgString) connection.sendUTF(msgString); }); });
注:socket.io是目前最流行的WebSocket實(shí)現(xiàn)
Historyhistory.pushState()
pushState方法不會(huì)觸發(fā)頁(yè)面刷新,只是導(dǎo)致history對(duì)象發(fā)生變化,地址欄會(huì)有反應(yīng)。
history.pushState()接收3個(gè)參數(shù) state:一個(gè)與指定網(wǎng)址相關(guān)的狀態(tài)對(duì)象,popstate事件觸發(fā)時(shí),該對(duì)象會(huì)傳入回調(diào)函數(shù)。如果不需要這個(gè)對(duì)象,此處可以填null。 title:新頁(yè)面的標(biāo)題,但是所有瀏覽器目前都忽略這個(gè)值,因此這里可以填null。 url:新的網(wǎng)址,必須與當(dāng)前頁(yè)面處在同一個(gè)域。瀏覽器的地址欄將顯示這個(gè)網(wǎng)址。 var stateObj = {"page": "1"}; history.pushState(stateObj, "title", "?debug=1");
history.replaceState()
replaceState方法參數(shù)和pushState方法參數(shù)相同,但是會(huì)修改瀏覽歷史中當(dāng)前紀(jì)錄。
history.replaceState(null, null, "?page=2");
history.state
history.pushState({page: 1}, null, "?page=1"); history.state {page: 1}
popstate事件
每當(dāng)同一個(gè)文檔的瀏覽歷史(即history對(duì)象)出現(xiàn)變化時(shí),就會(huì)觸發(fā)popstate事件。僅僅調(diào)用pushState方法或replaceState方法 ,并不會(huì)觸發(fā)該事件,只有用戶(hù)點(diǎn)擊瀏覽器倒退按鈕和前進(jìn)按鈕,或者使用JavaScript調(diào)用back、forward、go方法時(shí)才會(huì)觸發(fā)。另外,該事件只針對(duì)同一個(gè)文檔,如果瀏覽歷史的切換,導(dǎo)致加載不同的文檔,該事件也不會(huì)觸發(fā)。
window.onpopstate = function (event) { console.log("location: " + document.location); console.log("state: " + JSON.stringify(event.state)); }; // 或者 window.addEventListener("popstate", function(event) { console.log("location: " + document.location); console.log("state: " + JSON.stringify(event.state)); });
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/82826.html
摘要:移動(dòng)端報(bào)表使用方法安裝好插件后,在瀏覽器中調(diào)用時(shí),需要在報(bào)表路徑后面加上參數(shù)。另外移動(dòng)端的插件,圖表是只支持顯示新圖表。 HTML5報(bào)表插件安裝及使用編輯 插件安裝插件網(wǎng)址以及設(shè)計(jì)器插件安裝方法和服務(wù)器安裝插件的方法可以官網(wǎng)上面搜索,這里就不做詳細(xì)介紹了。 移動(dòng)端HTML5報(bào)表使用方法安裝好插件后,在瀏覽器中調(diào)用時(shí),需要在報(bào)表路徑后面加上參數(shù)op=h5。但是PC端不完全支持H5效果。移...
一、HTML5與HTML4 1.1 推出的理由和目標(biāo) H5的出現(xiàn),對(duì)于Web來(lái)說(shuō)意義重大。因?yàn)樗囊鈭D是想要把目前Web上存在的各種問(wèn)題一并解決掉。 Web瀏覽器之間的兼容性很低 文檔結(jié)構(gòu)不夠明確(增加了很多結(jié)構(gòu), 語(yǔ)義化的標(biāo)簽) Web應(yīng)用程序的功能受到了限制 H5 的出現(xiàn)極大的解決了上面的問(wèn)題 1.2 語(yǔ)法的改變 1.2.1 DOCTYPE聲明 H5 DOCTYPE的聲明是這樣的: ...
閱讀 2560·2021-09-22 15:25
閱讀 2968·2021-09-14 18:03
閱讀 1220·2021-09-09 09:33
閱讀 1705·2021-09-07 09:59
閱讀 2934·2021-07-29 13:50
閱讀 1504·2019-08-30 15:44
閱讀 1720·2019-08-29 16:22
閱讀 1291·2019-08-29 12:49