BOM(Browser Object Model) —— Window
例1.setInterval()时钟,setInterval()第一个参数是函数名,第二个参数是毫秒数
<!DOCTYPE html> <html> <head> <title>DOM_Window.html</title> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="this is my page"> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <!--<link rel="stylesheet" type="text/css" href="./styles.css">--> <script> function Greet(){ var date = new Date(); //元素间文本通过<对象名.innerText>访问 document.getElementById("time").innerText = date.toLocaleString(); } setInterval("Greet()", 1000); </script> </head> <body> <span id="time"></span> </body> </html>
例2:两张图片切换,切换10次之后停止
setInterval()会返回一个计时器的句柄,用tm变量存储他,然后加一个count记录变换次数。当count为10就停止切换,即
利用clearInterval()函数停止计时器。
<!DOCTYPE html> <html> <head> <title>DOM_Window.html</title> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="this is my page"> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <!--<link rel="stylesheet" type="text/css" href="./styles.css">--> <script> function Greet(){ var date = new Date(); //元素见文本通过<对象名.innerText>访问 document.getElementById("time").innerText = date.toLocaleString(); } setInterval("Greet()", 1000); var n = 1; var count = 0; function runimg(){ count++; if(count == 10) clearInterval(tm); var mi = document.getElementById("myimg"); mi.src = ((n++%2) + 1) + ".jpg"; } var tm = setInterval("runimg()", 500); </script> </head> <body> <span id="time"></span><br> <img id="myimg" src="1.jpg" style="width: 100px" /> </body> </html>
例3:设置指定时间做某个动作setTimeout(),只会在2s后调用一次say()
<script> function say(){ alert("什么鬼!"); } setTimeout("say()", 2000); </script>
例4:关于设置时间的几个函数套用,让图片切换10次停3秒然后再切换10次再停3秒循环往复。
<script> function Greet(){ var date = new Date(); //元素见文本通过<对象名.innerText>访问 document.getElementById("time").innerText = date.toLocaleString(); } setInterval("Greet()", 1000); var n = 1; var count = 0; function runimg(){ count++; if(count == 10){ clearInterval(tm); //停止切换 setTimeout("rerun()", 3000); //3秒后重启 count = 0; //重置计数器 } var mi = document.getElementById("myimg"); mi.src = ((n++%2) + 1) + ".jpg"; } var tm = setInterval("runimg()", 500); //重启切换函数 function rerun(){ tm = setInterval("runimg()", 500); } </script>
例5:当然setTimeout()也可以返回一个句柄,利用这个句柄可以让某个setTimeout()失效
<script> function duang(){ alert("什么鬼"); } var td = setTimeout("duang()", 3000); //3秒后会弹窗 clearTimeout(td); //让上面的延迟动作失效 </script>
例6:父子窗口间通信(用IE测试可行,Chrome不行),在文本框内输入内容然后发送,两个窗口内文本框内容就会相应改变
主要利用open()函数,与opener属性。open()函数依旧可以返回新窗口的句柄,opener表示父窗口句柄。
Master.html
<html> <head> <script> var nw; function openwin(){ nw = open("Slave.html", "_blank"); } function toson(){ nw.document.getElementById("info2").value = $("info1").value; } function $(id){ return document.getElementById(id); } </script> </head> <body> <input type="button" value="打开新窗口" onclick="openwin()"/><br> <input type="text" id="info1" value="什么鬼1"/> <input type="button" value="发送给子窗口" onclick="toson()"/> <br> <span id="myspan">什么鬼</span> </body> </html>
Slave.html (状态栏的文本还可以自行移动,其实就是在文本前加空格)
<html> <head> <script> function tofather(){ opener.document.getElementById("info1").value = document.getElementById("info2").value; opener.document.getElementById("myspan").innerText = document.getElementById("info2").value; } function showf(){ alert(opener.document.getElementById("info1").value); } var sp_n = 0; var dir = 1; function stsScroll(){ var sp_text = ""; sp_n += dir * 1; if(sp_n > 5 || sp_n < 0){ dir *= -1; } for(var i=0; i<sp_n; i++){ sp_text += " "; } window.status = sp_text + "Hello World!"; } setInterval("stsScroll()", 100); </script> </head> <body onload="stsScroll()"> <input type="text" id="info2" value="什么鬼2"/> <input type="button" value="发送给父窗口" onclick="tofather()"/><br> <input type="button" value="显示父窗口" onclick="showf()"/> </body> </html>
例7:简易验证登录并延迟进入业务主页
Login.html用于登录与验证
<html> <head> <script> function checku(){ if($("uname").value == "athrun" && $("pwd").value == "123456") return true; else{ alert("用户名或密码错误"); $("uname").value = ""; $("pwd").value = ""; return false; } } function $(id){ return document.getElementById(id); } </script> </head> <body> <form name="f1" action="Welcome.html" method="post"> user:<input type="text" id="uname" value="" /><br> pass:<input type="text" id="pwd" value="" /><br> <!-- onclick这里用到return是因为如果调用函数返回false,表单就不会提交 --> <input type="submit" value="登录" onclick="return checku()"/> </body> </html>
Welcome.html用于延迟进入主页
<html> <head> <script> function goto(){ clearInterval("st1"); open("Main.html", "_self"); } var st1 = setInterval("changetime()", 1000); function changetime(){ $("wspan").innerText = parseInt($("wspan").innerText) - 1; } function $(id){ return document.getElementById(id); } setTimeout("goto()", 5000); </script> </head> <body> 欢迎来到XXX!<br> 页面将在<span id="wspan">5</span>秒钟后跳转到主页! </body> </html>
Main.html业务主页
<html> <head> <script> </script> </head> <body> Hello World! </body> </html>
History对象主要用于页面间跳转
Location对象主要与当前URL的信息有关
Navigator对象主要跟所用浏览器有关
例8:显示一些关于浏览器的信息(有些属性Chrome不支持)
<script> function show(){ document.write("当前浏览器为:" + navigator.appName + "<br>"); document.write("当前操作系统为:" + navigator.platform + "<br>"); document.write("当前浏览器语言为:" + navigator.browserLanguage + "<br>"); document.write("当前OS语言为:" + navigator.systemLanguage + "<br>"); } show(); </script>
Screen对象主要与客户端显示屏信息有关
例9:返回一些显示器信息
<script> function show(){ document.write("当前屏幕分辨率:" + screen.width + "x" + screen.height + "<br>"); document.write("当前屏幕可用宽高(除了最地下工具栏条):" + screen.availWidth + "x" + screen.availHeight + "<br>"); document.write("当前调色板颜色深度:" + screen.colorDepth + "<br>"); } show(); </script>
Event对象主要跟事件驱动有关
例10:非绑定事件机制
<html> <head> </head> <body> <input type="button" value="显示" id="bn"> <script> //这里把JS脚本写下来是因为必须先创建按钮之后才能通过id获取这个按钮对象 function show(){ document.write("当前屏幕分辨率:" + screen.width + "x" + screen.height + "<br>"); document.write("当前屏幕可用宽高(除了最地下工具栏条):" + screen.availWidth + "x" + screen.availHeight + "<br>"); document.write("当前调色板颜色深度:" + screen.colorDepth + "<br>"); } function $(id){ return document.getElementById(id); } $("bn").onclick = show; //取代了绑定按钮调用函数的方法,相当于给按钮对象添加了一个成员函数,所以函数名后面不能打括号 </script> </body> </html>
例11:另一种事件绑定与解绑(但是测试失败)
<html> <head> <script> </script> </head> <body> <input type="button" value="显示" id="bn" > <script> //这里把JS脚本写下来是因为必须先创建按钮之后才能通过id获取这个按钮对象 document.getElementById("bn").addEventListener("onclick", test); function test(){ alert("什么鬼"); $("bn").removeEventListener("onclick", test); } function $(id){ return document.getElementById(id); } </script> </body> </html>
例12:实时监听控制输入,只允许输入六位数字且每输入一个字符就判断是否为数字,非数字弹窗并清空,长度错误弹窗提示
<html> <head> <script> function checkin(event){ if(event.keyCode < 48 || event.keyCode > 57){ alert("请输入数字"); window.event.returnValue = false; //该属性可以阻止接收键入值 } } function checksub(){ if($("myt").value.length != 6){ alert("请控制在六位"); } else{ alert("Hello World!"); } } function $(id){ return document.getElementById(id); } </script> </head> <body> <input type="text" id="myt" onkeypress="checkin(event)"> <input type="button" value="提交" onclick="checksub()"> </body> </html>