JavaScript_事件

事件

通过触发指定的行为的时候,执行代码


一、事件三要素

  • 事件源:触发条件的元素本身
  • 事件类型:触发条件的类型( 按钮、鼠标、键盘…… )
  • 事件处理函数:触发条件后,执行的代码

1) 语法:事件源.on事件类型 = 事件处理函数

var  div  =  document.querySelector( 'div' )
div.onclick = function() {  // div为事件源,click为事件类型( 点击事件 ),function内为事件处理函数;
    console.log( ' Hello, world! ' )
}

2) 常见事件类型分类

a. 鼠标事件

  • click =》 鼠标单击(只对左键有效)

  • dblclick =》 鼠标双击

  • contextmenu =》 鼠标右键(只对右键有效)

document.onclick =function() {
    console.log('点击事件触发')
}

document.ondblclick =function() {
    console.log('鼠标双击事件触发')
}

document.oncontextmenu =function() {
    console.log('鼠标右键事件触发')
} 
  1. 鼠标双击事件触发时,点击事件也会触发两次;
  2. 点击事件只对左键有效,而右击事件只对右键有效( 阻止右键默认事件 )
image.png
  • mousedown =》 鼠标按下

  • mouseup =》 鼠标抬起

document.onmousedown =function() {
    console.log('鼠标按下')
}

document.onmouseup =function() {
    console.log('鼠标抬起')
}   

执行顺序:先按下、再弹起、再执行点击事件

image.png
  • mousemove =》 鼠标移动
document.onmousemove =function() {
    console.log('鼠标移动')
}
  • mouseover =》 鼠标移入(包括子元素)

  • mouseout =》 鼠标移出(包括子元素)

big.onmouseover =function() {
    console.log('鼠标移入(包括子元素)')
}

big.onmouseout =function() {
    console.log('鼠标移出(包括子元素)')
}
  • mouseenter =》 鼠标移入(不包括子元素)

  • mouseleave =》 鼠标移出(不包括子元素)

eg:示例
    big.onmouseenter =function() {
        console.log('鼠标移入(不包括子元素)')
    }
    big.onmouseleave =function() {
        console.log('鼠标移出(不包括子元素)')
    }

b. 键盘事件 (事件源建议设置为document)

  • keydown -- 键盘按下

  • keyup -- 键盘抬起

  • keypress -- 键盘键入(只对字符键有效,对ctrl、shift等无效)

    document.onkeydown =function() {
        console.log('键盘按下')
    }
    
    document.onkeyup =function() {
        console.log('键盘抬起')
    }
    
    document.onkeypress =function() {
        console.log('键盘键入')
    }
    

    执行循序:键盘按下、键盘键入、键盘弹起

image.png

c. HTML事件(指系统事件 被动触发的)

  • load 加载

  • close 关闭

  • change 输入框的value值发送表示

  • select 只有输入框才能触发 (选择里面的内容)

  • focus 获取焦点

  • blur 失去焦点

  • reset 重置

  • submit 提交

  • scorll 滚动条滚动

    // load 窗口的加载 图片的加载 等等
    window.onload = function(){
        console.log('窗口加载');
    }
    window.onunload = function(){ //清除对应的内存 销毁
        console.log('窗口卸载');
    }
    window.onclose = function(){
        console.log('窗口关闭');
    }
    var input = document.querySelector('input')
    input.onchange = function(){ //必须要失去焦点
        console.log('value值变化了');
    }
    input.onselect = function(){ //禁止复制粘贴
        console.log('当前内容被选择');
    }
    input.onfocus = function(){
        console.log('获取焦点');
    }
    input.onblur = function(){
        console.log('失去焦点');
    }
    // form表单的事件 onsubmit 提交的时候触发 onreset 重置的时候的触发
    document.querySelector('form').onsubmit = function(){
        console.log('表单提交');
    }
    document.querySelector('form').onreset = function(){
        console.log('表单重置');
    }
    window.onscroll = function(){ //每次滚动距离
        console.log('滚动条滚动');
    }
    

    Ps: 该代码来自小钢老师


