從零開始學 Web 之 HTML5(三)網絡監聽,全屏,文件讀取,地理定位接口,應用程序緩存

大家好,這裏是「 從零開始學 Web 系列教程 」,並在下列地址同步更新……

在這裏我會從 Web 前端零基礎開始,一步步學習 Web 相關的知識點,期間也會分享一些好玩的項目。現在就讓我們一起進入 Web 前端學習的冒險之旅吧!

一、網絡監聽接口

  • ononline:網絡連通時觸發
  • onoffline:網絡斷開時觸發
window.addEventListener("online", function(){});
window.addEventListener("offline", function(){});

二、全屏接口

全屏操作的主要方法和屬性:

1、requestFullScreen(); 開啓全屏顯示

但是不同的瀏覽器需要添加的前綴不同:

chrome:webkit , firefox:moz ,IE:ms

於是就變成了 webkitRequestFullScreen()mozRequestFullScreen()msRequestFullScreen()。由於使用的方法不同,所以要做兼容性處理。

2、cancelFullScreen(); 退出全屏顯示

退出全屏的操作也要加前綴,並且調用其的元素只能是 ducument,而不能是其他元素。

3、fullscreenElement;是否是全屏狀態

判斷是否爲全屏狀態也要加前綴,並且調用其的元素只能是 ducument,而不能是其他元素。(注意只有 firefox是駝峯寫法,最符合 html5 標準)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div>
    <img src="images/l1.jpg"><br>
    <input type="button" value="進入全屏" id="btn1">
    <input type="button" value="退出全屏" id="btn2">
    <input type="button" value="是否全屏" id="btn3">
</div>

<script>
    // 開啓全屏顯示
    document.querySelector("#btn1").addEventListener("click", function () {
        var divObj = document.querySelector("div");
        if (divObj.requestFullscreen) {
            divObj.requestFullscreen();
        }
        else if (divObj.webkitRequestFullScreen) {
            divObj.webkitRequestFullScreen();
        }
        else if (divObj.mozRequestFullScreen) {
            divObj.mozRequestFullScreen();
        }
        else if (divObj.msRequestFullScreen) {
            divObj.msRequestFullScreen();
        }
    }, false);

    // 退出全屏顯示
    document.querySelector("#btn2").addEventListener("click", function () {
        if (document.cancelFullscreen) {
            document.cancelFullscreen();
        }
        else if (document.webkitCancelFullScreen) {
            document.webkitCancelFullScreen();
        }
        else if (document.mozCancelFullScreen) {
            document.mozCancelFullScreen();
        }
        else if (document.msCancelFullScreen) {
            document.msCancelFullScreen();
        }
    }, false);

    // 是否是全屏狀態
    document.querySelector("#btn3").addEventListener("click", function () {
        if (document.fullscreenElement || document.webkitFullscreenElement || document.mozFullScreenElement || document.msFullscreenElement) {
            console.log("yes");
        }
        else {
            console.log("no");
        }
    }, false);
</script>
</body>
</html>

三、應用程序緩存

主要應用在:當離線模式下,頁面需要選擇性緩存一些內容的時候。

<!DOCTYPE html>
<!--manifest="應用程序緩存清單文件的路徑  建議文件的擴展名是appcache,這個文件的本質就是一個文本文件"-->
<html lang="en" manifest="demo.appcache">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        img{
            width: 300px;
            display: block;
        }
    </style>
</head>
<body>
<img src="../images/l1.jpg" alt="">
<img src="../images/l2.jpg" alt="">
<img src="../images/l3.jpg" alt="">
<img src="../images/l4.jpg" alt="">
</body>
</html>

demo.appcache 文件

CACHE MANIFEST
#上面一句代碼必須是當前文檔的第一句
#後面寫註釋

#需要緩存的文件清單列表
CACHE:
#下面就是需要緩存的清單列表
../images/l1.jpg
../images/l2.jpg
# *:代表所有文件

#配置每一次都需要重新從服務器獲取的文件清單列表
NETWORK:
../images/l3.jpg

#配置如果文件無法獲取則使用指定的文件進行替代
FALLBACK:
../images/l4.jpg ../images/banner_1.jpg
# /:代表所有文件

四、文件讀取接口

FileReader:主要是讀取文件內容。

使用 new FileReader 生成的對象有下列幾個方法,用於讀取文件:

  • readAsText():讀取文本文件,返回文本字符串,默認編碼是UTF-8

  • readAsBinaryString():讀取任意類型的文件,返回二進制字符串。這個方法不是用來讀取文件展示給用戶看,而是存儲文件。例如:讀取文件的內容,獲取二進制數據,傳遞給後臺,後臺接收了數據之後,再將數據存儲。

  • readAsDataURL():讀取文件獲取一段以data開頭的字符串,這段字符串的本質就是DataURL。

    DataURL是一種將文件(這個文件一般就是指圖像或者能夠嵌入到文檔的文件格式)嵌入到文檔的一種格式。DataURL是將資源轉換爲base64編碼的字符串形式,並且將這些內容直接存儲在url中,這樣做可以優化網站的加載速度和執行效率。

  • abort():中斷文件讀取。

