JavaScript 事件

事件

  • ele.onlick = function(event){ }
    • 兼容性很好,但是一个元素的同一个事件上只能拥有一个
    • 基本等同于写在HTML行间上
  • obj.addEventListener(type,fu,false);
    • IE9以下不兼容,可以为一个事件绑定多个处理和方法
  • obj.attachEvent(‘on’ + type,fn);
    • IE独有,一个事件同样可以绑定多个处理程序

事件处理程序的运行环境

  • ele.onxxx = function(event){ }
    • 程序this指向dom元素本身
  • obj.addEventListener(type,fn,false);
    • 程序this指向式dom元素本身
  • obj.attachEvent(‘on’ + type,fn);
    • 程序this指向window
  • 封装兼容性的addEvent(elem,type,handle);方法

解除事件处理程序

  • ele.onclick = false 或者 null
  • ele.removeEventListener(type, fn, false);
var div = document.getElementByTagName('div')[0];
div.addEventListener('click', test, false);
function test(){
    console.log('a');
}
div.removeEventListener('click', test, false);
//如果将test函数写在addEventListener里,则removeEventListener将找不到test函数,无法解除事件绑定
  • ele.detachEvent(‘on’ + type, fn);
  • 绑定匿名函数,则无法解除

事件处理模型

  • 事件冒泡
    • 结构上(非视觉上)嵌套关系的元素,会存在事件冒泡的功能,即同一事件,自子元素冒泡向父元素(自底向上)
  • 事件捕获(仅谷歌浏览器能使用)
    • 结构上(非视觉上)嵌套关系的元素,会存在事件捕获的功能,即同一事件,自父元素捕获至子元素(事件源元素)(自顶向下)
    • IE没有捕获事件
div.addEventListener('click', function(){ },false)
//第三个参数为flase则为事件冒泡,改为true则为事件捕获
  • 触发顺序,先捕获,后冒泡
  • focus,blur,change,submit,reset,select等事件不冒泡

取消冒泡和组织默认事件发生

  • 取消冒泡
    • W3C标准 event.stopPropagation( );不支持IE9以下版本
    • IE独有event.cancelBubble = true;
    • 封装取消冒泡的函数stopBubble(event)
  • 阻止默认事件
    • 默认事件——表单提交,a标签跳转,右键菜单等
    • return false;以对象属性的方法注册的事件才生效
    • event.preventDefault( );W3C标注,IE9以下不兼容
    • event.returnValue = false;兼容IE
    • 封装阻止默认事件的函数cancelHandler(event);

事件对象

  • 事件源对象

    • event.target 火狐
    • event.srcElement IE
    • chrome都有
  • 鼠标对象

  • 用button来区分鼠标的按键; 0,1,2

    • document.onmousedown = function(e){
              if(e.button == 2){
                  console.log('right');
              }else if(e.button ==0){
                  console.log('left')
              }else if(e.button == 1){
                  console.log('center')
      	}
      }
      
  • 键盘事件

    • keydown keyup keypress
    • keydown > keypress >keyup
    • keydown和keypress的区别
      • keydown可以响应任意键盘按键,keypress只可以获取字符类键盘按键
      • keypress返回ASCLL码,可以转换成相应字符

事件分类

  • 文本操作事件

  • input;focus,blur,change

    //<input type="text">
    var input = document.getElementsByTagName('input')[0];
        input.onchange = function(){
            console.log(this.value)//输入内容,用户鼠标离开聚焦时打印
        }
    
    • onblur 当用户离开input输入框时执行一段Javascript代码
    • onfocus 当 input 输入框获取焦点时执行一段 Javascript代码,即点击输入框时
  • 窗体类操作(windows上的事件)

  • scroll

 window.onscroll = function(){
        console.log(window.pageXOffset + " " + window.pageYOffset);
    }//实时获取滚动条位置
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值