zoukankan      html  css  js  c++  java
  • 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()
    
    
  • 相关阅读:
    68、成员列表初始化?
    67、类成员初始化方式?构造函数的执行顺序 ?为什么用成员初始化列表会快一 些?
    64、malloc申请的存储空间能用delete释放吗?
    63、new和delete的实现原理, delete是如何知道释放内存的大小的额?
    62、delete p、delete [] p、allocator都有什么作用?
    60、C++模板是什么,你知道底层怎么实现的?
    nyoj--814--又见拦截导弹(动态规划+贪心)
    hdoj--1950--Bridging signals(二分查找+LIS)
    nyoj--214--单调递增子序列(二)(二分查找+LIS)
    hdoj--1010--Tempter of the Bone(搜索+奇偶剪枝)
  • 原文地址:https://www.cnblogs.com/xm0328/p/13783044.html
Copyright © 2011-2022 走看看