js第12天(js事件)


前言

今天学习的是js事件,JavaScript事件是由访问Web页面的用户引起的一系列操作,HTML 事件是发生在 HTML 元素上的事情。当在 HTML 页面中使用 JavaScript 时, JavaScript 可以触发这些事件。HTML 事件可以是浏览器行为,也可以是用户行为。


一、JS事件是什么?

事件概念:当点击一个按钮的时候,会弹出一个对话框,在javascript中,“点击”这个事情就看作一个事件,“弹出对话框”其实就是点击事件中做的一些事。

事件构成:1.事件源      触发事件的元素  eg:按钮

                  2.事件类型         事件任何触发    eg:点击,双击,移动

                  3.事件处理函数           事件做什么

二、事件对象

1.事件对象概念

事件对象是处理事件,与事件相关的

2.创建事件对象

创建事件对象:当触发事件,自动生成一个时间对象

 和window一打开游览器窗口生成一个window对象类似

3.获取事件对象

在事件处理函数中获取名为 event

当定义方式为元素和事件行为分离时:

更改事件对象名:事件处理函数定义一个形参接收事件对象

代码如下(示例):

<script>

 btn.onlick = function(e){       //e=event

         //console.log(event)

         console.log(e)

}
</script>

事件兼容性问题:

在低版本游览中 ,事件对象写为  window.event

代码如下(示例):

<script>

 btn.onlick = function(e){       //e=event
         e = e || window.event
         console.log(e)
}
</script>

4.事件对象位置属性

1.相对于事件源:是相对于你点击的元素的边框内侧开始计算

offsetX 和offsetY

2.相对于游览器窗口:是相对于浏览器窗口来计算的,不管你页面滚动到什么情况,都是根据窗口来计算坐标

clientX 和 clientY

3.相对于页面:是相对于整个页面的坐标点,不管有没有滚动,都是相对于页面拿到的坐标点

pageX  和 pageY

注:当页面没有滚动时,client和page两者相同

5.常见事件

1.鼠标事件

mouseover             鼠标移入

mouseout                 鼠标移出

mousemove            鼠标移动

代码如下(示例):

//样式部分
<style>
			* {
				padding: 0;
				margin: 0;
			}
			div {
				width: 200px;
				height: 40px;
				background-color: skyblue;
				text-align: center;
				line-height: 40px;
				color: blue;
			}
</style>

//结构部分
<div>前端编程</div>

		<script>
			/* 
          鼠标移入div区块,字体颜色变为红色
           复杂问题简化
             分解:
                1. 鼠标移入div区块
                     div.onmouseover = function(){
                         改变字体颜色
                     }
                2. 字体颜色变为红色
                     div.style.color = 'red'
        */
			var divEle = document.querySelector('div')
			// 鼠标移入
			divEle.onmouseover = function () {
				divEle.style.color = 'red'
			}
			// 鼠标移出
			divEle.onmouseout = function () {
				divEle.style.color = 'blue'
			}

			// 鼠标移动
			divEle.onmousemove = function (e) {
				// 事件对象
				e = e || window.event
				//打印鼠标(光标)位置
				console.log(e.offsetX, e.offsetY)
			}

			// document.oncontextmenu = function(e){
			//     e.preventDefault()  // 元素默认行为都可阻止
			//     alert('右键')
			// }

			// 左键按下
			document.onmousedown = function () {
				console.log('mousedown')

				// 鼠标移动事件
				document.onmousemove = function (e) {
					e = e || window.event
					console.log('x : ', e.clientX, ' y :', e.clientY)
				}
			}
</script>

鼠标事件的案例:(区域块移动)

代码如下(示例):(样式部分)

 <style>
        *{
            padding: 0;
            margin: 0;
        }
        div{
            width: 500px;
            height: 500px;
            background: skyblue;
            margin: 100px;
            position: relative;
            /* overflow: hidden; */
           
        }
        p{
            width: 100px;
            height: 100px;
            background: olivedrab;
            position: absolute;
            top: 20px;
            left: 20px;
            text-align: center;
            line-height: 100px;
            color: white;
            display: none;
            pointer-events: none;
        }
    </style>

代码如下(示例):(结构部分)

