前端基础——javascriptBOM对象

JavaScript BOM

什么是BOM

BOM(browser object model)浏览器对象模型

window(window对象也就是全局对象)

window是浏览器的一个实例,在浏览器中,window对象有双重角色,它既是通过JavaScript访问浏览器窗口的一个接口,又是ECMAScript规定的Global对象。

// 全局变量-在脚本的任何地方都可以调用的变量
var age = 15;
// window.age = 15; 这个就相当于 var age = 15;
// 意思就是我在window对象上声明了一个全局变量
function sayAge(){
	alert("我"+age); // 这里的age等价于 window.age
}
// 声明一个全局变量
window.username = "marry"; // 就相当于 var username = "marry"
// 声明一个全局方法  全局方法-脚本在任何地方都能调用的方法
// 所有的全局变量和全局方法,都被归在的window对象上了
window.sayName = function(){
	alert("我是"+this.username); // 这里的this相当于window
}
sayAge();
sayName();

  

Window对象的方法

语法:window.alert(”content”)  这个相当于直接写一个 alert("content")方法

功能:显示带有一段消息和一个确认按钮的警告框

 

语法:window.confirm(“message")

功能:显示一个带有指定消息和OK及取消按钮的对话框

返回值:

如果用户点击确定按钮,则confirm()返回true

如果用户点击取消按钮,则confirm()返回false

 

<div id="box">
	<span id="">iphone8lpus</span>
	<input type="button" id="btn" value="删除" />
</div>
<script type="text/javascript">
	// confirm()
	// 获取按钮,绑定事件
	var btn = document.getElementById("btn");
	btn.onclick = function(){
		// 弹出确认对话框
		var result = window.confirm("您确定要删除吗?\n删除之后不可恢复"); // window是可以省略的 换行用 \n
		if (result == true) {
			document.getElementById("box").style.display="none"; // 判断为真 隐藏
		}
	}
</script>

   

语法:window.prompt(“text,defaultText")

参数说明:

text:要在对话框中显示的纯文本(而不是HTML格式的文本)

defaultText:默认的输入文本

返回值:

如果用户单击提示框的取消按钮,则返回null

如果用户单击确认按钮,则返回输入字段当前显示的文本

 

var phone = window.prompt("请输入你使用的手机品牌?","华为");
console.log(phone);

  

语法:window.open(pageURL,name,parameters)

功能:打开一个新的浏览器窗口或查找一个已命名的窗口

参数说明:

pageURL:子窗口路径

name:子窗口句柄。(name声明了新窗口的名称,方便后期通过name对子窗口进行引用

parameters :窗口参数(各参数用逗号分隔),比如:位置,大小

 

<script type="text/javascript">
	window.onload = function(){
		// 打开子窗口,显示newWindow.html这个页面
		window.open("03.newWindow.html","给新窗口取的名字","width=400,height=200,
left=0,top=0,toolbar=no,menubar=no,scrollbars=no,location=no,status=no"); } </script>

  

语法:window.close( )

功能:关闭浏览器窗口

 

<div class="box">
	<h3>我是window.open打开的窗口</h3>
	<input type="button" name="quit" id="quit" value="关闭小窗口" />
</div>
<script type="text/javascript">
	var quit = document.getElementById("quit");
	// 绑定点击事件关闭窗口
	quit.onclick = function(){
		window.close(); // 括号不要忘了
	}
</script>

 

--JavaScript是单线程语言,单线程就是所执行的代码必须按顺序 

超时调用

语法:setTimeout(code,millisec)

功能:在指定的毫秒数后调用函数或计算表达式

参数说明:

1、code:要调用的函数或要执行的JavaScript代码串

2、millisec:在执行代码前需等待的毫秒数

// window.setTimeout()  setTimeout()也是window对象,通常省略
// 下面这种直接放js代码串的方式不推荐
// setTimeout("alert('hello')",1000); // 设置为1秒后,弹出alert 
// 下面推荐第1种写法,设置自定义函数方式
var fnCall = function(){
	 alert("第一种方法");
 }
 setTimeout(fnCall,3000);
// 下面推荐第2种写法,设置匿名函数
setTimeout(function(){
	alert("第二种方法");
},5000);

  

说明:

setTimeout()只执行code一次。如果要多次调用,请使用 setInterval()或者让code自身再次调用setTimeout()

setTimeout()方法返回一个ID值,可以通过它取消超时调用。

清除超时调用

语法:clearTimeout(id_of_settimeout)

功能:取消由setTimeout()方法设置的timeout

参数说明:

1、 id_of_settimeout :由setTimeout()返回的ID值,该值标识要取消的延迟执行代码块

var clear_time = setTimeout(function(){
	alert("清除 setTimeout");
},2000);

clearTimeout(clear_time);

  

间歇调用

语法:setInterval(code,millisec)

功能:每隔指定的时间执行一次代码

参数说明:

1、code:要调用的函数或要执行的代码串。

2、millisec:周期性执行或调用code之间的时间间隔,以毫秒计,就是说每隔一段时间,就执行一次代码

 

var intervalId = setInterval(function(){
	console.log("hello!");
},1000);
// 10秒后停止输出hello
setTimeout(function(){
	clearInterval(intervalId);
},10000);

  

// 小例子
var num = 1,
	max = 10,
	timer = null; // 超时调用的是一个对象,所以给一个初始值null,释放内存
// 每个1秒钟num递增一次,知道num的值等于max清除
/* timer = setInterval(function(){
	console.log(num);
	num++;
	if (num>max){
		clearInterval(timer);
	}
},1000) */
// 使用超时调用实现小例子
function inCreamentNum(){
	console.log(num);
	num++;
	if (num<=max) {
		// setTimeout(inCreamentNum(),1000); 调用函数不要加括号,要么会直接全打印出来
		setTimeout(inCreamentNum,1000);
	} else{
		clearTimeout(timer);
	}
}
// timer = setTimeout(inCreamentNum(),1000); 再强调一次,调用函数不要加括号,要么会直接全打印出来
timer = setTimeout(inCreamentNum,1000);

  

location对象--最有用的对象之一

location对象提供了与当前窗口中加载的文档有关的信息,还提供了一些导航的功能,它既是window对象的属性,也是document对象的属性

 

location对象的常用属性

语法:location.href

功能:返回当前加载页面的完整URL

说明: location.href与window.location.href等价

 

语法:location.hash  就是锚点

功能:返回URL中的hash(#号后 跟零或多个字符),如果不包含则返回空字符串。

 

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<style type="text/css">
			.box1{height: 400px;background: #CCCCCC;}
			.box2{height: 600px;background: #666666;}
		</style>
	</head>
	<body>
		<div class="box1" id="top"></div>
		<div class="box2"></div>
		<input type="button" id="btn" value="返回顶部" />
		<script type="text/javascript">
			
			// location 不仅可以获取,还可以设置
			console.log(location.href);
			console.log(location.hash); // 返回URL中的锚点 #top
			var btn = document.getElementById("btn");
			btn.onclick = function(){
				// 这个时候设置锚点#top后,并绑定鼠标点击事件,当点击鼠标的时候,就回去找 id="top"
				// 就会到达相对应的DOM节点,就是 <div class="box1" id="top"></div>的位置
				location.hash = "#top"; // 没有等号的时候是获取锚点,有等号的时候是设置锚点
			}
		</script>
	</body>
</html>

  

语法:location.host

功能:返回服务器名称和端口号(如果有)

语法:location.hostname

功能:返回不带端口号的服务器名称。

语法:location.pathname

功能:返回URL中的目录和(或)文件名。

 

语法:location.port

功能:返回URL中指定的端口号,如果没有,返回空字符串。

语法:location.protocol

功能:返回页面使用的协议。http之类的

语法:location.search  比较常用

功能:返回URL的查询字符串。这个字符串以问号开头。?id=32name=hello

 

位置操作

改变浏览器位置的方法:

location.href属性

location对象其他属性也可改变URL:

setTimeout(function(){
	// 设置要跳转的页面,在2秒钟后跳转,而且在浏览器中会有一条跳转记录
	// 也就是说浏览器的向后按钮是可用的,如果不想在历史记录中生成新纪录,那可以用 location.replace()
	location.href = "06.locatin.href.html";
	// 上面代码等价于 window.location.href = "06.locatin.href.html";
},2000)

  

location.hash

location.search

location.replace()

 

<script type="text/javascript">
	setTimeout(function(){
		// 设置要跳转的页面,在2秒钟后跳转,而且在浏览器中会有一条跳转记录
		// 也就是说浏览器的向后按钮是可用的,如果不想在历史记录中生成新纪录,那可以用 location.replace()
		//location.href = "06.locatin.href.html";
		// 上面代码等价于 window.location.href = "06.locatin.href.html";
		location.replace("06.locatin.href.html"); // 跳转成功,且浏览器回退按钮不可用
	},2000)

 

语法:location.replace(url)

功能:重新定向URL。

说明: 使用location.replace不会在历史记录中生成新纪录

location.reload() 就是相当于刷新页面

语法:location.reload()

功能:重新加载当前显示的页面。

说明:

• location.reload()有可能从缓存中加载

• location.reload(true)传参数后,是强制从服务器重新加载

 reload有可能会执行,有可能不会执行,取决于网络和服务器的延迟和系统资源的一些因素,所以要将reload放在代码的最后一行。

<input type="button" id="reload" value="刷新" />
<script type="text/javascript">
	var reload = document.getElementById("reload");
	reload.onclick = function(){
		location.reload(); // 代码建议放在最后
	}
</script>

  

history历史对象 - history对象保存了用户在浏览器中访问页面的历史记录

语法:history.back()

功能:回到历史记录的上一步

说明:相当于使用了history.go(-1)

 

<h3>这是10.history.html</h3>
<input type="button" id="btn" value="回退按钮" />
<script type="text/javascript">
	var btn = document.getElementById("btn");
	// 点击btn按钮,回到历史记录的上一步,就是在模拟浏览器回退按钮
	btn.onclick = function(){
		history.back();
		// 上面的代码等价于 history.go(-1);
	}

  

语法:location.forward()

功能:回到历史记录的下一步

说明:相当于使用了history.go(1)

 

<h3>这是10.history.html</h3>
<a href="11.html">11.html</a>
<input type="button" id="btn" value="回退按钮" />
<input type="button" id="btn2" value="向前按钮" />
<script type="text/javascript">
	var btn = document.getElementById("btn");
	// 点击btn按钮,回到历史记录的上一步,就是在模拟浏览器回退按钮
	btn.onclick = function(){
		history.back();
		// 上面的代码等价于 history.go(-1);
	}
	var btn2 = document.getElementById("btn2");
	btn2.onclick = function(){
		history.forward(); // 下一步
		// history.go(1);
	}
		</script>

  

语法:history.go(-n)

功能:回到历史记录的前n步

语法:history.go(n)

功能:回到历史记录的后n步,可正可负,比如-2向后退步,3想前进3步

 

Screen对象属性--在BOM中不太常用

--screen对象包含有关客户端显示屏幕的信息

获取屏幕的高度和宽度,要与innerHeightinnerWidth区别开

语法:screen.availWidth

功能:返回可用的屏幕宽度

语法:screen.availHeight

功能:返回可用的屏幕高度

 

console.log("页面的宽:"+screen.availWidth); // 页面的宽:1366
console.log("页面的高:"+screen.availHeight); // 页面的高:728

console.log("pagewidth:"+window.innerWidth); // pagewidth:1366
console.log("pageheight:"+window.innerHeight); // pageheight:443(打开console,会占用一些位置,调整console,相应的值也改变)  

获取窗口文档显示区高度和宽度,可以用  innerWidth  innerHeight

Navigator对象

Navigator

UserAgent:用来识别浏览器名称、版本、引擎 以及操作系统等信息的内容。

var textBrowser = navigator.userAgent;
alert(textBrowser);

  

   //console.log(navigator.userAgent);
   // 判断浏览器
   function getBrowser(){
       var explorer = navigator.userAgent,browser;
       if(explorer.indexOf("MSIE")>-1){
          browser = "IE";
       }else if(explorer.indexOf("Chrome")>-1){
          browser = "Chrome";
       }else if(explorer.indexOf("Opera")>-1){
          browser = "Opera";
       }else if(explorer.indexOf("Safari")>-1){
          browser = "Safari";
       }
       return browser;
   }
   var browser = getBrowser();
   console.log("您当前使用的浏览器是:"+browser);
   // 判断终端
   function isPc(){
      var userAgentInfo = navigator.userAgent,
          Agents = ["Andriod","iPhone","symbianOS","windows phone","iPad","iPod"],
          flag = true,i;
          console.log(userAgentInfo);
       for(i=0;i<Agents.length;i++){
          if(userAgentInfo.indexOf(Agents[i])>-1){
             flag = false;
             break;
          }
       }
       return flag;
   }
   var isPcs = isPc();
   console.log(isPcs);

  

appCodeName

appName

posted @ 2018-04-10 23:26  千行路  阅读(371)  评论(0编辑  收藏  举报