本文最初發表於 "博客園" ,併在 "GitHub" 上持續更新 前端的系列文章 。歡迎在GitHub上關註我,一起入門和進階前端。 以下是正文。 BOM的介紹 JavaScript的組成 JavaScript基礎分為三個部分: ECMAScript:JavaScript的語法標準。包括變數、表達式 ...
以下是正文。
BOM的介紹
JavaScript的組成
JavaScript基礎分為三個部分:
ECMAScript:JavaScript的語法標準。包括變數、表達式、運算符、函數、if語句、for語句等。
DOM:文檔對象模型,操作網頁上的元素的API。比如讓盒子移動、變色、輪播圖等。
BOM:瀏覽器對象模型,操作瀏覽器部分功能的API。比如讓瀏覽器自動滾動。
什麼是BOM
BOM:Browser Object Model,瀏覽器對象模型。
BOM的結構圖:
從上圖也可以看出:
window對象是BOM的頂層(核心)對象,所有對象都是通過它延伸出來的,也可以稱為window的子對象。
DOM越是BOM的一部分。
window對象:
window對象是JavaScript中的頂級對象。
全局變數、自定義函數也是window對象的屬性和方法。
window對象下的屬性和方法調用時,可以省略window。
下麵講一下 BOM 的常見內置方法和內置對象。
彈出系統對話框
比如說,alert(1)
是window.alert(1)
的簡寫,因為它是window的子方法。
系統對話框有三種:
alert(); //不同瀏覽器中的外觀是不一樣的
confirm(); //相容不好
prompt(); //不推薦使用
打開視窗、關閉視窗
1、打開視窗:
window.open(url,target,param)
參數解釋:
url:要打開的地址。
target:新視窗的位置。可以是:
_blank
、_self
、_parent
父框架。param:新視窗的一些設置。
返回值:新視窗的句柄。
param這個參數,可以填各種各樣的參數(),比如:
name:新視窗的名稱,可以為空
featurse:屬性控制字元串,在此控制視窗的各種屬性,屬性之間以逗號隔開。
fullscreen= { yes/no/1/0 } 是否全屏,預設no
channelmode= { yes/no/1/0 } 是否顯示頻道欄,預設no
toolbar= { yes/no/1/0 } 是否顯示工具條,預設no
location= { yes/no/1/0 } 是否顯示地址欄,預設no。(有的瀏覽器不一定支持)
directories = { yes/no/1/0 } 是否顯示轉向按鈕,預設no
status= { yes/no/1/0 } 是否顯示視窗狀態條,預設no
menubar= { yes/no/1/0 } 是否顯示菜單,預設no
scrollbars= { yes/no/1/0 } 是否顯示滾動條,預設yes
resizable= { yes/no/1/0 } 是否視窗可調整大小,預設no
width=number 視窗寬度(像素單位)
height=number 視窗高度(像素單位)
top=number 視窗離屏幕頂部距離(像素單位)
left=number 視窗離屏幕左邊距離(像素單位)
各個參數之間用逗號隔開就行,但我們最好是把它們統一放到json里。
2、關閉視窗:window.close()
(1)和(2)的代碼舉例:
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
</head>
<body>
<a href="javascript:;">點擊我打開一個新的頁面</a>
<a href="javascript:;">點擊我關閉本頁面</a>
<script>
//新視窗 = window.open(地址,是否開新視窗,新視窗的各種參數);
var a1 = document.getElementsByTagName("a")[0];
var a2 = document.getElementsByTagName("a")[1];
a1.onclick = function () {
//舉例1: window.open("http://www.jd.com","_blank");
var json = {
"name": "helloworld",
"fullscreen": "no",
"location": "no",
"width": "100px",
"height": "100px",
"top": "100px",
"left": "100px"
};
window.open("http://www.baidu.com", "_blank", json); //舉例2
}
//關閉本頁面
a2.onclick = function () {
window.close();
}
</script>
</body>
</html>
3、新視窗相關:
新視窗.moveTo(5,5)
新視窗.moveBy()
新視窗.resizeTo()
window.resizeBy()
代碼舉例:
var newWin = window.open("demo.html", "_blank", json);
newWin.moveTo(500, 500);
location對象
window.location
可以簡寫成location。location相當於瀏覽器地址欄,可以將url解析成獨立的片段。
location對象的屬性
href:跳轉
hash 返回url中#後面的內容,包含#
host 主機名,包括埠
hostname 主機名
pathname url中的路徑部分
protocol 協議 一般是http、https
search 查詢字元串
location.href屬性舉例:
舉例1:點擊盒子時,進行跳轉。
<body>
<div>smyhvae</div>
<script>
var div = document.getElementsByTagName("div")[0];
div.onclick = function () {
location.href = "http://www.baidu.com"; //點擊div時,跳轉到指定鏈接
// window.open("http://www.baidu.com","_blank"); //方式二
}
</script>
</body>
舉例2:5秒後自動跳轉到百度。
有時候,當我們訪問一個不存在的網頁時,會提示5秒後自動跳轉到指定頁面,此時就可以用到location。舉例:
<script>
setTimeout(function () {
location.href = "http://www.baidu.com";
}, 5000);
</script>
location對象的方法
- location.assign():改變瀏覽器地址欄的地址,並記錄到歷史中
設置location.href 就會調用assign()。一般使用location.href 進行頁面之間的跳轉。
location.replace():替換瀏覽器地址欄的地址,不會記錄到歷史中
location.reload():重新載入
navigator對象
window.navigator 的一些屬性可以獲取客戶端的一些信息。
userAgent:系統,瀏覽器)
platform:瀏覽器支持的系統,win/mac/linux
舉例:
console.log(navigator.userAgent);
console.log(navigator.platform);
效果如下:
history對象
1、歷史記錄管理
2、後退:
history.back()
history.go(-1):0是刷新
3、前進:
history.forward()
history.go(1)
用的不多。因為瀏覽器中已經自帶了這些功能的按鈕:
我的公眾號
想學習代碼之外的軟技能?不妨關註我的微信公眾號:生命團隊(id:vitateam
)。
掃一掃,你將發現另一個全新的世界,而這將是一場美麗的意外: