DOM 5

1. *****定时器

   动画

2. screen

3. history

4. ***location

5. ***navigator

6. ****event

1. *****定时器

   动画:

  练习:

     获取长度属性值时: 获得都是带单位的字符串,不能直接计算

                                  都要先去单位(parseFloat),再计算

     设置长度属性值时: 在数值结尾拼单位(px)

2. screen对象:

   获得屏幕的大小:

       完整大小: screen.width/height

       何时: 用屏幕大小鉴别设备种类: ——鄙视题

          wide desktop  -  lg : 1200+

          pc                    - md: 992+

          pad                  - sm: 768+

          phone              - xs: 480+

   

       可用大小: screen.availWidth/availHeight

           去掉任务栏之后的剩余大小

3. history: 保存当前窗口打开后成功访问过的url的历史记录栈

     前进: history.go(1)

     后退: history.go(-1)

     刷新: history.go(0)

     其实: history.go(n)

4. ***location: 封装当前窗口正在打开的url对象

    属性:

      .href: 获取或设置当前网页打开的url

          何时: 在当前页面打开新链接时

             简写: location.href=url  ->  location=url

      .protocol: 协议

      .host: 主机名+端口号

      .hostname: 主机名

      .port: 端口号

      .pathname: 网页的相对路径

      .hash: #锚点

      .search: ?查询字符串

        鄙视: .search -> 参数组成的对象:

            ?uname=zhangdong&upwd=123456

            ["uname=zhangdong", "upwd=123456"]

            {uname:zhangdong, upwd:123456}

1. ***location

2. ***navigator

3. ****event

1. ***location:

   属性:

   方法:

    location.assign("url") => location.href="url"

                                              location="url"

    location.reload(false/true): 重新从服务器加载url

                                 force

         默认false: 优先从服务器端缓存中获取文件

         如果改成true, 强制从服务器硬盘获取新文件

    location.replace(url): 在当前窗口打开新url,禁止后退

2. ***navigator: 封装浏览器配置信息的对象

    navigator.cookieEnabled: 是否启用cookie

      cookie: 在客户端本地持久存储一个数据的文件

          如果禁用无法保存搜索关键词,或记住密码

    navigator.plugins: 封装所有插件对象的集合

     

    判断浏览器的名称和版本:

    navigator.userAgent: 保存浏览器内核,名称,版本号的字符串

3. ****event

   事件: 浏览器自己触发的或用户手动触发的页面(元素)状态的改变。

   浏览器在事件发生时,都会自动调用事件处理函数

   事件处理函数: 当节点发生事件时,自动调用的函数

                          其实就是节点的onxxx属性

      事件处理函数的值,都是一个函数对象

      事件发生时: 节点对象.onxxx();

         事件处理函数中的this: .前的节点对象

   何时: 只要希望一个元素/节点,能够响应某个事件时

               在发生某个事件时,能自动执行事件处理函数

   如何: 3种方式:

      1. 在html元素开始标签中:

        html: <ANY on事件名="js语句(this)"

        js: function 函数(ANY){ ... }

        问题: 1. 无法为动态生成的元素绑定事件

                 2. 事件绑定分散在页面各个角落,不便于维护

      2. 在js中绑定事件: 2种方式:

        1. ANY.on事件名=function(){

                 this->ANY

            }

            事件发生时,自动执行: ANY.onXXX();

           问题: 每个ANY的一个事件处理函数,只能绑定一个函数对象。

           解决:

        2. ANY.addEventListener("事件名",fn)

              ANY.removeEventListener("事件名",fn)

           如果只是添加事件监听,可用匿名函数

           如果可能移除某个处理函数,就必须用有名的函数绑定

           IE8: ANY.attachEvent("on事件名",fn)

           其实: addEventListener("事件名",fn,capture)

               capture: 是否在捕获阶段就提前触发    

                   默认false: 所有事件处理函数都在冒泡阶段反向触发

                   true: 该事件会在捕获阶段就提前触发!

***事件周期:

   DOM标准: 3阶段

      1. 捕获(capture): 由外向内依次记录各级元素绑定的相同事件处理函数

      2. 目标出发: 执行实际触发事件的元素上的处理函数

      3. 冒泡: 由目标元素向外,出发各级父元素上绑定的相同事件处理函数

        目标元素(target): 实际触发事件的元素    

   IE8: 2个阶段: 没有捕获阶段  

   事件对象: event: 在事件发生时,自动创建的封装所有事件信息的对象

       event对象提供了操控事件的方法: 阻止事件, 取消冒泡....

   何时: 1. 为了获得事件相关的数据

            2. 操控事件

   如何:

      获取: DOM标准: 事件对象,默认作为事件处理函数的第一个参数传入:

               IE8: 事件对象自动保存在全局变量event中

         兼容: function eventHandler(e){

              e=e||window.event;

                  }

     

   取消冒泡: e.stopPropagation();

   利用冒泡:

   优化: 尽量少的添加EventListener

       为什么: 每个EventListener都是一个对象

          浏览器触发事件时,会轮询每个EventListener对象

          添加的EventListener越多,页面响应速度越低

   解决: 当多个平级子元素绑定相同的事件处理函数时

           其实,只要在父元素绑定一次,所有子元素共用即可!

   难题: 1. 如何获得目标元素:

              this->父元素 X

              DOM: e.target ->目标元素

              IE8: e.srcElement

                  兼容: var target=e.target||e.srcElement;

            2. 鉴别目标元素是否想要:

              判断元素的名称或属性

             

原文地址:https://www.cnblogs.com/Hale-Proh/p/7199696.html