JS(DOM-事件机制)

目录

事件三要素

执行事件的步骤

绑定事件

1、向HTML元素中添加事件

2、给HTML绑定事件(写在window.οnlοad=function(){}中)

①获取目标对象

②设置事件三要素

事件冒泡(由内而外触发事件)

1、DOM0级

2、DOM2级

阻止事件冒泡(event.stopPropagation())

阻止事件默认行为(event.preventDefault())

事件捕获(由外向内触发事件)

DOM事件流(事件冒泡和事件捕获)

DOM0级事件和DOM2级事件的区别(追加、绑定、解除)

事件代理(事件委托)

事件类型

1、鼠标滚动事件onscroll

2、焦点事件onbulr、onfocus

3、鼠标事件

4、键盘事件


事件三要素

1、事件源:触发事件的对象 ,如按钮对象

2、事件类型:如何触发?触发什么事件?如鼠标点击,键盘按下等

3、事件处理程序:函数

执行事件的步骤

1、获取事件源

2、注册事件(绑定事件)

3、采用函数赋值形式添加事件处理程序

绑定事件

1、向HTML元素中添加事件

1)οnclick='alert(1)'

2)οnclick='test()'

        function test(){ //不能写在window.οnlοad=function(){}中,否则会找不到test()函数

                alert(1);

        }

2、给HTML绑定事件(写在window.οnlοad=function(){}中)

①获取目标对象

var div=document.getElementsByTagName('div')[0];

var btn=document.getElementById('btn');

②设置事件三要素

事件冒泡(由内而外触发事件)

在点击页面中的id为inner的div元素,click事件会以如下顺序发生

div#inner---div#center---div#outer---body---html---document

点击inner,依次执行inner---center---outer

点击center,依次执行center---outer

点击outer,只执行outer

1、DOM0级

 

2、DOM2级

阻止事件冒泡(event.stopPropagation())

阻止事件默认行为(event.preventDefault())

var btn=document.getElementsByTagName('button')[0];

var a=document.getElementsByTagName('a')[0];

btn.οnclick=function(event){

        event.preventDefault();  //点击按钮,不再提交到action

}

a.οnclick=function(event){

        event.preventDefault();  //点击超链接,不再跳转到href

}

事件捕获(由外向内触发事件)

点击inner,依次执行outer---center---inner

点击center,依次执行outer---center

点击outer,只执行outer

DOM事件流(事件冒泡和事件捕获)

JS事件流:描述的事件在页面中的接收顺序

事件冒泡:最具体的节点第一个接收到事件,最不具体的节点最后一个接收到事件

inner<center<outer<body<html<document 从内向外触发事件

事件捕获:最具体的节点最后一个接收到事件,最不具体的节点第一个接收到事件

document>html>body>outer>center>inner 从外向内触发事件

DOM0级事件和DOM2级事件的区别(追加、绑定、解除)

1、获取按钮

var btn=document.getElementById('btn');

2、DOM0级事件--不可追加事件

绑定:事件源.事件类型=事件处理程序

解绑:事件源.事件类型=null;

 3、DOM2级事件--可追加事件

追加:addEventListener(事件类型,事件处理程序,布尔值)

        true--在捕获阶段执行,false--在冒泡阶段执行

解绑:removeEventListener(事件类型,事件处理程序(具名函数))

事件代理(事件委托)

将本应该添加给子元素的事件添加给父元素

事件委托就是当事件触发时,把要做的事委托给父元素(或父元素的父元素)来处理,也就是:利用冒泡的原理,把事件加到父级上,通过判断事件来源的子集,执行相应的操作。使用事件委托技术能让你避免对特定的每个节点添加事件监听器。

1、获取元素节点

var list = document.getElementById('list');  //父

var one = document.getElementById('one');  //子1

var two = document.getElementById('two');  //子2

var three = document.getElementById('three');  //子3

2、事件代理、事件委托

 事件类型

1、鼠标滚动事件onscroll

