Bom

BOM  浏览器对象模型,把浏览器当做一个对象来看待,Bom顶级对象是window,bom主要是用于浏览器窗口的一些交互对象,
     bom是各个浏览器厂商规定,兼容性较差

<!-- 1.定时器 -->
setTimeout(callback, 3000)  //开启定时器  因定时器可能挺多,经常加一个别名
clearTimeout('定时器名称')  //停止定时器
setInterval(callback, 3000)  //闹钟定时器  每隔这个延时时间 重复调用
clearInterval(闹钟名称)      //停止定时器
    <script>
    setTimeout(function() {  console.log('时间到了'); }, 4000);
    console.log('爆炸了');
    function callback() { }
    var timer = setTimeout(function() { console.log('ok');  }, 2000);  //加别名timer
    btn.addEventListener('click', function() {
            clearTimeout(timer);  // 停止定时器
        })
    </script>   //打印顺序:  爆炸了  时间到了   ok

    <script>
        setInterval(function() {  console.log('继续输出');  }, 1000);  //闹钟
    </script>

<!-- 2.节流阀 -->
开始设置一个变量var flag= true;
If(flag){flag = false; do something}     关闭水龙头
利用回调函数动画执行完毕, flag = true     
打开水龙头

<!-- 顶级对象window -->
它是一个全局对象, 定义在全局作用域中的变量和函数都会变成window对象的属性和方法,在调用时可省略window
alert(11); //等价于 window.alert(11)
var name = 10;   console.log(window.name);
function fn() {  console.log(11);}  window.fn();
   
<!-- window对象的常见事件 -->
<!-- 页面(窗口)加载事件: -->
window.onload = function(){} 或 window.addEventListener("load", function(){})
    window.onload 是窗口 (页面)加载事件,当文档内容完全加载完成会触发该事件(包括图像、脚本文件、CSS文件等), 就调用的处理函数。
    有了window.onload就可以把js代码写到页面元素上方,因为onload是等页面内容全部加载完毕,再去执行处理函数
    window.onload传统注册事件方式只能写一次,如果有多个,以最后一个window.onload为准.
    window.addEventListener则没有限制

document.addEventListener('DOMContentLoaded', function() { })
    DOMContentLoaded 事件触发时,仅当DOM加载完成,不包括样式表,图片,flash等等。
    DOMContentLoaded 是DOM 加载完毕,不包含图片 falsh css 等就可以执行 加载速度比 load更快一些
    都可以把js代码提前
    <head> <script>
        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);  })
    </script> </head>
    <body>  <button>点击</button>  </body>
       
<!-- 调整窗口大小事件: -->
window.onresize = function(){}
window.addEventListener("resize",function(){})
window.onresize 是调整窗口大小加载事件,  当触发时就调用的处理函数。
只要窗口大小发生像素变化,就会触发这个事件。经常利用这个事件完成响应式布局 window.innerWidth 当前屏幕的宽度
    <script>
        window.addEventListener('resize', function() {
            if (window.innerWidth <= 800) {
                div.style.display = 'none';
            } else {
                div.style.display = 'block';
            }
        })
    </script>

