BOM概念
- BOM : Browser Object Model 瀏覽器對(duì)象模型,描述與瀏覽器進(jìn)行交互的方法和接 口, ECMAscript是javascript的核心,但如果要在web中使用javascript,那么BOM則無疑才是真正的核心。
- BOM提供了很多對(duì)象,用于訪問瀏覽器的功能,這些功能與任何網(wǎng)頁內(nèi)容無關(guān)。
window對(duì)象介紹
BOM 的核心對(duì)象是 window ,它表示瀏覽器的一個(gè)實(shí)例。在瀏覽器中, window對(duì)象有雙 重角色,它既是通過 JavaScript 訪問瀏覽器窗口的一個(gè)接口,又是ECMAScript 規(guī)定的全局(global)對(duì)象。這意味著在網(wǎng)頁中定義的任何一個(gè)對(duì)象、變量和函數(shù),都以 window 作 為其Global 對(duì)象,因此有權(quán)訪問parseInt()等方法。
window內(nèi)置對(duì)象(location/history/navigator)及方法
- location對(duì)象
- href屬性 控制瀏覽器地址欄的內(nèi)容
- reload()方法 刷新頁面
location.reload(true);從緩存里面獲取。性能更好。
- history對(duì)象
history對(duì)象是window對(duì)象的屬性
瀏覽者通常可以使用瀏覽器的前進(jìn)與后退按鈕訪問曾經(jīng)瀏覽過的頁面。JavaScript的history對(duì)象記錄了用戶曾經(jīng)瀏覽過的頁面,并可以實(shí)現(xiàn)瀏覽器前進(jìn)與后退相似的導(dǎo)航功能
可以通過back函數(shù)后退一個(gè)頁面,forward函數(shù)前進(jìn)一個(gè)頁面,或者使用go函數(shù)任意后退或前進(jìn)頁面。
JavaScript history.go() 函數(shù) -- 前進(jìn)或后退指定的頁面數(shù)
JavaScript history.back() 函數(shù) -- 后退一頁
JavaScript history.forward() 函數(shù) -- 前進(jìn)一頁
JavaScript history.length 屬性 -- history對(duì)象中緩存了多少個(gè)URL
- navigator對(duì)象
userAgent 用戶代理信息,通過該屬性可以獲取瀏覽器及操作系統(tǒng)信息
BOM相關(guān)的事件和操作
- onload事件:頁面內(nèi)容加載完成(DOM結(jié)構(gòu),圖片.....)
當(dāng)頁面加載完成時(shí)(DOM結(jié)構(gòu),內(nèi)容,網(wǎng)頁信息),執(zhí)行函數(shù)里面的代碼,一個(gè)頁面只能有一個(gè)onload事件。
- onscroll事件:拖動(dòng)瀏覽器的滾動(dòng)條觸發(fā)此事件。(連續(xù)觸發(fā))
- onresize事件:瀏覽器窗口縮放所觸發(fā)的事件。(連續(xù)觸發(fā))
- 可視區(qū)的寬高:document.documentElement.clientWidth/clientHeight
- 滾動(dòng)條距離
document.documentElement.scrollTop //chrome
document.body.scrollTop //firefox和ie
//使用if或三目做兼容
- open() 和 close() 方法--打開一個(gè)頁面/關(guān)閉一個(gè)頁面(了解)
window.close();//關(guān)閉當(dāng)前頁面,不是瀏覽器
document.onkeydown=function(){
if(confirm('你確定要關(guān)閉嗎?')){//選擇確定返回true 取消:false 選擇
window.close();//關(guān)閉當(dāng)前頁面,不是瀏覽器。
}else{
alert('算你識(shí)相');
}
}
- alert() prompt() confirm()方法:confirm() 方法用于顯示一個(gè)帶有指定消息和 OK 及取消按鈕的對(duì)話框。
- 定時(shí)器
setInterval(函數(shù)名稱,時(shí)間);間隔定時(shí)器(反復(fù)調(diào)用)
clearInterval( 定時(shí)器的返回值 ); 停止定時(shí)器
setTimeout(函數(shù)名稱,時(shí)間); 延時(shí)定時(shí)器
clearTimeout( 定時(shí)器的返回值 ); 停止定時(shí)器
//異步:代碼彼此不影響。
//定時(shí)器模擬異步執(zhí)行代碼。
/*setInterval(function(){
alert(dfadsfad);
},0);//即使時(shí)間為0,進(jìn)入隊(duì)列,比正常的語句慢。
- 應(yīng)用
1.廣告彈出窗(自動(dòng)關(guān)閉)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style type="text/css">
*{
padding: 0px;margin: 0px;
}
#ad{
width: 100%;
height: 80px;
margin:0 auto;
background: #000000;
text-align: center;
position: relative;
}
#ad i{
position: absolute;
right:100px;
top:5px;
color:#fff;
cursor: pointer;
font-style: normal;
}
#ad span{
color:#fff;
position: absolute;
left:10px;
top:30px;
}
</style>
</head>
<body>
<div id="ad">
<img src="1.jpg"/>
<i>X</i>
<span>離廣告關(guān)閉還有<strong>5</strong>秒</span>
</div>
<script type="text/javascript">
//延時(shí)定時(shí)器 setTimeout(函數(shù),時(shí)間);
//關(guān)閉延時(shí)定時(shí)器 clearTimeout(延時(shí)定時(shí)器的返回值);
//間隔定時(shí)器:setInterval(函數(shù),時(shí)間);
//關(guān)閉間隔定時(shí)器 clearInterval(間隔定時(shí)器的返回值);
//同步:代碼按照一定的順序執(zhí)行。
//alert(dfadsfad);//報(bào)錯(cuò),代碼結(jié)束
//alert(123);
//異步:代碼彼此不影響。
//定時(shí)器模擬異步執(zhí)行代碼。
/*setInterval(function(){
alert(dfadsfad);
},0);//即使時(shí)間為0,進(jìn)入隊(duì)列,比正常的語句慢。
alert(123);*/
/*function fn(){
document.body.style.background='#ccc';
}
setTimeout(fn,3000);*/
var ad=document.getElementById('ad');
var close=document.getElementsByTagName('i')[0];
var oStrong=document.getElementsByTagName('strong')[0];
var timer=null;
close.onclick=function(){
ad.style.display='none';
}
var timevalue=oStrong.innerHTML;
timer=setInterval(function(){
timevalue--;
if(timevalue==0){
ad.style.display='none';
clearInterval(timer);
}
oStrong.innerHTML=timevalue;
},1000);
</script>
</body>
</html>
- 添加倒計(jì)時(shí)效果
- 盒子完全居中
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>盒子完全 居中</title>
<style type="text/css">
body{
height: 2000px;
}
#box{
width: 200px;
height:300px ;
background: #ccc;
position: absolute;
left:0px;
top:0px;
}
#box span{
position: absolute;
right:10px;
top:10px;
cursor: pointer;
}
</style>
</head>
<body>
<div id="box">
<span>X</span>
</div>
<script type="text/javascript">
var oBox=document.getElementById('box');
var oSpan=document.getElementsByTagName('span')[0];
/*window.onload=function(){
oBox.style.left=(document.documentElement.clientWidth-200)/2+'px';
oBox.style.top=(document.documentElement.clientHeight-300)/2+'px';
}
window.onresize=function(){
oBox.style.left=(document.documentElement.clientWidth-200)/2+'px';
oBox.style.top=(document.documentElement.clientHeight-300)/2+'px';
}*/
/*var a=b=2;
alert(a);
alert(b);*/
window.onload=window.onresize=function(){
oBox.style.left=(document.documentElement.clientWidth-200)/2+'px';
oBox.style.top=(document.documentElement.clientHeight-300)/2+'px';
}
window.onscroll=function(){
var top=document.documentElement.scrollTop||document.body.scrollTop;
oBox.style.left=(document.documentElement.clientWidth-200)/2+'px';
oBox.style.top=(document.documentElement.clientHeight-300)/2+top+'px';
}
oSpan.onclick=function(){
oBox.style.display='none';
}
</script>
</body>
</html>
DOM的概念及作用
DOM是”Document Object Model”的首字母縮寫,即文檔對(duì)象模型。用來描繪一個(gè)層次 化的節(jié)點(diǎn)樹,允許開發(fā)人員獲取、添加、移除和修改頁面的某一部分。 瀏覽器支持情況:不友好,有兼容問題
(元素節(jié)點(diǎn)、屬性節(jié)點(diǎn)、文本節(jié)點(diǎn))
DOM的基本操作
- 查詢(獲取元素)
getElementById() //獲取特定 ID 元素的節(jié)點(diǎn)
getElementsByTagName() //獲取相同元素的節(jié)點(diǎn)列表,返回類數(shù)組,使用[0]來獲取
getElementsByClassName() //獲取相同類名的節(jié)點(diǎn)列表(IE8及以下不支持),返回類數(shù)組
getElementsByName() //獲取相同的name值的元素列表,不是所有標(biāo)簽都有name屬性,返回類數(shù)組
querySelector()/querySelectorAll()//---html5新增
//參數(shù)是css選擇器:是一種快速選擇,css怎么選擇,這兩個(gè)方法也滿足。
//注意選擇器前面的符號(hào)要添加。
//querySelector():如果選擇器有多個(gè),只找第一個(gè)
//querySelectorAll() 符合所有的選擇器的多個(gè)元素
//alert(document.querySelectorAll('#box li').length);
//alert(document.querySelector('.li1').innerHTML);
- 創(chuàng)建、添加、刪除、克隆、替換
document.createElement() //創(chuàng)建一個(gè)元素節(jié)點(diǎn);**創(chuàng)建之后appendChild**
document.createTextNode() //創(chuàng)建一個(gè)文本節(jié)點(diǎn),括號(hào)中寫文本內(nèi)容
box.appendChild(node) //把node節(jié)點(diǎn)插入到box的內(nèi)部最后的位置
var cH1=document.createElement('h1');//元素對(duì)象
cH1.innerHTML='大標(biāo)題';
document.createTextNode() 創(chuàng)建一個(gè)文本節(jié)點(diǎn)
var cT=document.createTextNode('創(chuàng)建出來的文本');
cH1.style.background='green';
box.appendChild(node) 把node節(jié)點(diǎn)插入到box的內(nèi)部最后的位置
cH1.appendChild(cT);//將文本節(jié)點(diǎn)賦值給cH1
document.body.appendChild(cH1);//將整個(gè)cH1賦值給body元素,顯示在頁面上
//拼接
document.body.innerHTML+='<h2>二標(biāo)題</h2>';//常用(性能原因)
box.insertBefore(newNode, existNode) //把newNode節(jié)點(diǎn)插入到exsitNode的前面
box.removeChild(node) //刪除子節(jié)點(diǎn) 注意:一定是移除子節(jié)點(diǎn).同時(shí)通過父節(jié)點(diǎn)移除子節(jié)點(diǎn).
obj.cloneNode() //復(fù)制節(jié)點(diǎn),復(fù)制obj元素標(biāo)簽,可以傳一個(gè)布爾值為參數(shù),如果參數(shù)為true,連同obj子元素一起復(fù)制。
obj.replaceChild(新添加的節(jié)點(diǎn) , 被替換的節(jié)點(diǎn));
應(yīng)用
1.頂部懸浮
2.回到頂部
3.動(dòng)態(tài)創(chuàng)建表格--封裝函數(shù)(DOM創(chuàng)建)