JS中的事件类型

108 阅读1分钟

鼠标事件

  • click 单击
  • dblclick 双击
  • mousedown 单击按下
  • mouseup 单击松开。按下后松开触发click
  • contextmenu 单击右键
  • mousemove 鼠标移动
  • mouseenter、mouseleave 鼠标进入和移除触发,碰到子元素不触发,更常用
  • mouseover、mouseout 鼠标进入和移出触发,碰到子元素也触发

mouseenter和mouseover的区别在于

    <div class="parent">
        <div class="child"></div>
    </div>
		$('.parent').onmouseover = function() {
            console.log('parent mouseover');
        }
		$('.parent').onmouseenter = function() {
            console.log('parent mouseenter');
        }

mouseover支持事件冒泡,mouseenter不支持事件冒泡,因此 当鼠标在parent的子元素来回切换时,mouseenter和mouseleave是不触发的,但mouseover和mouseout会触发

上面代码中,鼠标在进入parent后再进入child的时候也会触发mouseover,mouseenter则不会触发

键盘事件

  • keyup/keydown 键盘按下/松开

滚动事件

  • scroll 滚动时触发 容器设置overflow: scroll

相关API有:

  • node.scrollTo 滚动到哪里
  • node.scrollBy 滚动多少
  • node.scrollTop 滚动距离
  • node.scrollInto
    <div class="wrap">
        <p>项目1</p>
				$*30
    </div>
    .wrap{
        height: 200px;
        overflow-y: scroll;
    }
    const $ = s => document.querySelector(s)
        $('.wrap').scrollTo({top : 100,behavior:'smooth'} )			//页面默认滚动高度
        $('.wrap').onscroll = function() {
            console.log(this.scrollTop);			//显示当前滚动高度
        }
        document.onkeydown = function(e){
            if(e.key === 'w'){
                $('.wrap').scrollBy(0, 50)		//每次上下滚动50px
            }
            if(e.key === '2') {
                $('.wrap').scrollTo(0, 200)		//立即滚动到top 200px
            }
        }

表单事件

  • blur 失去焦点
  • focus 获得焦点
  • input 每次键盘键入内容时触发
  • change 表单内容改变且失去焦点 change也适用于file、select
  • submit 表单提交时

加载事件

  • DOMContentLoaded DOM结构解析完成后触发该事件(即html解析完成后

DOMContentLoaded事件 只能用 addEventListener 添加

  • window.onload 页面所有资源加载完成
  • img.onload 图片加载后获取宽度

DOMContentLoaded 和 window.onload 的区别在于,前者只需要页面的骨架加载完成即可触发,后者需要页面所有资源加载完成才可触发

        document.addEventListener('DOMContentLoaded', function(e) {
            console.log('html加载完成');
        })
        window.onload = (e) => {
            console.log('所有资源加载完成');
            console.log(1);
        }
        $('img').onload = (e) => {
            console.log('图片加载完成');
        }

上面代码的执行顺序为:图片、html、所有资源