<!-- navigator对象 -->
navigator 对象包含有关浏览器的信息,它有很多属性,我们最常用的是 userAgent,该属性可以返回由客户机发送服务器的 user-agent 头部的值。
下面前端代码可以判断用户那个终端打开页面,实现跳转:
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 = "";     //手机  //window.location.href = "../H5/index.html"; //手机页面
 } else {
    window.location.href = "";     //电脑
 }

 <!-- 元素偏移量 offset 系列 -->
 offset 翻译过来就是偏移量, 我们使用 offset系列相关属性可以动态的得到该元素的位置(偏移)、大小等
 1. 获得元素距离带有定位父元素的位置
 2. 获得元素自身的大小(宽度高度)
 3. 注意:返回的数值都不带单位
 4.我们想要获取元素大小位置,用offset更合适
 element.offsetParent 返回该元素带有定位父级元素,如果父级都没有定位则返回body
 element.offsetTop    返回元素相对带有定位父元素上方的偏移
 element.offsetLeft   返回元素相对带有定位父元素左边框的偏移
 element.offsetWidth  返回自身包括padding border 内容区的宽度, 返回值不带单位  //是只读属性,只能获取不能赋值
 element.offsetHeight 返回自身包括padding 边框 内容区的高度, 返回值不带单位
    <script>
        var box = document.querySelector('.box');
        box.addEventListener('mousemove', function(e) {
            var x = e.pageX - this.offsetLeft;
            var y = e.pageY - this.offsetTop;
            this.innerHTML = 'x坐标是' + x + ' y坐标是' + y;  //获取最新鼠标的坐标
        })
    </script>

<!-- 元素可视区 client 系列 -->
通过 client系列的相关属性可以动态的得到该元素的边框大小、元素大小等。
element.clientTop    返回元素上边框大小
element.clientLeft   返回元素左边框大小
element.clientWidth  返回自身padding + 内容区width宽度, 不含边框,返回值不带单位
element.clientHeight 返回自身padding + 内容区的高度, 不含边框,返回值不带单位
    <script>
        // client 宽度 和我们offsetWidth 最大的区别就是 不包含边框
        var div = document.querySelector('div');
        console.log(div.clientWidth);
    </script>

<!-- 元素滚动 scroll 系列 -->
scroll 翻译过来就是滚动的,我们使用 scroll 系列的相关属性可以动态的得到该元素的大小、滚动距离等
element.scrollTop    返回被卷去的上侧距离,返回数值不带单位
element.scrollLeft   返回被卷去的左侧距离,返回数值不带单位
element.scrollWidth  返回自身实际宽度,不含边框,返回数值不带单位
element.scrollHeight 返回自身实际高度,不含边框,返回数值不带单位
页面被卷去的头部:
当滚动条向下滚动时,页面上面被隐藏掉的高度,我们就称为页面被卷去的头部。滚动条在滚动时会触发 onscroll事件
    <script>
        var div = document.querySelector('div');
        console.log(div.scrollHeight);  //盒子的高度,不带边框
        // scroll滚动事件当我们滚动条发生变化会触发的事件
        div.addEventListener('scroll', function() {
            console.log(div.scrollTop);   //被卷去的距离
        })
    </script>

页面被卷去的头部:可以通过window.pageYOffset 获得  如果是被卷去的左侧window.pageXOffset
注意: 元素被卷去的头部是element.scrollTop  , 如果是页面被卷去的头部 则是 window.pageYOffset

页面被卷去的头部兼容性解决方案:
    function getScroll() {
        return {
          left: window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft||0,
          top: window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0
        };
     } 
    使用的时候  getScroll().left

<!-- 动画函数封装 -->
缓动效果原理:
    1. 让盒子每次移动的距离慢慢变小,速度就会慢慢落下来。
    2. 核心算法: (目标值 - 现在的位置)   /  10    做为每次移动的距离步长
    3. 停止的条件是: 让当前盒子位置等于目标位置就停止定时器  
    4. 注意步长值需要取整  
动画函数多个目标值之间移动:
    可以让动画函数从 800 移动到 500。
    当我们点击按钮时候,判断步长是正值还是负值
        1.如果是正值,则步长往大了取整
        2.如果是负值,则步长 向小了取整
动函数添加回调函数:
    回调函数原理:函数可以作为一个参数。将这个函数作为参数传到另一个函数里面,当那个函数执行完之后,
    再执行传进去的这个函数,这个过程就叫做回调。
    回调函数写的位置:定时器结束的位置。


<!-- 本地当前页面刷新 --> 
window.location.reload()

原文地址:https://www.cnblogs.com/xm0328/p/13783044.html