本篇文章给给大家带来了关于JavaScript中BOM的相关知识,BOM 由一系列相关的对象构成,并且每个对象都提供了很多方法与属性,希望对大家有帮助。
本篇文章给给大家带来了关于JavaScript中BOM的相关知识,BOM 由一系列相关的对象构成,并且每个对象都提供了很多方法与属性,希望对大家有帮助。目录概述1、BOM概述
1.1、BOM的构成
// 定义在全局作用域中的变量会变成window对象的属性 var num = 10; console.log(window.num); // 10 // 定义在全局作用域中的函数会变成window对象的方法 function fn() { console.log(11); } console.fn(); // 11 var name = 10; //不要用这个name变量,window下有一个特殊属性window.name console.log(window.num); 2、window 对象的常见事件2.1、窗口加载事件
window.onload = function(){ };// 或者window.addEventListener("load",function(){}); 注意:
document.addEventListener('DOMContentLoaded',function(){}) 接收两个参数:
2.1.1、区别
<script> // window.onload = function() { // var btn = document.querySelector('button'); // btn.addEventListener('click', function() { // alert('点击我'); // }) // } // window.onload = function() { // alert(22); // } window.addEventListener('load', function() { var btn = document.querySelector('button'); btn.addEventListener('click', function() { alert('点击我'); }) }) window.addEventListener('load', function() { alert(22); }) document.addEventListener('DOMContentLoaded', function() { alert(33); }) // load 等页面内容全部加载完毕,包含页面dom元素 图片 flash css 等等 // DOMContentLoaded 是DOM 加载完毕,不包含图片 falsh css 等就可以执行 加载速度比 load更快一些</script> 2.2、调整窗口大小事件
window.onresize = function() {}// 或者window.addEventListener('resize',function(){});
<body> <script> window.addEventListener('load', function() { var p = document.querySelector('p'); window.addEventListener('resize', function() { console.log(window.innerWidth); console.log('变化了'); if (window.innerWidth <= 800) { p.style.display = 'none'; } else { p.style.display = 'block'; } }) }) </script> <p></p></body> 3、定时器window 对象给我们提供了两个定时器
3.1、setTimeout()定时器
window.setTimeout(调用函数,[延迟的毫秒数]); 注意:
<body> <script> // 1. setTimeout // 语法规范: window.setTimeout(调用函数, 延时时间); // 1. 这个window在调用的时候可以省略 // 2. 这个延时时间单位是毫秒 但是可以省略,如果省略默认的是0 // 3. 这个调用函数可以直接写函数 还可以写 函数名 还有一个写法 '函数名()' // 4. 页面中可能有很多的定时器,我们经常给定时器加标识符 (名字) // setTimeout(function() { // console.log('时间到了'); // }, 2000); function callback() { console.log('爆炸了'); } var timer1 = setTimeout(callback, 3000); var timer2 = setTimeout(callback, 5000); // setTimeout('callback()', 3000); // 我们不提倡这个写法 </script></body> 3.2、clearTimeout()停止定时器
window.clearTimeout(timeoutID) 注意:
<body> <button>点击停止定时器</button> <script> var btn = document.querySelector('button'); var timer = setTimeout(function() { console.log('爆炸了'); }, 5000); btn.addEventListener('click', function() { clearTimeout(timer); }) </script></body> 3.3、setInterval()定时器
window.setInterval(回调函数,[间隔的毫秒数]);
<body> <script> // 1. setInterval // 语法规范: window.setInterval(调用函数, 延时时间); setInterval(function() { console.log('继续输出'); }, 1000); // 2. setTimeout 延时时间到了,就去调用这个回调函数,只调用一次 就结束了这个定时器 // 3. setInterval 每隔这个延时时间,就去调用这个回调函数,会调用很多次,重复调用这个函数 </script></body> 3.4、clearInterval()停止定时器
注意:
<body> <button class="begin">开启定时器</button> <button class="stop">停止定时器</button> <script> var begin = document.querySelector('.begin'); var stop = document.querySelector('.stop'); var timer = null; // 全局变量 null是一个空对象 begin.addEventListener('click', function() { timer = setInterval(function() { console.log('ni hao ma'); }, 1000); }) stop.addEventListener('click', function() { clearInterval(timer); }) </script></body> 3.5、this指向
现阶段,我们先了解一下几个this指向
<body> <button>点击</button> <script> // this 指向问题 一般情况下this的最终指向的是那个调用它的对象 // 1. 全局作用域或者普通函数中this指向全局对象window( 注意定时器里面的this指向window) console.log(this); function fn() { console.log(this); } window.fn(); window.setTimeout(function() { console.log(this); }, 1000); // 2. 方法调用中谁调用this指向谁 var o = { sayHi: function() { console.log(this); // this指向的是 o 这个对象 } } o.sayHi(); var btn = document.querySelector('button'); // btn.onclick = function() { // console.log(this); // this指向的是btn这个按钮对象 // } btn.addEventListener('click', function() { console.log(this); // this指向的是btn这个按钮对象 }) // 3. 构造函数中this指向构造函数的实例 function Fun() { console.log(this); // this 指向的是fun 实例对象 } var fun = new Fun(); </script></body> 4、JS执行机制4.1、JS是单线程
4.2、一个问题以下代码执行的结果是什么? console.log(1);setTimeout(function() { console.log(3);},1000);console.log(2); 那么以下代码执行的结果又是什么? console.log(1);setTimeout(function() { console.log(3);},0);console.log(2); 4.3、同步和异步
此时再来看我们刚才的问题: console.log(1);setTimeout(function() { console.log(3);},1000);console.log(2);
console.log(1);setTimeout(function() { console.log(3);},0);console.log(2);
// 3. 第三个问题console.log(1);document.onclick = function() { console.log('click');}console.log(2);setTimeout(function() { console.log(3)}, 3000) 同步任务放在执行栈中执行,异步任务由异步进程处理放到任务队列中,执行栈中的任务执行完毕会去任务队列中查看是否有异步任务执行,由于主线程不断的重复获得任务、执行任务、再获取任务、再执行,所以这种机制被称为事件循环( event loop)。 5、location对象
5.1、url==统一资源定位符(uniform resouce locator)==是互联网上标准资源的地址。互联网上的每个文件都有一个唯一的 URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它。 url 的一般语法格式为: protocol://host[:port]/path/[?query]#fragment http://www.itcast.cn/index.html?name=andy&age=18#link
5.2、location对象属性
重点记住: 需求:5s之后跳转页面 <body> <button>点击</button> <p></p> <script> var btn = document.querySelector('button'); var p = document.querySelector('p'); var timer = 5; setInterval(function() { if (timer == 0) { location.href = 'http://www.itcast.cn'; } else { p.innerHTML = '您将在' + timer + '秒钟之后跳转到首页'; timer--; } }, 1000); </script></body> 5.3、location对象方法
<body> <button>点击</button> <script> var btn = document.querySelector('button'); btn.addEventListener('click', function() { // 记录浏览历史,所以可以实现后退功能 // location.assign('http://www.itcast.cn'); // 不记录浏览历史,所以不可以实现后退功能 // location.replace('http://www.itcast.cn'); location.reload(true); }) </script></body> 5.4、获取URL参数我们简单写一个登录框,点击登录跳转到 index.html <body> <form action="index.html"> 用户名: <input type="text" name="uname"> <input type="submit" value="登录"> </form></body> 接下来我们写 index.html <body> <p></p> <script> console.log(location.search); // ?uname=andy // 1.先去掉? substr('起始的位置',截取几个字符); var params = location.search.substr(1); // uname=andy console.log(params); // 2. 利用=把字符串分割为数组 split('='); var arr = params.split('='); console.log(arr); // ["uname", "ANDY"] var p = document.querySelector('p'); // 3.把数据写入p中 p.innerHTML = arr[1] + '欢迎您'; </script></body> 这样我们就能获取到路径上的URL参数 6、navigator对象
下面前端代码可以判断用户是用哪个终端打开页面的,如果是用 PC 打开的,我们就跳转到 PC 端的页面,如果是用手机打开的,就跳转到手机端页面 if((navigator.userAgent.match(/(phone|pad|pod|iPhone|iPod|ios|iPad|Android|Mobile|BlackBerry|IEMobile|MQQBrowser|JUC|Fennec|wOSBrowser|BrowserNG|WebOS|Symbian|Windows Phone)/i))) { window.location.href = ""; //手机 } else { window.location.href = ""; //电脑 } 7、history对象
<body> <a href="list.html">点击我去往列表页</a> <button>前进</button> <script> var btn = document.querySelector('button'); btn.addEventListener('click', function() { // history.forward(); history.go(1); }) </script></body> 相关推荐:javascript学习教程 以上就是深入浅析JavaScript进阶之BOM技术的详细内容,更多请关注模板之家(www.mb5.com.cn)其它相关文章! |