【JavaScript-事件】target和this的区别?如何阻止冒泡事件?常见的鼠标事件和键盘事件有哪些?

简介: 【JavaScript-事件】target和this的区别?如何阻止冒泡事件?常见的鼠标事件和键盘事件有哪些?

前言


在我们进行target和this的使用中如何区分this的指向问题呢?


怎么才能阻止冒泡事件?


在js中常用的鼠标事件和键盘事件,在实开发中会遇到很多的地方需要用到这些比如mousemove,keydown等,本篇就来了解一下这些吧!


1.e.target与this的区别


简单来说就是this指向的是绑定事件的元素,e.target返回的是所触发事件的元素

<script>
        // e.target返回的是触发事件的对象(元素)     this返回的是绑定事件的对象(元素)
        var div = document.querySelector('div');
        div.addEventListener('click', function (e) {
            console.log(e.target);
            console.log(this);
        })
        var ul = document.querySelector('ul');
        ul.addEventListener('click', function (e) {
            // e. target 指向我们点击的那个对象谁触发了这个事件我们点击的是li e. target 指向的就是1i
            console.log(e.target);
            // 绑定ul,那么this指向的就是我们所绑定的ul
            console.log(this);
        })
    </script>


2.阻止默认行为


<body>
    <div>666</div>
    <a href="https://www.baidu.com/">666</a>
    <form action="https://www.baidu.com/">
        <input type="submit" value="提交" name="sub">
    </form>
    <script>
        var div = document.querySelector('div');
        div.addEventListener('click', fn);
        div.addEventListener('mouseover', fn);
        div.addEventListener('mouseout', fn);
        function fn(e) {
            console.log(e.type);
        }
        // e.preventDefault()该方法阻止默认事件(默认行为)标准比如不让链接跳转
        var a = document.querySelector('a');
        a.addEventListener('click', function (e) {
            e.preventDefault();
        })
        // 利用return也能进行一个阻止默认事件 特点return后面的代码不执行 只能用于传统的方式哦
        a.onclick = function (e) {
            return false;
        }
    </script>


注意:return false;只能用在传统的方法上,并且它后面的代码不执行


3.阻止冒泡事件*


为什么要阻止冒泡事件?


事件冒泡:开始时由最具体的元素接收,然后逐级向上传播到到DOM最顶层节点。


事件冒泡本身的特性,会带来的部分坏处需要我们灵活使用。


标准写法:利用事件对象里面的stopPropagation()方法

<body>
    <div class="father">
        <div class="son"></div>
    </div>
    <script>
            var son = document.querySelector('.son');
            son.addEventListener('click', function (e) {
                alert('son');
                e.stopPropagation();
            }, false);
            var father = document.querySelector('.father');
            father.addEventListener('click', function () {
                alert('father')
            }, false);
        </script>
</body>


4.事件委托


原理:不给每个子节点单独设置事件监听器,而是事件监听器设置在其父节点上,然后利用冒泡原理影响设置每个子节点。

<body>
    <ul>
        <li>小li小li,漂亮的lili</li>
        <li>小li小li,漂亮的lili</li>
        <li>小li小li,漂亮的lili</li>
        <li>小li小li,漂亮的lili</li>
        <li>小li小li,漂亮的lili</li>
    </ul>
    <script>
        // 事件委托的核心原理:给父节点添加侦听器,利用事件冒泡影响每一个子节点
        var ul = document.querySelector('ul');
        ul.addEventListener('click', function (e) {
            e.target.style.backgroundColor = 'chartreuse';
        })
    </script>
</body>


5.鼠标点击事件


5.1鼠标事件禁止页面文本复制

contextmenu主要控制应该何时显示上下文菜单,主要用于程序员取消默认的上下文菜单


禁止选中文字selectstart

<body>
    我的地盘我做主!
    <script>
        // 1. contextmenu 我们可以禁用右键菜单
        document.addEventListener('contextmenu', function (e) {
            e.preventDefault();
        })
        // 2.禁止选中文字selectstart
        document.addEventListener('selectstart', function (e) {
            e.preventDefault();
        })
    </script>
</body>

5.2鼠标点击获取坐标

<body>
    <script>
        document.addEventListener('click', function (e) {
            // client返回鼠标相对于浏览器窗口可视区的坐标
            console.log(e.clientX);
            console.log(e.clientY);
            // page返回鼠标相对于文档页面的坐标
            console.log(e.pageX);
            console.log(e.pageY);
            // screen返回鼠标相对于电脑屏幕的X坐标
            console.log(e.screenX);
            console.log(e.screenY);
        })
    </script>
