EVENT 事件

一、EVENT  事件

1、什么是事件?

- 一个事件由什么东西组成

  - 触发谁的事件:事件源       某个标签

  - 触发什么事件:事件类型     onclick   点击

  - 触发以后做什么:事件处理函数   写一个函数 执行这个操作

2、事件对象

- 就是你触发了一个事件(点击  双击  拖拽),对该事件的一些描述信息  比如在浏览器的位置  或者点击键盘或者那个按钮   -----对你的触发的事件进行精确描述的

-- 浏览器给了我们一个 **黑盒子**,叫做 `window.event`,就是对事件信息的所有描述

 3、**兼容性问题**

- 在 `IE低版本` 里面这个东西好用,但是在 `高版本IE` 和 `Chrome` 里面不好使了 

 ```javascript

  oDiv.onclick = function (e) {

    e = e || window.event            e为高版本    window.event低版本

    console.log(e.X轴坐标点信息)

    console.log(e.Y轴坐标点信息)

  }

  ```

4、点击事件的光标坐标点获取

- 例如:

  - 相对事件源(你点击的元素)

  - 相对页面

  - 相对浏览器窗口

①相对于你点击的元素

- `offsetX` 和 `offsetY`

- 是相对于你点击的元素的边框内侧开始计算 (就是你的内容区 0,0)

②相对于浏览器窗口你点击的坐标点

- `clientX` 和 `clientY`

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

③相对于页面你点击的坐标点

- `pageX` 和 `pageY`

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

** 注意 **

-offsetWidth:自身宽度+内边距+boderWidth      元素.offsetWidth    该盒子的大小

- clientWidth:自身宽度+内边距       内容+内边距

offsetLeft:

1.没有定位:相对于页面的偏移量      就是外边距的距离

2.有定位:相对于父级的偏移量    相对定位于父盒子的的距离

clientLeft:border-left:边框的宽度

###浏览器事件

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

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

- `resize`   事件会在窗口或框架被调整大小时发生。

### 鼠标事件

- `click` :点击事件

- `dblclick` :双击事件

- `contextmenu` : 右键单击事件

- `mousedown` :鼠标左键按下事件

- `mouseup` :鼠标左键抬起事件

- `mousemove` :鼠标移动

- `mouseover` :鼠标移入事件

- `mouseout` :鼠标移出事件

- `mouseenter` :鼠标移入事件

- `mouseleave` :鼠标移出事件

### 键盘事件

- `keyup` : 键盘抬起事件 

- `keydown` : 键盘按下事件

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

- 判断键盘的按键

        // keycode 在最新浏览器标准中废弃了,虽然废弃但是还可以使用

var keycode = event.keyCode || event.which;   // 火狐2.0 需要用event.which来获取keycode

### 组合按键

- 组合案件最主要的就是 `alt` / `shift` / `ctrl` 三个按键

 - `altKey` :alt 键按下得到 true,否则得到 false

  - `shiftKey` :shift 键按下得到 true,否则得到 false

  - `ctrlKey` :ctrl 键按下得到 true,否则得到 false

### 表单事件

- `change` : 表单内容改变事件,失去焦点,并且内容改变的时候触发;

- `input` : 表单内容输入事件

- `focus`聚焦的时候触发事件  focus:福克斯 焦点

- `blur` 失去焦点的时候

### 触摸事件

- `touchstart` : 触摸开始事件

- `touchend` : 触摸结束事件

- `touchmove` : 触摸移动事件

- `transitionend` :过度结束触发   一个属性的变化

- `onanimationend` :动画结束

# 事件的绑定方式

- 我们现在给一个注册事件都是使用 `onxxx` 的方式

 - 但是这个方式不是很好,只能给一个元素注册一个事件

### 事件监听

- `addEventListener` :  非 IE 7 8 下使用

- 语法: `元素.addEventListener('事件类型', 事件处理函数, 冒泡还是捕获)`  默认值是false(冒泡) true(捕获)

