大家好,這裏是「 從零開始學 Web 系列教程 」,並在下列地址同步更新……
- github:https://github.com/Daotin/Web
- 微信公衆號:Web前端之巔
- 博客園:http://www.cnblogs.com/lvonve/
- CSDN:https://blog.csdn.net/lvonve/
在這裏我會從 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-8readAsBinaryString()
:讀取任意類型的文件,返回二進制字符串。這個方法不是用來讀取文件展示給用戶看,而是存儲文件。例如:讀取文件的內容,獲取二進制數據,傳遞給後臺,後臺接收了數據之後,再將數據存儲。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接口獲取用戶信息。