</body>


5.3鼠标跟随事件

注:不要忘记给img一个绝对定位哦

<style>
        img {
            position: absolute;
            top: 20px;
            width: 80px;
            height: 80px;
        }
    </style>
</head>
<body>
    <img src="./img/shanyu.jpg" alt="">
    <script>
        var pic = document.querySelector('img');
        document.addEventListener('mousemove', function (e) {
            // 1.mousemove只要鼠标移动1px就会触发这个事件
            var x = e.pageX;
            var y = e.pageY;
            pic.style.left = x - 30 + 'px';
            pic.style.top = y - 30 + 'px';
        })
    </script>
</body>



6.键盘事件


使用addEventListener不需要加on



<body>
    <script>
        // 这三个的执行顺序为down press up
        document.addEventListener('keyup', function () {
            console.log('弹起来!');
        })
        //2. keydown 按键按下的时候触发不识别功能键比如ctrl shift 左右箭头啊
        document.addEventListener('keydow', function () {
            console.log('把down按下去!');
        })
        //2. keypress 按键按下的时候触发不识别功能键比如ctrl shift 左右箭头啊
        document.addEventListener('keyup', function () {
            console.log('把press按下去!');
        })
    </script>
</body>
目录
相关文章
|
12天前
|
前端开发 JavaScript 数据处理
在JavaScript中,异步函数是指那些不会立即执行完毕,而是会在未来的某个时间点(比如某个操作完成后,或者某个事件触发后)才完成其执行的函数
【6月更文挑战第15天】JavaScript中的异步函数用于处理非同步任务,如网络请求或定时操作。它们使用回调、Promise或async/await。
22 7
|
8天前
|
JSON JavaScript 前端开发
【JavaScript】JavaScript中的深拷贝与浅拷贝详解:基础概念与区别
JavaScript 中,理解数据拷贝的深浅至关重要。浅拷贝(如扩展运算符`...`、`Object.assign()`)仅复制对象第一层,共享内部引用,导致修改时产生意外联动。深拷贝(如自定义递归函数、`_.cloneDeep`或`JSON.parse(JSON.stringify())`)创建独立副本,确保数据隔离。选择哪种取决于性能、数据独立性和资源需求。深拷贝虽慢,但确保安全;浅拷贝快,但需小心引用共享。在面试中,理解这些概念及其应用场景是关键。
15 4
【JavaScript】JavaScript中的深拷贝与浅拷贝详解:基础概念与区别
|
10天前
|
数据采集 JavaScript 前端开发
理解并应用:JavaScript响应式编程与事件驱动编程的差异
了解JavaScript的响应式编程与事件驱动编程至关重要。事件驱动编程基于事件触发函数执行,如用户交互或系统事件。响应式编程则关注数据流变化,利用Observables自动响应更新。在爬虫代理IP的Web Scraping示例中,两者分别通过axios和rxjs显示了数据抓取的不同处理方式。掌握这两者能提升异步操作的效率和代码质量。
理解并应用:JavaScript响应式编程与事件驱动编程的差异
|
1天前
|
JavaScript 前端开发
JavaScript 中的三种事件模型
JavaScript 中的事件模型主要有三种: 传统事件模型(DOM Level 0) 标准事件模型(DOM Level 2) IE 事件模型(非标准,仅限于旧版本的 Internet Explorer)
8 1
|
4天前
|
XML 前端开发 JavaScript
HTML、CSS、JavaScript有什么区别
HTML、CSS、JavaScript有什么区别
|
8天前
|
JavaScript
Vue.js中使用.self修饰符来限制事件处理程序的作用域
Vue.js中使用.self修饰符来限制事件处理程序的作用域
|
6天前
|
JavaScript 前端开发 异构计算
JS中重排和重绘的区别是什么?
JS中重排和重绘的区别是什么?
13 1
|
6天前
|
JavaScript 前端开发
第八篇-Javascript 事件
第八篇-Javascript 事件
14 1
|
7天前
|
JavaScript 前端开发
杨老师课堂之JavaScript悬浮事件(鼠标移入移出事件)
杨老师课堂之JavaScript悬浮事件(鼠标移入移出事件)
14 1
|
9天前
|
JavaScript 前端开发 API
ECMAScript vs JavaScript: 理解两者间的联系与区别
ECMAScript vs JavaScript: 理解两者间的联系与区别