冒泡的就是从内到外    捕获就是从外到内

①、 阻止事件冒泡

// // stopPropagation :停止传播;

// // cancelBubble= true;阻止冒泡

### 阻止默认行为

 - `e.preventDefault()` : 非 IE 使用

  - `e.returnValue = false` :IE 使用

        // boxEle.onclick = function(e){

        //     // 方式一:

        //     // e.stopPropagation();

        //     // 方式二

        //     e.cancelBubble = true;

        //     this.style.background = "black";

        // }

②触发目标e.target 如果是ie8或者以下;e.srcElement

        //    var ulEle =  document.querySelector("ul");

        //    ulEle.addEventListener("click",function(e){

        //         console.log(e.target);

        //    })

        bindEvent(ulEle,"click",function(event){

            var e = event || window.event;

            var target = e.target || e.srcElement;

            console.log(target);

        })

function bindEvent(ele, eventName, fn) {

            // 判断浏览器是否支持 addEventListener方法

            if (window.addEventListener) {

                // 有addEventListener 是chrome浏览器

                ele.addEventListener(eventName, fn);

            } else {

                // ie8或者以下;

                ele.attachEvent("on" + eventName, fn);

            }

        }

- 当你点击 div 的时候,两个函数都会执行,并且会按照你注册的顺序执行

  - 先打印 `我是第一个事件` 再打印 `我是第二个事件`

  - 注意: **事件类型的时候不要写 on,点击事件就是 click,不是 onclick**

- `attachEvent` :IE 7 8 下使用

- 语法: `元素.attachEvent('事件类型', 事件处理函数)`

  - 当你点击 div 的时候,两个函数都会执行,并且会按照你注册的顺序倒叙执行

  - 先打印 `我是第二个事件` 再打印 `我是第一个事件`

  - 注意: **事件类型的时候要写 on,点击事件就行 onclick**

****事件委托***

var ulEle =  document.querySelector("ul");

        ulEle.onclick = function(e){                    、、target = e.target || e.srcElement;

            if(e.target.nodeName=="LI"){

                console.log("点击了li");

            }

        }

获取ul节点的,然后再ul中找到节点name为li的节点

        var btn = document.querySelector("button");

        btn.onclick = function(){

            var liEle = document.createElement("li");

            liEle.innerHTML = "添加的li";

            ulEle.appendChild(liEle);

        }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
基于event事件触发控制是一种常见的编程方法,它允许我们在特定的事件发生时执行代码或触发一些动作。在这种控制下,我们可以定义需要监听的事件,并通过设置相应的回调函数来处理这些事件事件可以是用户的操作,比如点击按钮、键盘输入等;也可以是系统的反应,比如网络请求完成、定时器触发等。在程序中,我们通过注册事件处理函数来捕获这些事件,并在事件发生时执行相应的逻辑或操作。 基于event事件触发控制的编程方式具有以下几个优点: 1. 高效灵活:通过监听事件并异步执行响应函数,可以充分利用计算资源,并提高程序的响应速度和并发能力。 2. 模块化设计:事件触发控制可以帮助我们将程序分解为更小的模块,每个模块专注于处理特定的事件,提高代码的可维护性和可扩展性。 3. 松耦合:通过事件触发控制,事件产生的模块和事件处理的模块可以解耦,降低了模块之间的依赖性,提高了代码的可测试性和重用性。 在具体实现中,我们可以使用各种编程语言或框架提供的事件机制来实现event事件触发控制。比如在JavaScript中,可以使用addEventListener函数来监听DOM事件;在Node.js中,可以使用EventEmitter对象来实现自定义事件的触发和处理。同时,许多GUI编程工具和框架也提供了强大的事件触发控制功能,用于实现用户界面的交互和响应。 总之,基于event事件触发控制是一种强大的编程方法,能够帮助我们设计和实现灵活、高效的程序。通过合理地使用事件和回调函数,我们可以充分利用事件的特性,提升程序的性能和用户体验。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

坨坨tuo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值