<div>
        <p>啦啦啦~</p>
    </div>

    <script>
        /*
           效果:当鼠标在大区域移动时,小区域跟着鼠标一起移动
             1.鼠标移动时获取鼠标在大区域的位置
             2.将鼠标位置赋给小区域
        */
       var divEle=document.querySelector('div')
       var pEle=document.querySelector('p')
        
       //鼠标移入时,显示小区域
       divEle.onmouseover = function(){
        pEle.style.display='block'
       }
       //鼠标移除时,小区域隐藏
       divEle.onmouseout = function(){
        pEle.style.display='none'
       }

       divEle.onmousemove=function(e){ 
         e= e || window.event

         //获取鼠标位置
         var x=e.offsetX -pEle.offsetWidth /2
         var y=e.offsetY -pEle.offsetHeight /2

         //边界检查
         if(x<0){
            x=0
         }
         if(x> (divEle.clientWidth -pEle.clientWidth)){
            x= (divEle.clientWidth -pEle.clientWidth)
         }
         if(y<0){
            y=0
         }
         if(y> (divEle.clientHeight -pEle.clientHeight)){
            y= (divEle.clientHeight -pEle.clientHeight)
         }
         
         //将鼠标位置赋给小区域
         pEle.style.top= y +'px'
         pEle.style.left=x +'px'
       }
    </script>

2.表单事件

表单提交事件           submit

当点击表单提交按钮默认行为:

执行action属性指定的url(地址跳转,同时获取表单输入框以名称值对形式作为参数传递)

表单提交事件(默认行为)

submit是表单from元素

作用:表单验证(可以做非空验证,即表单输入框内容不能为空)

阻止表单默认行为

e.preventDefault()

内容转变事件(表单change)

onchange :表单项内容发生变化时触发(多用于图片预览)

表单事件的案例(表单非空验证)

代码如下(示例):(样式部分)

 <style>
        * {
            padding: 0;
            margin: 0;
        }

        form {
            width: 500px;
            background-color: skyblue;
            margin: 100px auto;
            padding: 50px;
        }

        form input {
            width: 100%;
            line-height: 40px;
            margin-top: 20px;
        }

        #login {
            height: 40px;
        }
    </style>

代码如下(示例):(结构部分)

 <form action="">
        <input type="text" value="" name="username" placeholder="请输入用户名">
        <input type="password" name="password" id="" placeholder="请输入密码">
        <input type="submit" value="提交" >
    </form>

    <script>
        var formEle=document.querySelector('form')
        var usernameEle=document.querySelector('input[name="username"]')
        var passwordEle=document.querySelector('input[name="password"]')

        formEle.onsubmit=function(e){
            e=e || window.event
            e.preventDefault()

            var username=usernameEle.value
            var password=passwordEle.value
            
            //做非空验证
            if(username === ''){
                alert('用户名不能为空')
                return
            }else if(password === ''){
                alert('密码不能为空')
                return
            }

            //提交验证密码或用户名是否正确
            if(username == 'acy' && password =='qaz123'){
                location.href='https://music.163.com/'
            }else{
                alert('用户名或密码错误')
            }
        }
    </script>

3.焦点事件

focus              获取焦点事件          eg:判断表单中username和password不能为空

blur                 失去焦点事件

4.键盘事件

键盘事件的事件源是document

keyup             抬起

keydown        按下

keypress         按住

键码   keycode

获取键码:

e=e || window.event

e.keycode

获取键码兼容性写法:

var keycode = e.keyCode || e.which

组合按键:

事件对象属性:altkey  (alt按下为true,否则为false)

                         shiftkey  ( shift按下为true,否则为false)

                         ctrlkey  (  ctrl按下为true,否则为false)

5.游览器相关事件

load           文档加载完成事件

scroll          滚动事件

resize          窗口尺寸改变事件 (多用于移动端适配)

代码如下(示例):

// 文档加载完成事件
window.onload=function(){
 //是heml文档加载完成之后执行
}


//滚动事件
window.onscroll=function(){
 console.log(document.documentElement.scrollTop)
}

6.触摸事件

touchstart                触摸开始事件

touchend                  触摸结束事件

touchmove               触摸移动事件

7.鼠标事件

click                         点击事件

dbclick                       双击事件

contextmenu             右键单击事件

mousedown               鼠标左键按下事件

mouseup                   鼠标左键抬起事件


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值