js事件上

事件上

事件概述:

用户在浏览器上触发一个操作 浏览器会执行相关的函数进行处理,称为事件

例如:用户点击注册按钮,浏览器会完成注册操作

事件的两种模式
  • 内联模式

  • 脚本模式

    <!-- 内联模式 -->
    <button onclick="alert(123)">123</button>
    <!-- 脚本模式 -->
    <button onclick="handleClick()">123</button>
    <script>
    function handleClick() {
    alert(123)
    }
    
事件划分

事件的执行者 元素

事件名 on开头 + 对应的名字

事件处理函数 function

//执行者 事件名
document.onclick = function(){
    //处理函数
}

事件的分类

鼠标事件(mouse)

点击事件

onclick

ondblclick

onmousedowm

onmouseup

移进

onmouseenter(子元素不会触发)

onmouseover(子元素也会触发)

移出

mouseleave(子元素不会触发)

mouseout (子元素也会触发)

移动

mousemove

键盘事件(key)

onkeyup 弹起

onkeydown 按下

onkeypress (字符键才触发 按下)

window.onkeydown = function(){
	console.log('键盘按下')
}
window.onkeyup = function(){
    console.log('键盘弹起')
}
//字符键触发 只有按字符的时候才能触发  tab ctrl
window.onkeypress = function(){
    console.log('字符按下')
}
html事件
  • load 加载事件

  • unload 卸载

  • select 选择

  • change 修改

  • blur 失去焦点

  • focus 获取焦点

  • input 输入内容

  • scroll 滚动

  • submit 提交

  • reset 重置

<form action="" style="height: 1000px;">
    <input type="text">
        <input type="text" class="con">
            </form>
<script>
            window.onload = function() {
            console.log('加载');
        }
window.onunload = function() {
    console.log('卸载');
}
//html元素的一些事件
//表单元素
//获取事件焦点
document.querySelector('input').onfocus = function() {
    console.log('获取焦点');
    //focus方法可以直接获取焦点
    document.querySelector('input:nth-child(2)').focus()
}
//失去焦点事件
document.querySelector('input').onblur = function() {
    console.log('失去焦点');
}
document.querySelector('.con').onselect = function() {
    console.log('选择');
}
//修改数据  失去焦点
document.querySelector('input:nth-child(2)').onchange = function() {
    console.log('数据修改了');
}
//vue 双向绑定原理实现
document.querySelector('input:nth-child(2)').oninput = function() {
    console.log('输入数据');
}
//表单元素  form
document.querySelector('form').onsubmit = function() {
    console.log('数据提交了');
}
//重置元素  form
document.querySelector('form').onresert = function() {
    console.log('数据重置了');
}
//scroll 滚动栏 滚动事件  任何具备滚动栏都可以添加
window.onscroll = function() {
    console.log('滚动了');

}
setTimeout(function() {
    //操作滚动栏滚动 x轴  y轴
    window.scrollTo(0, 0)
}, 1000)
</script>

所有的函数都具备一个参数arguments(所有传递参数 他是数组)

处理函数也同样是函数 同样存在这个arguments

通过我们的比对发现这个arguments里面只有一个参数,这个参数是一个event对象(事件源对象)

由于我们的arguments[0]或者对应的arguments数组里面的第一个参数(第一个形参 所有我们可以在对应的处理函数中直接声明一个形参来接收我们arguments里面的数据)

document.querySelector('button').onclick = function(e){
//e其实就是我们对应的arguments[0] 所以这个e就是我们的event对象
//建议形参写为e或event
//兼容写法
e = e || window.event
 console.log(e.altKey)
}

event 事件源对象(window里面的)

event中的属性
//event中的属性
//位置属性
console.log(e.x);//当前鼠标离对应的最顶部的距离(不包含滚动栏的距离)不包含不可见距离
console.log(e.y);
console.log(e.clientX);
console.log(e.clientY);
console.log(e.offsetX);//对应在div里面的鼠标位置X
console.log(e.offsetY);//对应在div里面的鼠标位置Y
console.log(e.pageX);//当前鼠标离对应的最顶部的距离(包含滚动栏的距离) 包含不可见距离
console.log(e.pageY);
console.log(e.layerX);//在定位的时候基于自己 不定位的时候基于最顶部距离 包含不可见距离
console.log(e.layerY);
console.log(e.screenX);//离屏幕最坐标的X距离
console.log(e.screenY);//离屏幕最上面的y距离
位置相关属性(event中的属性)

offsetX 鼠标离当前元素的X距离
offsetY 鼠标离当前元素的Y距离
clientX 鼠标离网页最左的距离 (不包含不可见部分)
clientY 鼠标离网页最顶部的距离 (不包含不可见部分)
pageX 鼠标离网页最左的距离 (包含不可见部分)
pageY 鼠标离网页最顶部的距离 (包含不可见部分)
screenX 鼠标离屏幕最左部的距离
screenY 鼠标离屏幕最顶部的距离

三个按键是否按下(长按) 先按下再操作 布尔类型的值

ctrlKey altKey shiftKey

//三个按键是否按下(长按)  先按下再操作 布尔类型的值
console.log(e.ctrlKey)//是否按下ctrl
console.log(e.shiftKey);//是否按下shift
console.log(e.altKey);//是否按下alt

button (只针对于点击事件)

左键为0 中间为1 右键为2

type 事件触发类型

target 当前触发事件的对象

currentTarget 当前加事件的对象

键盘的输入的相关属性

key 获取对应的按下的键

keyCode 获取按下的键的ascii码

charCode 获取keypress 事件中按键的ascii码

window.onkeydown = function(e){
    //兼容ie
    e = e || window.event
    //key 获取对应的按下的键
    console.log(e.key)//兼容问题
    //keyCode  获取对应按下键的ascii码
    console.log(e.keyCode) //不管是大写还是小写获取的都是大写的ascii码
}
//只支持字符
window.onkeypress = function(e){
    console.log(e.keyCode)
    //将ascii码转为对应的字符串
    console.log(String.fromCharCode(e.keyCode))
    //只在onkeypress 里面才有用 也返回ascii码
    console.log(e.charCode)
    
}
事件委托机制

将原来元素需要做的事情 交给他的父元素

1.加事件给对应的父元素

2.在父元素的事件中进行判读e.target

//事件委托  (里面有多个相同的元素需要同样的事件)
//获取父元素 利用的父元素的事件及对应的e.target进行判断  当前你操作的元素是哪一个
document.querySelector('ul').onclick = function(e){
    e = e || window.event
    //获取当前操作的元素  li
 	if(e.target.nodeName == 'LI'){
    	for(var j = 0;j<this.children.length;j++){
            this.children[j].style.backgroundColor = ''
        }
        e.target.style.backgroundColor = 'red'
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值