<div id="d1" style="width: 100px;height: 100px;border: 1px solid; overflow: auto;">我是div标签我是div标签我是div标签我是div标签我是div标签我是div标签我是div标签我是div标签我是div标签我是div标签我是div标签</div>

<script>

        var d1 = document.getElementById('d1');

        d1.onscroll = function () {

                console.log('onscroll');
        }
</script>

2、焦点事件onbulr、onfocus

blur:当元素失去焦点时触发。这个事件不冒泡,所有浏览器都支持。

focus:当元素获得焦点时触发。这个事件不冒泡,所有浏览器都支持。

<input type="text" id="inp1">   

<script>

        var inp1 = document.getElementById('inp1');

        // 失去焦点触发

        inp1.onblur = function () {

                console.log('失去焦点');

                console.log(this.value);

        }

        // 获得焦点触发

        inp1.onfocus = function () {

                console.log('获得焦点');

        }

</script>

3、鼠标事件

<div id="d1"></div>

<script>

        var d1 = document.getElementById('d1');

        // 单击事件

        d1.onclick = function (event) {

                console.log('click');

                console.log(event);

        }

        // 双击事件

        d1.ondblclick = function () {

                console.log('dblclick');

        }

        // 鼠标移入事件

        d1.onmouseenter = function () {

                console.log('mouseenter');

        }

        // 鼠标移出事件

       d1.onmouseleave = function () {

                console.log('mouseleave');

        }

        // 鼠标在元素内部移动时触发

        d1.onmousemove = function () {

                console.log('mousemove');

        }

</script>

4、键盘事件

<input type="text" id="inp1">

<script>

        var inp1 = document.getElementById('inp1');

        // 键盘按下事件

        inp1.onkeydown = function (event) {

                if (event.keyCode == 13) {  //回车键

                        console.log('确认');

                        console.log(this.value);

                }

        }

        // 持续按下键盘

        inp1.onkeypress = function (event) {

                console.log(event.keyCode);

        }

        // 放开键盘

        inp1.onkeyup = function (event) {

                console.log(event.keyCode);

        }
</script>

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`Vue.nextTick`是Vue提供的一个API,它可以让我们在DOM更新之后执行一些操作。在Vue中,当数据发生变化时,Vue会异步执行DOM更新操作。也就是说,当我们修改了Vue实例中的某个属性,Vue并不会立即去更新DOM,而是先将这个更新操作加入到一个队列中,在下一个事件循环时,Vue会清空这个队列,依序执行其中的更新操作。 由于Vue的异步更新机制,有时候我们需要在DOM更新之后执行一些操作,比如获取更新后的DOM节点的尺寸或位置等。此时,我们就可以使用`Vue.nextTick`来确保这些操作是在DOM更新后执行的。 下面是一个使用`Vue.nextTick`的例子: ```javascript new Vue({ el: '#app', data: { message: 'Hello Vue.js!' }, methods: { updateMessage: function () { this.message = 'Updated!' this.$nextTick(function () { // DOM已经更新 console.log(this.$el.textContent) // "Updated!" }) } } }) ``` 在`updateMessage`方法中,我们首先修改了`message`属性的值,然后调用了`this.$nextTick`方法,在回调函数中打印了`this.$el.textContent`。由于`this.$nextTick`方法会在DOM更新之后执行回调函数,所以打印出来的是更新后的内容。 需要注意的是,`Vue.nextTick`不是立即执行的,而是在下一个事件循环时执行的。这意味着如果我们在某个方法中多次调用`Vue.nextTick`,那么这些回调函数会被加入到同一个队列中,在下一个事件循环时一起执行。这个特性可以帮助我们避免不必要的DOM操作,从而提高性能。 总的来说,`Vue.nextTick`可以帮助我们更好地掌控Vue的异步更新机制,避免出现一些奇怪的bug。同时,它也为我们提供了一个优化性能的机会,让我们能够更好地利用Vue的异步更新机制

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值