二、事件对象(event)

在函数中,由于有时候无法确定传入参数数量,所以有arguments伪数组;而在事件处理函数中,arguments[0]作为一个对象,包含着很多的 事件对象 的 键值对。

//e是形参 相当于第一个形参 常见的写法 这个形参名字叫 e 或者 event
window.onkeydown = function(e) {
    e = e || window.event    // ie兼容写法
    console.log(e);     // 这个就是arguments[0] event类型对象
}

(一)属性

a. 坐标相关属性

1) 距离屏幕距离
screenX 得到鼠标在屏幕的上的x坐标
screenY 得到鼠标在屏幕上的y坐标
2) 距离浏览器页面距离
pageX 得到鼠标在页面上的x坐标 (包含不可视区域)
pageY 得到鼠标在页面上的y坐标 (包含不可视区域)
3) 距离文档区域距离
clientX 得到鼠标在可视区域内的x坐标 (不包含不可视区域)
clientY 得到鼠标在可视区域内的y坐标 (不包含不可视区域)
4) 距离事件元素距离
offsetX 得到鼠标在偏移元素内容的x坐标 (当前添加事件的元素里面的坐标 不包含border)
offsetY 得到鼠标在偏移元素内容的y坐标 (当前添加事件的元素里面的坐标 不包含border)
image.png

b. 按键的相关属性( Boolean值 )

altKey 是否长按alt键
ctrlKey 是否长按ctrl键
shiftKey 是否长按shift键

c. 鼠标相关的内容(只有鼠标触发的事件有)

button 返回的值为number类型(0 表示左键 1表示中间 2表示右键)

d. 事件触发的相关属性

type 事件类型 返回对应的事件名
target 目标元素 返回真实触发的事件元素
currentTarget 目标元素 返回当前添加事件的元素 (作用不大)
bubbles 事件是否冒泡

e. 键盘事件相关的内容(需要键盘来触发的事件)

key 属性 (当前按下的键)
keycode 属性 (获取当前按下键大写的ascii码)
charCode 属性 (字符键 press事件 ascii码)

三、事件流

概述:事件流就是事件执行流程,分为捕获阶段、执行阶段、冒泡阶段

(一)两种模式

a. 冒泡模式( 浏览器默认 )

事件从里向外,逐个执行

1) 阻止冒泡行为
e.stopPropagation() 函数 (*) (stop)
e.cancelBubble = true 属性设置 (IE 未来可能会废弃)
兼容写法:
e.stopPropagation?e.stopPropagation():e.cancelBubble = true

b. 捕获模式

从window向里面,层层捕获


四、默认行为

概述:默认行为就是浏览器一个标签等默认的行为(例如,鼠标右键默认菜单……)

(一) 阻止默认行为的js实现

a. e.preventDefault() 函数 (*) (prevent)

b. e.returnValue = false ie的兼容

c. return false 直接结束对应的操作(奇技淫巧)

兼容写法
e.preventDefault?e.preventDefault():e.returnValue = false   //兼容

五、样式获取

获取样式

a. getComputedStyle 方法属于window的方法

window.getComputedStyle(元素对象,null)      //返回给你的是一个样式对象

b. ie兼容

element.currentStyle //返回给你一个样式对象
兼容封装函数
//方法的封装
function getStyle(element,attr){
    var style = window.getComputedStyle?
        window.getComputedStyle(element):element.currentStyle
    return style[attr]
}
//调用
console.log(getStyle(box,'height'));
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,509评论 6 504
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,806评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,875评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,441评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,488评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,365评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,190评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,062评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,500评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,706评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,834评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,559评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,167评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,779评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,912评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,958评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,779评论 2 354

推荐阅读更多精彩内容