一些 HTML API(二)

《JavaScript 高級程序設計(第三版)》閱讀隨筆

Geolocation API

getCurrentPosition

調用瀏覽器的 navigate.geolocation. getCurrentPosition 方法胸蛛,可以獲取到當前的地理位置信息:

    <script>
        var geo = navigator.geolocation.getCurrentPosition(function (data) {
            console.log(data) // 獲取成功
        }, function (err) {
            console.log(err) // 獲取失敗
        }, {}) // 一些配置參數
       </script>

在沒有必要的情況伯复,一般不設置特別高的地理位置精度,因為會慢而且更加消耗性能息罗。

watchPosition

調用瀏覽器的 navigate.geolocation. watchPosition 方法時,如果瀏覽器位置發(fā)生改變才沧,那么會返回變更后的位置信息迈喉,調用 clearWatch 可以停止監(jiān)聽。

File API

使用 HTML 的 input 標簽温圆,可以獲取到操作文件的能力:

<input type="file" />

FileReader

FileReader 是一種異步文件讀取類型挨摸。可以用來取來 File 中獲取到的文件:

    <script>
        var in1 = document.getElementById('input1')
        in1.onchange = function (event) {
            console.log('onchange', event)
            var files = event.target.files
            console.log('files', event.target.files)

            var file1 = new FileReader()

            file1.readAsText(files[0])
            file1.onload = function (data) {
                console.log('onload', data)
            }
            file1.onprogress = function (data) {
                console.log('onprogress', data)
            }
            file1.onerror = function (err) {
                console.log('onerror', err)
            }
            file1.onloadend = function (data) {
                console.log('onloadend', data)
            }
        }
    </script>

調用部分讀取

調用文件的 slice 方法岁歉,可以讀取部分文件內容得运,并返回一個 Blog 類型,Blog 類型是 FileReader 類型的父類型:

    <input type="file" id='input2'>
    <script>
        var input2 = document.getElementById('input2')
        input2.onchange = function (event) {
            console.log('onchange', event)
            var files = event.target.files
            console.log('files', event.target.files)
         
            var file2 = new FileReader()
            file2.readAsText(files[0].slice(1,3))
            file2.onload = function (data) {
                console.log('onload', data)
            }
            file2.onprogress = function (data) {
                console.log('onprogress', data)
            }
            file2.onerror = function (err) {
                console.log('onerror', err)
            }
            file2.onloadend = function (data) {
                console.log('onloadend', data)
            }
        }
    </script>

URL 對象

在獲取到文件內容以后刨裆,還可以將其保存在一塊內存空間內澈圈,然后返回該內存空間的引用,即 URL 地址:

    <input type="file" id='input3'>
    <img id='img3' alt="">
    <script>
        var input3 = document.getElementById('input3')
        input3.onchange = function (event) {
            console.log('onchange', event)
            var files = event.target.files
            console.log('files', event.target.files)

            var file3 = new FileReader()

            file3.readAsDataURL(files[0])
            file3.onload = function (data) {
                console.log('onload', data)
            }
            file3.onprogress = function (data) {
                console.log('onprogress', data)
            }
            file3.onerror = function (err) {
                console.log('onerror', err)
            }
            file3.onloadend = function (data) {
                console.log('onloadend', data)
                var img3 = document.getElementById('img3')
                img3.src = data.target.result
            }
        }
    </script>

拖放文件

結合 HTML 的拖放文件操作帆啃,還可以實現(xiàn)在拖放時獲取到文件內容:

    <div id="draggable1" style="position: absolute; width: 200px;height: 100px;background-color: rgb(79, 168, 247);">
    </div>
    <script>
        var draggable1 = document.getElementById('draggable1')
        draggable1.addEventListener('dragenter', function (e) {
            e.stopPropagation();
            e.preventDefault()
        }, false)
        draggable1.addEventListener('dragover', function (e) {
            e.stopPropagation();
            e.preventDefault()
        }, false)
        draggable1.addEventListener('drop', function (e) {
            e.stopPropagation();
            e.preventDefault()
            fileHandler(e.dataTransfer.files)
        }, false)

        function fileHandler(files) {

            var file4 = new FileReader()

            file4.readAsDataURL(files[0])
            file4.onload = function (data) {
                console.log('onload', data)
            }
            file4.onprogress = function (data) {
                console.log('onprogress', data)
            }
            file4.onerror = function (err) {
                console.log('onerror', err)
            }
            file4.onloadend = function (data) {
                console.log('onloadend', data)
            }

        }
    </script>

XHR

在獲取到文件以后瞬女,還可以直接調用 XMLHttpRequest 來提交文件內容到服務器。

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末努潘,一起剝皮案震驚了整個濱河市诽偷,隨后出現(xiàn)的幾起案子坤学,更是在濱河造成了極大的恐慌,老刑警劉巖报慕,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件深浮,死亡現(xiàn)場離奇詭異,居然都是意外死亡眠冈,警方通過查閱死者的電腦和手機飞苇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蜗顽,“玉大人布卡,你說我怎么就攤上這事」透牵” “怎么了忿等?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長崔挖。 經常有香客問我贸街,道長,這世上最難降的妖魔是什么狸相? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任薛匪,我火速辦了婚禮,結果婚禮上卷哩,老公的妹妹穿的比我還像新娘蛋辈。我一直安慰自己,他們只是感情好将谊,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著渐白,像睡著了一般尊浓。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上纯衍,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天栋齿,我揣著相機與錄音,去河邊找鬼襟诸。 笑死瓦堵,一個胖子當著我的面吹牛,可吹牛的內容都是我干的歌亲。 我是一名探鬼主播菇用,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼陷揪!你這毒婦竟也來了惋鸥?” 一聲冷哼從身側響起杂穷,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎卦绣,沒想到半個月后耐量,有當地人在樹林里發(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡滤港,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年廊蜒,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片溅漾。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡山叮,死狀恐怖,靈堂內的尸體忽然破棺而出樟凄,到底是詐尸還是另有隱情聘芜,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布缝龄,位于F島的核電站汰现,受9級特大地震影響,放射性物質發(fā)生泄漏叔壤。R本人自食惡果不足惜瞎饲,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望炼绘。 院中可真熱鬧嗅战,春花似錦、人聲如沸俺亮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽脚曾。三九已至东且,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間本讥,已是汗流浹背珊泳。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留拷沸,地道東北人色查。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像撞芍,于是被迫代替她去往敵國和親秧了。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354

推薦閱讀更多精彩內容

  • 本章內容:創(chuàng)建平滑的動畫勤庐、操作文件示惊、使用 Web Workers 在后臺執(zhí)行 JavaScript 隨著 HTML...
    了凡和纖風閱讀 414評論 0 0
  • ??隨著 HTML5 的出現(xiàn)米罚,面向未來 Web 應用的 JavaScript API 也得到了極大的發(fā)展钧汹。這些 A...
    霜天曉閱讀 1,025評論 0 0
  • 1 網絡狀態(tài) 我們可以通過window.navigator.onLine來檢測,用戶當前的網絡狀況录择,返回一個布爾值...
    xlystar閱讀 272評論 0 0
  • 一拔莱、HTML5 1.1 認識HTML5 HTML5并不僅僅只是作為HTML標記語言的一個最新版本,更重要的是它制定...
    小雨不會閱讀 260評論 0 0
  • 一隘竭、HTML5 1.1 認識HTML5 HTML5并不僅僅只是作為HTML標記語言的一個最新版本塘秦,更重要的是它制定...
    福爾摩雞閱讀 15,886評論 14 51