事件是一个流程,就是一个监听(预备)一个触发(当前内容执行了(进行处理)用户在页面上操作(监听这个操作),然后我们要调用函数来处理(进行处理)。
监听过程--触发过程--处理过程 这个流程就是完整的一个事件
内联模式
<div onclick="方法名()"></div>
脚本模式
document.queryselector('div').onclick = function(){
//操作
}//他也会被解析
内联里面调用的方法的this会指向window(传递this)脚本模式的this会指向当前的调用者。
click单击事件
dblclick双击事件
mouseover鼠标移进(自己及里面的都能触发)
mousemove鼠标移动事件
mouseout鼠标移出
mouseenter鼠标移进(只会是自己可以触发)
mouseseleave鼠标鼠标移出
mousedown鼠标按下
mouseup鼠标弹起
keyup弹起
keydown按下
keypress字符键按下
// 除非是输入框,不然是不能调用键盘事件 都是window window.onkeydown = function(){ console.log('键盘按下'); } window.onkeyup = function(){ console.log('键盘弹起'); } window.onkeypress = function(){ console.log('字符键按下'); }
load加载
close关闭
change输入框的value值发送表示
select只有输入框才能触发(选择里面的内容)
focus获取焦点
blur失去焦点
reset重置
submit提交
scroll滚动条滚动
// 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').submit = function(){ console.log('表单提交'); } document.querySelector('form').onreset = function(){ console.log('表单重置'); } window.onscroll = function(){ console.log('滚动条滚动'); }
// e是形参 相当于第一个形参 常见的写法 这个形参的名字叫 e 或者 event window.onkeydown = function(){ console.log(e);//这个就是arguments[0] event类型对象 // 他设计了一个event对象 他是一个全局的变量 window.event // ie为了兼容 我们会写出兼容写法 e = e || event console.log(a.altKey); console.log(a.key); }
坐标相关的属性
// 打印完 看到arguments具备一个参数 是一个对象(pointer) console.log(arguments); console.log(arguments[0]); console.log(arguments[0].x);//鼠标x坐标 (不包含不可视区域 console.log(arguments[0].y);//鼠标y坐标页面上 console.log(arguments[0].pageX);//得到鼠标在页面上的x坐标 (包含不可视区域 console.log(arguments[0].pageY);// 得到鼠标在页面上的y坐标 (包含不可视区域) console.log(arguments[0].layerX);//默认是得到鼠标基于页面的x坐标 console.log(arguments[0].layerY);//默认是得到鼠标基于页面的y坐标 当你添加定位以后他是基于定位元素的坐标 console.log(arguments[0].clientX);//得到鼠标在可视区域内x的坐标(不包含不可视区域 console.log(arguments[0].clientY);// 得到鼠标在可视区域内的y坐标 (不包含不可视区域) // 当前点击元素内的坐标 console.log(arguments[0].offsetX);//得到鼠标在偏移元素内容的x坐标 (当前添加事件的元素里面的坐标 不包含border) console.log(arguments[0].offsetY);//得到鼠标在偏移元素内容的坐标 (当前添加事件的元素里面的坐标 不包含border // 屏幕坐标 console.log(arguments[0].screenX); console.log(arguments[0].screenY);
按键相关的属性
鼠标相关的内容
事件触发的相关属性
键盘事件相关的内容(需要键盘来触发的事件)
// 按键的相关属性 console.log(arguments[0].ctrlKey); console.log(arguments[0].altKey); console.log(arguments[0].shiftKey); // 鼠标的相关内容 // button返回的值为number类型(0表示左键 1表示中间 2表示右键(但是不显示 console.log(arguments[0].button); // 事件触发的相关属性 console.log(arguments[0].type);//事件触发类型 console.log(arguments[0].target);//目标对象 事件触发元素真实触发的元素 console.log(arguments[0].currentTarget);//目标对象 表示事件触发的元素(返回当前添加事件的元素 console.log(arguments[0].bubbles);//是否冒泡 // 键盘相关的内容(需要键盘来触发的事件 // key属性 获取当前的按键 // keyCode属性 获取大写的ASCII码 // charCode属性 字符键press事件的ASCII码 window.onkeypress = function(){ console.log(arguments[0].key); console.log(arguments[0].keyCode); console.log(arguments[0].charCode); } //e是形参 相当于第一个形参 window.onkeydown = function(e){ console.log(e);//这个就是arguments[0] // 他设置一个event对象 他是一个全局变量 window.event //ie为了兼容 我们会写成 e = e || window.event //兼容写法 console.log(e.key); console.log(e.keyCode); } function fn(a,b,c){ console.log(arguments); console.log(arguments[0]); console.log(a); } fn(1,2,3)
概述:事件流指代的是事件的执行流程,多个盒子嵌套相同事件,这个时候你触发一个盒子的事件,并不会只执行一个盒子的事件的处理函数,而是全部执行。
冒泡模式指代的是事件从里到外逐个执行
阻止事件冒泡
e.stopPropagation()函数 (*)(stop)
document.querySelector('a').onclick = function(e){ e = e || event e.preventDefault() console.log('hello'); } // 阻止表单的默认提交行为 document.querySelector('form').onsubmit = function(e){ e = e || event // e.preventDefault() e.preventDefault?e.preventDefault():e.returnValue = false//兼容写法 console.log('submit'); } // 对按钮无效阻止 document.querySelector('input').onsubmit = function(e){ e = e || event e.preventDefault() console.log('submit'); } // 第三种阻止方案 document.querySelector('a').onsubmit = function(e){ e = e || event console.log('hello'); return false//函数的结束 gc垃圾回收机制会准备回收 }
代码实现:
// 获取div var box = document.getElementById('box') // 给document添加mousedown事件 box.onmousedown = function(e){ e = e || event //记录的是鼠标在div里面的位置 // var x = e.offsetX // var y = e.offsetY // var x = e.pageX - div离页面的位置 var x = e.pageX - box.offsetLeft var y = e.pageY - box.offsetTop document.onmousemove = function(e){ // 记录每次的位置 在document里面的位置 var currentX = e.pageX var currentY = e.pageY box.style.left = currentX - x + 'px' box.style.top = currentY - y + 'px' } document.onmouseup = function(){ // 清除对应的mousemove事件 document.onmousemove = null } } // 在mousedown里面记录按下的位置 // 给document添加mousemove的事件
style属性 只能获取标签内容style属性里面存在的一些样式
如果你需要获取对应的全局所以地方设置样式 我们就需要采取一些方法
getComputerStyle方法属于window的方法
var box = document.querySelector('div') console.log(box.style.width); console.log(box.style.height); var styleObj = window.getComputedStyle(box) console.log(styleObj.width); console.log(styleObj.height); console.log(styleObj.backgroundColor); console.log(styleObj.color); // IE的兼容 // var element = box.currentStyle(box.currentStyle) window.getComputedStyle?window.getComputedStyle(box):box.currentStyle function getStyle(element,attr){ var style = window.getComputedStyle?window.getComputedStyle(box):box.currentStyle return style[attr] } console.log(getStyle(box,'backgroundColor'));