美文网首页
JS事件相关基础

JS事件相关基础

作者: 张正yi | 来源:发表于2018-01-26 13:27 被阅读0次

js事件:

onclick 
ondblclick 双击
onmousedown
onmousemove
onmouseout
onmouseover
onmouseup

键盘事件:

onkeydown
onkeypress 
onkeyup

JS中的事件冒泡和事件捕获:

事件冒泡、事件捕获、阻止默认事件

事件捕获阶段:事件从最上一级标签开始往下查找,直到捕获到事件目标(target)。
事件冒泡阶段:事件从事件目标(target)开始,往上冒泡直到页面的最上一级标签。

event.stopPropagation 停止传播事件
event.preventDefault:阻止默认行为

1、事件冒泡。如下代码:

<body>
  <div><input type="button" value="测试事件冒泡"/></div>
</body>
<script type="text/javascript">
        var input = document.getElementsByTagName("input")[0];
        var div = document.getElementsByTagName("div")[0];
        var body = document.getElementsByTagName("body")[0];
        input.onclick = function (e) {
            this.style.border = "5px solid red"
            alert("red")
        }
        div.onclick = function (e) {
            this.style.border = "5px solid green"
            alert("red")
        }
        body.onclick = function (e) {
            this.style.border = "5px solid yellow"
            // var e = e || window.e;
            alert("red")
        }
</script>

点击button事件,连同父元素绑定的事件一同触发。依次弹出”red“,"green","yellow"

2、阻止事件冒泡:

上面代码中我们修改input的事件代码如下:

input.onclick = function (e) {
        this.style.border = "5px solid red";
        var e = e || window.e;
        alert("red");
        e.stopPropagation();
 }

这个时候只会弹出”red“,因为阻止了事件冒泡。

3、事件捕获:从顶层元素到目标元素或者从目标元素到顶层元素,和事件冒泡是一个相反的过程。

修改代码如下:

input.addEventListener("click", function () {
            this.style.border = "5px solid red";
            alert("red")
        }, true);
        div.addEventListener("click", function () {
            this.style.border = "5px solid green";
            alert("green")
        }, true);
        body.addEventListener("click", function () {
            this.style.border = "5px solid yellow";
            alert("yellow")
        }, true)

点击button事件,这时候会依次弹出”yellow“,"green","red",如果把addEventListener方法的第三个参数改成false,则表示只在冒泡的阶段触发,弹出的依次为:”red“,"green","yellow"。

这是因为在W3C模型中,任何事件发生时,先从顶层开始进行事件捕获,直到事件触发到达了事件源元素。然后,再从事件源往上进行事件冒泡,直到到达document。
只要记住:
第三个参数若是true,则表示采用事件捕获,若是false,则表示采用事件冒泡。      
ele.addEventListener('click',fun,true)  true=捕获。false=冒泡

4、阻止默认事件

1.通过on这种方式的绑定的,使用return false;
2.addEventListener绑定的,使用e.preventDefault();
如下:

   <a href="https://www.baidu.com" id="btn">百度一下</a>
   btn.onclick = function () {
          document.body.innerHTML = "hello world";
          return false;
   }
   btn.addEventListener("click", function (e) {
    document.body.innerHTML = "hello world";
        var e = e || window.e;
        e.preventDefault();
  },false);
上面两个事件都能阻止事件向下进行(阻止页面跳转)。   

Vue相关事件基础

事件处理:
监听事件:v-on 指令监听DOM事件。
eg:<button v-on:click="aaa()">点击</button>

<!-- 阻止单击事件冒泡 -->
<a v-on:click.stop="doThis"></a>
<!-- 添加事件侦听器时使用事件捕获模式 -->
<div v-on:click.capture="doThis">...</div>

事件绑定的简写:

<a v-on:click="doSomething"></a>

<a @click="doSomething"></a>

Vue中属性的绑定的简写直接是: === 'v-bind:'
事件冒泡:

<div id="app">
      <div @click="show1()">
          <input type="button" value="按钮" @click="show()">
      </div>
 </div>

    var vm = new Vue({
        el: "#app",
        data: {},
        methods: {
            show: function () {
                alert("input click");
            },
            show1: function () {
                alert("div click");
            }
        }
    });

点击按钮会执行show,show1方法。

练习:现在需要组织事件冒泡该怎么做呢?

有两种方法:
1)修改input标签代码如下即可:

<div @click="show1()">
      <input type="button" value="按钮" @click.stop="show()"> 
</div>

此时点击按钮,就只会执行show()方法了。
2)使用event对象,具体如下:

show:function(event){
    alert("input click");    
    event.cancelBubble = true;
}, 

默认事件:
如下代码(以鼠标右键菜单事件为例):

<div id="app">
     <input type="button" value="按钮1" @contextmenu="show()">
     <input type="button" value="按钮2" @contextmenu.prevent="show1()">
</div>

按钮1右击,会出现弹窗,然后右击的默认菜单也会出现。
按钮2右击,只会出现弹窗,默认的事件会被阻止。

相关文章

  • JS事件相关基础

    js事件: 键盘事件: JS中的事件冒泡和事件捕获: 1、事件冒泡。如下代码: 点击button事件,连同父元素绑...

  • 八、H5中对音视频的设计

    html5标签 video标签的属性 audio标签的属性 音视频js相关属性 音视频js相关函数 js相关事件

  • day33-总结(css部分+js)

    css其他属性 文字相关 列表相关 背景相关 JavaScript js基础语法 js中的注释// 这是单行注释/...

  • JS相关基础

    1、输出文本: 2、修改HTML元素: 3、JavaScript 函数和事件 4、HTML DOM Documen...

  • Node.js快刀篇

    Node.js概览 - Node.js大俗话,环境的安装和开发环境布署。 Node.js基础 - 事件机制和事件环...

  • js基础-事件

    注册/移除事件的三种方式 1. on的方式 事件源.on+事件类型 = 事件处理程序 缺点:只可以注册一次同类型的...

  • JS基础-事件

    事件 用户的行为:onclick、ondblclick、onfocus、onblur、window.onload是...

  • WKWebView与JS交互

    一、JS调OC 相关方法 //添加ScriptMessage(JS事件)和处理者-(void)addScriptM...

  • Node.js 的 events 模块

    Node.js 没有浏览器的事件冒泡、事件捕获机制。 events 模块是 Node.js 基础及重要的模块, 只...

  • 学习总结目录

    javascript基础 js数据类型面向对象继承js的this指向自己实现call,apply,bindjs事件...

网友评论

      本文标题:JS事件相关基础

      本文链接:https://www.haomeiwen.com/subject/udniaxtx.html