• js高级总结


      一.事件对象

      1.事件event:客户端浏览器用户触发的一种行为;

      事件只有两种:一个是mouse(鼠标)事件,一个是key(键盘)事件

      2.需要记下所有的鼠标和键盘事件:

        鼠标事件:onclick点击  onmouseenter鼠标进入  onmouseover鼠标悬浮  onmouseleave鼠标离开  onfocus表单聚焦  onblur失去焦点  onmouseout鼠标移除

            onmousemove鼠标移动  onmosedown鼠标按下  onmouseup鼠标抬起  onchange表单内容修改  onload浏览器加载完成  cont计数器  oncontextmenu右击鼠标事件

        键盘事件:onkeydown键盘按下  onkeyup键盘抬起

      3.每个事件都是元素天生自带的每当我们给这个事件绑定方法,浏览器就会默认有一个参数叫mouse event和kKeyboardEvent,所有鼠标和键盘的信息,都存在这个对象上,有兼容性;

      1.event不一样,需要统一:

      var ev=ev||window.event;

      2.事件源

      var target=ev.target||ev.srcElement

      3.事件冒泡;

      4.阻止事件的默认行为

      4.给元素事件绑定方法;

        2种绑定事件的方法;

          1.div.onclick=function(){}  无兼容性

          2.div.addEventListener("click","fn",false)

          但是第二种写法,ie不支持,ie有自己的写法

          div.attachEvent("onclick",fn)

          addEventListener和attachEvent的区别?

          1.前者:标准    后者:ie低版本

          2.前者:冒泡捕获    后者:冒泡;

          3.前者:this指向当前实例   后者:this指向window

          4.前者:不带on   后者:带on

          attachEvent("事件名","事件函数")  两个参数

          addEventListener("事件名","时间函数","事件发生的阶段")    三个参数;

      事件冒泡:

        嵌套元素的同一事件,都绑定方法的时候,当触发子元素的事件时,执行完毕会接着触发父级元素身上的同一事件,这就叫事件冒泡;

      事件捕获:

        子元素的同一事件都绑定方法的时候,当触发子元素身上的事件时,先执行父级的事件,然后依次执行子级的事件,叫事件捕获;

      取消冒泡的方法;

        ev.stopPropagation?ev.stopPropagation():ev.cancelBubble=true;

      事件委托:

        子元素将自己的事件都委托给父级,点的时候,还是点子元素,但是这发方法,绑定在他的父级身上,然后父级通过ev.target找到这个事件是哪个孩子委托的;

      dom回流(白话解析):

        一个父级原先有三个div,当我们通过dom操作,给他追加第四个div时,浏览器会重新加载前三个div,当追加第五个div,浏览器会再次重新加载前五个div,这种现象叫dom回流;

        影响页面整体性能,消耗资源;

      解决dom回流的方法:文档碎片(ajax)

      案例分析:

        如果给一个父级的所有子元素添加同一事件,尽量不要获取所有的子元素,通过for循环去添加事件,会造成dom回流,用事件委托的方法去添加事件;

      针对事件对象:案例:拖拽;

      一般用on on绑定事件  off取消事件

      取消事件:

      1.div.onclick=null;

      2.div.removeEventListener("click",fn,false)

      3.div.detachEvent("onclick",fn)

       (注意:如果取消事件,三个参数,尽量不要用匿名函数)

      案例:拖拽  放大镜原理  碰撞检测  碰撞交换位置

      二:类;

      什么时类:构造函数函数名;

      目的:new 实例化对象

      分两种:

        一种的浏览器自带的:(function函数  array数组  number数字  boolean布尔  math算术  regexp正则  string字符串  date日期)

        一种的是人为定义的:function Person(){}     (所有function 实例对象)

      所有的类都是object的子类:

      画图解析:

        

      案例分析:以数组为例;

      定义数组的方法

      var a=[12,23]  (自变量定义)

      var a=new Array(12,23)  (类的实例化)

      三.改变this的指向:

        call   apply   bind  (会使用他们就行了)

      四.BOM   (浏览器对象模型)  本质也是一个对象;

        全称(brower object middle)

        而这个对象的大量方法都存在window下;

      方法:window.open()  打开新的窗口; 

         window.open(参数一,参数二)

         参数一:是地址,可选,如果是空白,打开一个空白页 还可以直接写网址;

         参数二:打开方式,是在当前页面打开,还是新建一个页面打开

            如果是空,代表打开一个新的页面, 如果是 "_self" 代表当前页面

         window.close()  关闭新的窗口;

         window.close():了解就可以了,这个方法比较鸡肋;

         几种情况:谷歌:直接关闭  (也只能关闭利用open打开的页面)

              火狐:无法关闭

              ie:询问是否关闭0

      属性:

        window.navigator.userAgent  浏览器用户信息  (也称为:浏览器版本信息)

        window.location 浏览器地址信息  (也是一个对象  所以他有几个方法)

          window.location.href  整个地址

          window.location.search  get提交的参数

          window.location.hash  哈希值,做路由的

        window.history  浏览器历史记录;他有两个方法;

          window.history.forward()  前进(最新打开的页面)

          window.history.back()    后退

          

      

  • 相关阅读:
    215. Kth Largest Element in an Array(partition逆序排序,index+1 == k)
    220. Contains Duplicate III(核心:set数组有序/桶排序)
    leetcode 772 基本计算器III(包含+-*/ 以及括号) 核心在于递归
    MTK8312 android 4.4 显示虚拟按键区源码修改
    高通android9.0 camera API1底层调用为HAL3而非HAL1
    使用yanzhenjie的Zbar Github项目时4.2版本上找不到so库的问题
    android studio CMake NDK:配置笔记
    android设置系统默认开机时间
    android开发里跳过的坑——GridView使用Glide加载图片不显示
    android系统编译打开系统蓝牙
  • 原文地址:https://www.cnblogs.com/shangjun6/p/10170561.html
Copyright © 2020-2023  润新知