前端学习第二阶段Day12

目录

1.javaScript事件简介

        概念:

        事件三要素:

2.事件对象event

        每触发一个事件都会生成事件对象

        事件对象包含对事件的描述信息

        获取事件对象

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

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

 IE兼容写法:

3.点击事件的光标坐标点获取

        1.相对事件源【你点击的元素】------offsetX,offsetY

        2.相对于浏览器窗口----------clientX,clientY

        3.相对于页面---------pageX,pageY

4. 常见的事件

        1.浏览器事件

        2.鼠标事件

        案例:

        3.键盘事件

        4.表单事件

        5.触摸事件

5.事件的绑定方式

        1.事件属性:

         2.事件绑定

        3.事件监听

   6.默认行为

       概念:

        阻止默认行为的两种方法:


1.javaScript事件简介

        概念:

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

        事件三要素:

                1.事件源:触发谁的事件

                2.事件类型:这个事件是干啥的,是点击呢,还是移动呢

                3.事件处理函数:事件过程做的一些事

<body>
    <button>按钮</button>

    <script>
        var btn = document.querySelector('button')

        btn.onclick = function(){
            alert('弹出内容') 
        }
        btn//事件源
        click//事件类型
        alert//事件处理函数
    </script>
</body>

2.事件对象event

        每触发一个事件都会生成事件对象

        事件对象包含对事件的描述信息

        获取事件对象

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

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

        odivEle.οnclick=function(e){

        console.log(e)

        }//在每个事件处理函数的形参位置,默认第一个就是事件对象----这里是e

 IE兼容写法:

odivEle.οnclick=function(e){

        e = e || window.event

        }

3.点击事件的光标坐标点获取

        每个点击事件的坐标点都不是一对,因为要有一个相对的坐标系

        1.相对事件源【你点击的元素】------offsetX,offsetY

                是相对于你点击的元素的边框内侧开始计算

        2.相对于浏览器窗口----------clientX,clientY

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

        3.相对于页面---------pageX,pageY

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

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>事件对象</title>
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        div{
            width: 100px;
            height: 100px;
            background: pink;
            margin: 100px auto;
        }
    </style>
</head>
<body>
    <div></div>
    <script>
        divEle=document.querySelector('div')
        divEle.onclick=function(e){
            e = e || window.event//兼容性写法
            console.log("基于自身:e.offsetX:",e.offsetX,"e.offsetY:",e.offsetY)
            console.log("基于浏览器窗口:e.clientX",e.clientX,"e.clientY:",e.clientY)
            console.log("基于文档页面:e.pageX:",e.pageX,"e.pageY:",e.pageY)
        }
    </script>
</body>
</html>

4. 常见的事件

        1.浏览器事件

                load:页面全部资源加载完毕

                scroll:浏览器滚动的时候触发

                resize:页面大小事件

<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="UTF-8" />
		<meta http-equiv="X-UA-Compatible" content="IE=edge" />
		<meta name="viewport" content="width=device-width, initial-scale=1.0" />
		<title>浏览器相关事件</title>
		<!-- 
        浏览器相关事件
           load    文档加载完成事件
           scroll   滚动事件
           resize   窗口尺寸改变事件
     -->
		<script>
			window.onload = function () {
				// 这里面的代码,是html文档加载完成之后执行
                var divEle = document.querySelector('div')
				console.log(divEle)
				divEle.innerHTML = '新内容'
			}
		</script>
        <style>
            div{
                height: 1200px;
            }
        </style>
	</head>
	<body>
		<div>元素一</div>

        <script>
            // 浏览器窗口滚动事件
            window.onscroll = function(){
                console.log(document.documentElement.scrollTop)
            }

            // 浏览器窗口尺寸改变事件 - 移动端适配 
            window.onresize = function(){
                // 显示窗口尺寸
                console.log('w ',window.innerWidth, ' h ',window.innerHeight)
            }
        </script>
	</body>
</html>

        2.鼠标事件

                cilck:点击事件

                dbclick:双击事件

                contextmenu:右键单击事件

                mousedown:鼠标左键按下事件

                mouseup:鼠标左键抬起事件

                mouseover:鼠标移动

                mouseover:鼠标移入

                mouseout:鼠标移除事件

                mouseenter:鼠标移入事件

                mouseleave:鼠标移出事件

                onmouseover和onmouseenter的区别:

                          onmouseover、onmouseout:鼠标经过时自身触发事件,经过其子元素触发                        该事件

                        onmouseenter、onmouseleave:鼠标经过时自身触发事件,经过其子元素时不触发                  该事件。

        案例:

                区块移动:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        div {
            background: skyblue;
            width: 600px;
            height: 600px;
            position: relative;
            margin: 100px auto;
        }

        p {
            background: pink;
            width: 100px;
            height: 100px;
            position: absolute;
            top: 10px;
            left: 10px;
            display: none;
            /* //鼠标移动当前元素不起作用 */
            pointer-events: none;
        }
    </style>
</head>

<body>
    <div>
        <p></p>
    </div>
    <script>
        var divEle = document.querySelector('div')
        var pEle = document.querySelector('p')
        //鼠标移入
        function over() {
            divEle.onmouseover = function () {
                pEle.style.display = 'block'
            }
        }
        over()
        //鼠标移出
        function out() {
            divEle.onmouseout = function () {
                pEle.style.display = 'none'
            }
        }
        out()
        //鼠标到小盒子上跟着鼠标动
        function mousemove() {
            //获取大盒子的距离
            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.offsetWidth-pEle.offsetWidth)) {
                    x = divEle.offsetWidth-pEle.offsetWidth//父盒子宽度-小盒子宽度 起点是在小盒子左上角
                }
                if(y<0)
                {
                    y=0
                }
                if(y>(divEle.offsetHeight-pEle.offsetHeight)){
                    y=divEle.offsetHeight-pEle.offsetHeight//
                }
                //将距离赋值给小盒子移动
                console.log(x, y)
                pEle.style.top = y + 'px'
                pEle.style.left = x + 'px'

            }
        }
        mousemove()
    </script>
</body>

</html>

        拖动效果

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>版本2</title>
    <!-- 
            拖动效果案例
              按在div上,div区块随光标一起移动,抬起div区块停止移动

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

        div {
            background: skyblue;
            width: 100px;
            height: 100px;
            position: relative;
            /* margin: 100px ; */
        }
    </style>
</head>

<body>
    <div>
    </div>
    <script>
        var divEle = document.querySelector('div')
        //在小盒子上鼠标按下左键
        divEle.onmousedown = function () {
            // console.log(e)
            
            //鼠标移入---->获取的是移入文档的位置哦//事件源是文档
            document.onmousemove=function(e){
                e =e || window.event
                //clientX是基于窗口的
                var x = e.clientX-divEle.offsetWidth/2
                var y = e.clientY-divEle.offsetHeight/2
                console.log(x,y)
                divEle.style.top = y + 'px'
                divEle.style.left = x + 'px'
            }
        }

        // 鼠标松开左键
        document.onmouseup=function(){
            document.onmousemove=null
            // console.log(e)
        }
    </script>
</body>

</html>

        3.键盘事件

                keyup:键盘抬起事件

                keydown:键盘按下事件

                keypress:键盘按下再抬起事件--按住

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>键盘事件</title>
    <!-- 
        键盘事件
          keyup    抬起
          keydown  按下
          keypress 按住 

        键码 keycode
        兼容性
        组合键盘才发生
        altKey  + 
        shiftKey + 
        ctrlKey + 
     -->
</head>
<body>
    <h2>键盘事件</h2>
    <script>
        document.onkeyup = function(e){
            e = e || window.event  // 兼容ie
            var keyCode = e.keyCode || e.which  // 兼容FireFox2.0
            if(e.ctrlKey && keyCode === 32){
                alert('登录成功')
            }
        }
    </script>
</body>
</html>

        4.表单事件

                submit:表单提交事件

                input:表单内容输入事件

                change:表单内容改变事件

<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="UTF-8" />
		<meta http-equiv="X-UA-Compatible" content="IE=edge" />
		<meta name="viewport" content="width=device-width, initial-scale=1.0" />
		<title>表单事件</title>
		<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>
		<!-- 
        表单事件
           表单提交事件
             submit

            表单提交事件 - 默认行为
            1. 触发表单提交事件
                submit  是表单form元素
                作用:
                    表单验证
                       - 非空验证
                           表单输入框内容不能为空

            2. 默认行为
               执行action属性指定的url地址跳转,同时获取表单输入框内容以名称值对形式做为参数传递
                https://www.xxx.com/?username=admin&password=123

               阻止表单默认行为
                 e.preventDefault()
            
            
     -->
	</head>
	<body>
		<form action="">
			<input type="text" placeholder="请输入用户名" name="username" /><br />
			<input type="password" placeholder="请输入密码" name="password" /><br />
			<input type="submit" value="确定" id="login" />
		</form>

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

			//表单form提交事件
			formEle.onsubmit = function (e) {
				e = e || window.event // 事件对象
				e.preventDefault() // 阻止表单form默认行为
				//表单非空验证
				var username = usernameInput.value
				var password = passwordInput.value
				if (username === '') {
					alert('用户名不能为空!')
                    return 
				} else if (password === '') {
					alert('密码不能为空!')
                    return 
				}
                // 用户名密码验证
                if(username == 'admin' && password == '123'){
                    // 表单验证通过 跳转到主界面
                    location.href = './index.html'
                }else{
                    alert('用户名或密码出错!')
                }

			}
		</script>
	</body>
</html>

        5.触摸事件

                touchstart:触摸开始事件

                touchmove:触摸移动事件

                touchend:触摸结束事件

5.事件的绑定方式

        1.事件属性:

        把事件写在标签的属性里面

<input type="button" οnclick='alterMessage' value='' name='pwd'>

               优点:不用解决兼容性问题,几乎所有浏览器都支持

                缺点:夹杂在HTML代码中,代码不简洁,这种事件写法效率不高,不符合行为、样式、结构相分离

         2.事件绑定

        oDivEle.οnclick=function(){

        }

               优点:符合“行为、样式、结构”相分离,便于操作当事对象,方便读取事件对象

                缺点:只能给一个元素注册一个事件,绑定一个事件,后一个会覆盖前一个

        3.事件监听

                非IE7 8下使用

                        元素.addEventListener('事件类型',事件处理函数,冒泡还是捕获)

                --》如果有两个addEventListener函数会按照顺序执行 注意:事件类型的时候不写on,点击事件就是click,不是onclick

oDiv.addEventListener(''cilck'',function(){

                },false)//false默认值,表示注册的事件在冒泡阶段触发

                IE7 8下使用

                元素.attachEvent('事件类型',事件处理函数)

                --->当有两个相同的函数时,会按照注册的顺序倒序执行,注意:事件类型的时候要写on,点击事件onclick

oDiv.attachEvent('onclick',function(){

        })

   6.默认行为

       概念:

         就是不用我们注册,它自己就存在的事情,比如点击鼠标右键就会自动弹出一个菜单,地址的跳转

        阻止默认行为的两种方法:

                1.e.preventDefaulu()        非IE使用

                2.e.returnValue=false  IE使用

                兼容性写法

        a.submit=function(e){

        e=e || window.event

        e.preventDefault ? e.preventDefault : e.returnValue=false

        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值