JavaScript08—DOM、事件对象

DOM、事件对象

Dom

Dom对象的样式

  • 设置Dom对象的样式

    • dom.style.styleName=""

      • 对象方法,需要将css-字母,替换为大写字母
      • style字符串方式写法,按照原CSS行内样式填写
  • 获取计算后的dom样式

    • ie

      • currentStyle
    • 非ie

      • getComputedStyle
    • 使用时要先判断浏览器

      • var style;
        try{
        style=getComputedStyle(div0);
        }catch(error){
        style=div0.currentStyle;
        }
      • 先尝试第一个,不行就尝试第二个。
      • 之前效率很低,尽量不用,现在浏览器优化了,可以放心使用
  • 拓展:

    • Object.assign() 复制对象,浅复制

      • 增添class样式
      • 如果DOM的行内样式有内容,可以通过这个方式获取对应的行内样式。
      • 但如果DOM样式在CSS中,这时候还没有渲染,所以无法计算CSS的样式,这种style是无法获得的
      • 想要获取计算后样式,就需要使用getComputedStyle获取元素的样式

Dom对象常见属性

  • 宽高

    • DOM的宽高问题

      • clientWidth clientHeight 客户宽高

        • 计算后宽高=宽高+padding-(如果有滚动条,减去滚动条宽高)
      • offsetWidth offsetHeight 偏移宽高

        • 计算后宽高=宽高+padding+border
      • scrollWidth scrollHeight 滚动内容宽高

        • 如果没有超出 等同于clientWidth和clientHeight
        • 如果超出就是实际内容所占的宽高,但是padding没有右侧和下侧
        • 如果超出就是实际内容所占的宽高,但是padding没有右侧和下侧-(如果有滚动条,减去滚动条宽高)
    • html和body宽高问题

      • document.body body标签

        • clientWidth clientHeight 客户宽高

          • 实际body的宽度和高度-滚动条宽高
        • offsetWidth offsetHeight 偏移宽高

          • 实际body的宽度和高度-滚动条宽高
        • scrollWidth scrollHeight 滚动内容宽高

          • 实际body中内容的宽高
      • document.documentElement html标签

        • clientWidth clientHeight 客户宽高

          • 当前文档的可视宽高-(如果有滚动条,减去滚动条宽高)
        • offsetWidth offsetHeight 偏移宽高

          • 当前文档的内容宽高-(如果有滚动条,减去滚动条宽高)
        • scrollWidth scrollHeight 滚动内容宽高

          • 当前文档的可视宽高
          • 如果有滚动条,就是实际body撑开的宽高
  • 位置

    • DOM的位置问题

      • clientLeft clientTop 客户位置

        • 边线的宽高
      • offsetLeft offsetTop 偏移位置

        • 当前div到父容器左上角的距离(父容器是定位)
        • 和position的left和top是相同的
      • scrollLeft scrollTop 滚动条位置

        • 当前元素的滚动条位置
        • 前面的这些属性都是只读,但是这个是可以修改的
        • div2.scrollLeft=100; 滚动条位置设置
      • getBoundingClientRect() 当前元素到可视窗口左上角的位置

        • console.log(rect);

          • rect.x===rect.left;
          • rect.y===rect.top;
    • html和body位置问题

      • html和body的clientLeft ,offsetLeft 不考虑

      • scrollTop、scrollLeft

        • 页面中的滚动是html的scrollTop和scrollLeft控制

        • 早期的浏览器是body控制

        • 考虑兼容一起写,设置同样的值

          • 如:
            document.body.scrollTop=100;
            document.documentElement.scrollTop=100;

事件对象

事件基础

  • 事件

    • 是通知和侦听组合完成的
    • 先侦听后通知,执行对应的函数
    • 部分事件是系统默认事件,这些事件会由系统自动抛发
  • 创建一个事件对象

    • 事件类型必须是一个字符串
    • 事件的类型必须相同
    • 事件侦听的对象和抛发的对象必须相同
    • 将事件抛向侦听对象就可以
    • 先侦听后抛发

事件原理

  • 捕获阶段

    • 从外到里
  • 目标阶段

    • 事件锁定对象的最后的目标元素
  • 冒泡阶段

    • 从里到外

事件侦听和删除侦听

  • ie9以上

    • 添加事件:element.addEventListener(1,2,3)

      • 1事件类型

      • 2事件回调函数

      • 3布尔值(是否是捕获阶段,默认是false)

        • 布尔值true 捕获,false冒泡
    • 移除事件:element.removeEventListener(‘事件名’,事件函数名,事件冒泡/捕获)

  • ie8及以下

    • 添加事件:element.attachEvent(‘on开头的事件名’,事件函数名)
    • 移除事件:element.detachEvent(‘on开头的事件名’,事件函数名)
  • 注:

    • 事件对象必须是EventTarget或者继承他所产生子类
    • 目前只有dom可以做侦听

取消冒泡事件

  • 标准浏览器下 DOM中 :

    • event.stopPropagation() 停止传播
  • IE8及以下:

    • event.cancelBubble=true 取消冒泡

this

  • 事件中的this

    • 侦听的对象,而不是点击的目标对象
    • 等同于 currentTarget 侦听的对象
  • target、srcElement、toElement 实际点击的目标对象

    • 目标的定位 不管有没有停止冒泡,都有目标
    • 阻止冒泡只是阻止了继续传播

事件委托

  • 将子元素的事件,委托给父元素。这样就可以减少侦听的数量

XMind: ZEN - Trial Version

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值