天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

HTML5基礎(chǔ),第3部分:HTML5 API的威力

  上一節(jié):HTML5基礎(chǔ),第2部分:組織頁(yè)面的輸入

  英文原文:HTML5 fundamentals, Part 3: The power of HTML5 APIs

  那么,什么是API呢?

  應(yīng)用編程接口(application program interface,API)是訪問(wèn)一個(gè)軟件應(yīng)用的編程指令和標(biāo)準(zhǔn)的集合。通過(guò)使用API,你就可以設(shè)計(jì)出由API提供的服務(wù)來(lái)驅(qū)動(dòng)的產(chǎn)品。

  HTML5擁有一些新的API,例如:

  1. 一個(gè)與新的畫(huà)布元素一起使用的2D繪圖API,用于渲染圖形或是其他的視覺(jué)圖像。
  2. 一個(gè)支持離線web應(yīng)用的緩存機(jī)制的API。
  3. 一個(gè)播放視頻和音頻的API,與新的視頻和音頻元素一起使用。
  4. 一個(gè)歷史記錄API,其把瀏覽歷史變成可訪問(wèn)的,并允許把頁(yè)面添加到這一歷史中。
  5. 一個(gè)和draggable屬性一起使用的拖放API。
  6. 一個(gè)和contenteditable屬性一起使用的編輯API。
  7. 鍵-值對(duì)以及內(nèi)嵌的SQL數(shù)據(jù)庫(kù)的客戶端存儲(chǔ),使用了JavaScript API。

  本篇文章重點(diǎn)關(guān)注兩個(gè)API:Geolocation和Web Worker,首先對(duì)這些API本身進(jìn)行分析,然后創(chuàng)建一個(gè)包含這兩個(gè)API的頁(yè)面。

  無(wú)處不在的業(yè)務(wù):Geolocation

  Geolocation API被用來(lái)確定和分享地理位置,API返回經(jīng)度和緯度坐標(biāo)——這是企業(yè)可用來(lái)在這一坐標(biāo)附近的區(qū)域提供服務(wù)的信息,這類服務(wù)通常被稱作基于位置的服務(wù)(location-based service, LBS)。

  LBS以地理數(shù)據(jù)源為參考,這些地理數(shù)據(jù)源被用來(lái)標(biāo)識(shí)被監(jiān)控儀器的物理位置,從而識(shí)別出與這一位置相關(guān)的人。這一功能賦予感興趣的各方與這一個(gè)人進(jìn)行交互的機(jī)會(huì),這種交互是基于一些以地理位置為中心的興趣點(diǎn)市場(chǎng)來(lái)進(jìn)行的。

  商業(yè)實(shí)際上是為客戶創(chuàng)造品質(zhì)、實(shí)用性和價(jià)值,并同時(shí)為利益相關(guān)者、債權(quán)人、股東、員工和供應(yīng)商創(chuàng)造經(jīng)濟(jì)和金融利益。以地理位置為驅(qū)動(dòng)力的LBS使得跟蹤和監(jiān)控一個(gè)包裹(或者使用了非瀏覽器設(shè)備或?yàn)g覽器的個(gè)人)變得相當(dāng)容易。從商業(yè)化的角度來(lái)說(shuō),地理位置所涉及的就是使用地理資產(chǎn)來(lái)確定某人或是某物所處的位置,然后把這一特定的一組信息出售給想要把這些信息用于社會(huì)、商業(yè)或是其他目的的的任何人,只要信息的擁有者的這種做法是法律許可的就可以了。

  地理定位(geolocation)的工作方式

  Geolocation API基于navigator這一全局對(duì)象的一個(gè)新屬性:navigator.geolocation,這一JavaScript的navigator對(duì)象提供了一些關(guān)于訪問(wèn)者的瀏覽器和系統(tǒng)的有用信息。Geolocation可以確定使用了IP地址、基于web的數(shù)據(jù)庫(kù)、無(wú)線網(wǎng)絡(luò)連接,以及三角定位或是GPS技術(shù)的訪問(wèn)者的經(jīng)度和緯度。應(yīng)該要注意的一點(diǎn)是,由Geolocation提供的信息的準(zhǔn)確性會(huì)基于獲取信息的手段而發(fā)生變化。偶然情況下,在一些位置上,你有可能不能獲得明確的地理位置讀數(shù)或是一點(diǎn)數(shù)據(jù)都接收不到。

  腳本可使用navigator.geolocation對(duì)象來(lái)確定與用戶的宿主設(shè)備相關(guān)的位置信息,在檢索到位置信息之后,一個(gè)位置對(duì)象就會(huì)被創(chuàng)建出來(lái),并使用這些數(shù)據(jù)做填充。

  navigator.geolocation對(duì)象有三個(gè)方法:

  1. getCurrentPosition()
  2. watchPosition()
  3. clearWatch()

  getCurrentPosition()方法

  getCurrentPosition()方法檢索用戶的當(dāng)前位置,但只檢索一次。當(dāng)該方法被腳本調(diào)用時(shí),方法以異步的方式來(lái)嘗試獲取宿主設(shè)備的當(dāng)前位置。異步通信意味著發(fā)送者和接收者并未同時(shí)地加入到這一通信過(guò)程中,使用異步通信能讓瀏覽器繼續(xù)進(jìn)行其他方面的活動(dòng),這樣它就無(wú)需等待來(lái)自接收實(shí)體的響應(yīng)。

  getCurrentPosition()方法最多可以有三個(gè)參數(shù):

  1. geolocationSuccess:帶回當(dāng)前位置的回調(diào)(callback)(必需的)
  2. geolocationError. 有錯(cuò)誤發(fā)生時(shí)使用的回調(diào)(可選的)
  3. geolocationOptions. 地理位置選項(xiàng)(可選的)

  navigator.geolocation.getCurrentPositon()方法使用一個(gè)Position對(duì)象作為參數(shù)來(lái)把宿主設(shè)備的當(dāng)前位置返回給geolocationSuccess這一回調(diào),如果有錯(cuò)誤發(fā)生的話,geolocationError回調(diào)會(huì)使用一個(gè)PositionError對(duì)象來(lái)做調(diào)用。你可以設(shè)置geolocationOptions的三個(gè)屬性:enableHighAccuracy、timeout和maximumAge,這些可選屬性相應(yīng)的作用分別是啟用了高的精確性,如果設(shè)備支持這種高精確性的話;一個(gè)超時(shí)時(shí)段,這是位置應(yīng)該被返回的最長(zhǎng)等待時(shí)間;以及一個(gè)最大的時(shí)間數(shù),緩存的位置在這一時(shí)間段內(nèi)可被使用。

  getCurrentPosition()方法的調(diào)用如下所示:

  void navigator.geolocation.getCurrentPosition(geolocationSuccess, geolocationError, geolocationOptions);

  watchPosition()方法

  watchPosition()方法定期輪詢用戶的位置,查看用戶的位置是否發(fā)生改變。其最多可帶三個(gè)參數(shù)。

  當(dāng)watchPosition被調(diào)用時(shí),其異步地啟動(dòng)一個(gè)查看過(guò)程,這一過(guò)程涉及了一個(gè)新的Position對(duì)象的獲取和一個(gè)watchID的創(chuàng)建。如果這一獲取操作是成功的,則相關(guān)的使用一個(gè)Position對(duì)象作為參數(shù)的geolocationSuccess就會(huì)被調(diào)用。在失敗時(shí)涉及的操作則是使用一個(gè)非空的geolocationError參數(shù)來(lái)調(diào)用該方法,watchPosition方法使用一個(gè)PositionError對(duì)象作為參數(shù)來(lái)生成geolocationError。當(dāng)設(shè)備的位置發(fā)生改變時(shí),一個(gè)合適的帶有新的Position對(duì)象的回調(diào)就會(huì)被調(diào)用。

  watchPosition()方法的調(diào)用如下所示:

  long navigator.geolocation.watchPosition(geolocationSuccess, geolocationError, geolocationOptions);

  clearWatch()方法

  clearWatch()方法終止正在進(jìn)行的watchPosition(),該方法只能帶一個(gè)參數(shù)。在調(diào)用時(shí),其找到之前已經(jīng)開(kāi)始了的watchID參數(shù)并立即停止它。

  clearWatch()方法的調(diào)用如下所示:

  void navigator.geolocation.clearWatch(watchID)

  Geolocation數(shù)據(jù):Position對(duì)象

  Geolocation API返回一個(gè)地理上的Position對(duì)象,該對(duì)象有兩個(gè)屬性:timestamp和coords。timestamp屬性表示地理位置數(shù)據(jù)的創(chuàng)建時(shí)間,coords屬性又包含七個(gè)屬性:

  1. coords.latitude:估計(jì)緯度
  2. coords.longitude:估計(jì)經(jīng)度
  3. coords.altitude:估計(jì)高度
  4. coords.accuracy:所提供的以米為單位的經(jīng)度和緯度估計(jì)的精確度
  5. coords.altitudeAccuracy:所提供的以米為單位的高度估計(jì)的精確度
  6. coords.heading: 宿主設(shè)備當(dāng)前移動(dòng)的角度方向,相對(duì)于正北方向順時(shí)針計(jì)算
  7. coords.speed:以米每秒為單位的設(shè)備的當(dāng)前對(duì)地速度

  這些屬性中只有三項(xiàng)是保證有的:coords.latitude、coords.longitude和coords.accuracy,其余的返回null,這取決于設(shè)備的能力和其所采用的后端定位服務(wù)器。如果可能的話,heading和speed屬性可以基于用戶之前的位置計(jì)算出來(lái)。

  發(fā)揮救援作用的web worker

   web worker(web工作線程)補(bǔ)救了并發(fā)所引起的問(wèn)題,web worker是HTML5家族對(duì)JavaScript單線程問(wèn)題的回答:它們?cè)谂c主頁(yè)面分開(kāi)的線程中運(yùn)行處理過(guò)程,保留頁(yè)面以用于主要的功能,比如說(shuō)維持一個(gè)穩(wěn)定的UI等。

  一個(gè)web worker是一個(gè)在后臺(tái)加載并執(zhí)行的JavaScript文件,這些worker允許你動(dòng)態(tài)地加載一個(gè)JavaScript,然后使用不會(huì)影響到UI的后臺(tái)進(jìn)程來(lái)執(zhí)行腳本。web worker的訪問(wèn)是受限的,其只允許傳遞字符串。因?yàn)閣eb worker不使用瀏覽器的UI線程,所以他們不允許訪問(wèn)DOM。Workers可以使用self和this引用訪問(wèn)worker的全局變量(Workers can use both self and this references for the worker's global scope),worker和父頁(yè)面的通信是通過(guò)使用事件模型和postMessage()方法來(lái)實(shí)現(xiàn)的。

  因?yàn)閣eb worker有多線程行為,因此它們只能訪問(wèn)JavaScript功能的一個(gè)子集,web worker可以:

  1. 訪問(wèn)navigator對(duì)象
  2. 使用只讀的位置對(duì)象
  3. 執(zhí)行XMLHttpRequest以發(fā)送HTTP或是HTTPS請(qǐng)求
  4. 使用setTimeout()/clearTimeout()和setInterval()/clearInterval()來(lái)設(shè)置時(shí)間或是時(shí)間間隔
  5. 訪問(wèn)應(yīng)用的緩存
  6. 使用 importScripts() 方法來(lái)導(dǎo)入外部的腳本
  7. 產(chǎn)生其他的web worker(subworker必需有著與主頁(yè)面一樣的來(lái)源,且必須放置于與父worker同樣的地點(diǎn)。)

  web worker有兩種類型:專用型的worker和共享型的worker。

  專用型web worker

  專用型worker與創(chuàng)建它的腳本連接在一起,它可以與其他的worker或是瀏覽器組件通信,但是他不能與DOM通信。

  專用型worker的創(chuàng)建方法是把一個(gè)JavaScript文件名傳遞給一個(gè)新的worker實(shí)例,通過(guò)指定worker的執(zhí)行腳本URI使用Worker()構(gòu)造函數(shù)來(lái)創(chuàng)建一個(gè)新的worker。要?jiǎng)?chuàng)建一個(gè)專用型worker的話,輸入下面給出的代碼,這一代碼創(chuàng)建了一個(gè)新的專用的Worker對(duì)象:

var worker = new Worker('worker.js');        
        

it知識(shí)庫(kù)HTML5基礎(chǔ),第3部分:HTML5 API的威力,轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 乱码午夜-极品国产内射 | 国产美女又黄又爽又色视频网站 | 最近免费视频中文2019完整版 | 啊灬啊灬啊灬快灬深高潮啦 | 亚洲中字幕永久在线观看 | 影音先锋2017av天堂 | 裸妇厨房风流在线观看 | 美女扒开腿让男生桶爽免费APP | 亚洲国产五月综合网 | 99久久无码一区人妻A片蜜 | 日本久久免费大片 | 东北女人奶大毛多水多 | 欧美一区二区在线观看 | 一品道门在线视频高清完整版 | 一个人免费观看在线视频播放 | 大桥未久与黑人中出视频 | 95国产精品人妻无码久 | 国内一级一级毛片a免费 | 超碰国产亚洲人人 | 国产色婷亚洲99精品AV | 黄色三级在线观看 | 中文免费视频 | 97人妻AV天天澡夜夜爽 | 99久久中文字幕伊人情人 | 秋霞电影网视频一区二区三区 | 国产乱码一区二区三区 | 年轻漂亮的妺妺中文字幕版 | 人妻互换免费中文字幕 | 伊人久在线 | 国产精品久久久久婷婷五月色 | 奇米网一区二区三区在线观看 | 99久久久久精品国产免费麻豆 | 小学生偷拍妈妈视频遭性教育 | 野花日本大全免费观看3中文版 | 91伊人久久大香线蕉 | 4hu四虎免费影院www | nxgx69日本护士 | 亚洲 欧美 中文 日韩 视频 | 棉袜足j吐奶视频 | 116美女写真成人午夜视频 | 99国产在线视频 |