比如現在有一需求,選擇圖片並實時顯示(類似在網頁上更換頭像,可以實時預覽圖片):

<body>
<!--需求:即時預覽:
即時:當用戶選擇完圖片之後就立刻進行預覽的處理 >>onchange
預覽:通過文件讀取對象的readAsDataURL()完成-->
<form action="">
    文件: <input type="file" name="myFile" id="myFile" onchange="getFileContent();"> <br>
    <div></div>
    <input type="submit">
</form>
<img src="" alt="">
<script>
    var div=document.querySelector("div");
    function getFileContent(){
       /*1.創建文件讀取對象*/
        var reader=new FileReader();
        /*2.讀取文件,獲取DataURL
        * 2.1.說明沒有任何的返回值:void:但是讀取完文件之後,它會將讀取的結果存儲在文件讀取對象的result中
        * 2.2.需要傳遞一個參數(binary large object):文件(圖片或者其它可以嵌入到文檔的類型)
        * 2.3:文件存儲在file表單元素的files屬性中,它是一個數組,當有 multiple 屬性的時候這個數組的值會有多個。*/
        var file=document.querySelector("#myFile").files[0];
        reader.readAsDataURL(file);
        /*獲取數據*/
        /*FileReader提供一個完整的事件模型,用來捕獲讀取文件時的狀態
        * onabort:讀取文件中斷片時觸發
        * onerror:讀取錯誤時觸發
        * onload:文件讀取完成且成功時觸發
        * onloadend:文件讀取完成時觸發,無論成功還是失敗
        * onloadstart:開始讀取時觸發
        * onprogress:讀取文件過程中持續觸發*/
        reader.οnlοad=function(){
            //console.log(reader.result);
            /*展示*/
            document.querySelector("img").src=reader.result;
        }
        // 模擬進度條顯示
        reader.οnprοgress=function(e){
            var percent= (e.loaded/ e.total)*100+"%";
            div.style.width=percent;
        }
    }
</script>
</body>

onchange:就是當文件內容發生變化時觸發的事件。

五、地理定位接口

方法:

// 參數1:獲取地理信息成功之後的回調函數
// 參數2:獲取地理信息失敗之後的回調函數
// 參數3:調整獲取當前地理信息的方式
//       enableHighAccuracy:true/false:是否使用高精度
//       timeout:設置超時時間,單位ms
//       maximumAge:可以設置瀏覽器重新獲取地理信息的時間間隔,單位是ms
navigator.geolocation.getCurrentPosition(success,error,option);

示例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .de {
            width: 300px;
            height: 300px;
            border: 1px solid #ddd;
        }
    </style>
</head>
<body>
<div id="demo" class="de"></div>
<script>
    var x = document.getElementById("demo");

    function getLocation() {
        /*能力測試*/
        if (navigator.geolocation) {
            navigator.geolocation.getCurrentPosition(showPosition, showError, {
                /*enableHighAccuracy:true,
                timeout:3000*/
            });
        }
        else {
            x.innerHTML = "Geolocation is not supported by this browser.";
        }
    }

    /*成功獲取定位之後的回調*/
    function showPosition(position) {
        x.innerHTML = "Latitude: " + position.coords.latitude +
            "<br />Longitude: " + position.coords.longitude;
    }

    /*獲取定位失敗之後的回調*/
    function showError(error) {
        switch (error.code) {
            case error.PERMISSION_DENIED:
                x.innerHTML = "User denied the request for Geolocation."
                break;
            case error.POSITION_UNAVAILABLE:
                x.innerHTML = "Location information is unavailable."
                break;
            case error.TIMEOUT:
                x.innerHTML = "The request to get user location timed out."
                break;
            case error.UNKNOWN_ERROR:
                x.innerHTML = "An unknown error occurred."
                break;
        }
    }

    getLocation();
</script>

</body>
</html>

獲取地理位置成功,將會把獲取到的地理信息以參數的形式傳遞給回調函數:

position.coords.latitude 緯度
position.coords.longitude 經度
position.coords.accuracy 精度
position.coords.altitude 海拔高度

注意:由於地理位置屬於用戶的隱私信息,一般瀏覽器不允許獲取,只有在瀏覽器中開啓之後才能夠獲取。然而,在中國使用PC端的瀏覽器是不允許獲取到用戶的信息的,手機端可以。

這裏寫圖片描述

這裏寫圖片描述

那麼怎麼在PC端的瀏覽器獲取到用戶的位置信息呢?

調用百度地圖,高德地圖等第三方提供的API接口獲取用戶信息。

發佈了165 篇原創文章 · 獲贊 45 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章