13. jQuery事件及其操作

一、事件介绍

1、什么是事件?

//事件就是鼠标点击click、页面滚动onscroll、鼠标悬停mouseover等元素的操作等称之为事件,对HTML元素产生的事件可以被绑上具体的操作,称之为事件绑定,比如在点击某一个元素时,触发某个一个功能的执行

2、什么是事件流?

由于html是一个树形嵌套结构,如下:

html
    |
    |___body
             |
             |___div.box1
                        |
                        |____div.box2
以点击事件为例,当我们点击div.box2时,由于div.box2在div.box1里,所以我们同时也在点击div.box1,同理,我们同时也在点击body、同时也在点击html

如果我们为div.box2、div.box1、body、html同时绑定点击事件,那在点击div.box2时,该元素他爹、爷爷、祖爷爷...的点击事件都会触发,具体是谁先触发,按照何种顺序,我们必须了解一下js的事件流

//事件流描述的是从页面中接收事件的顺序,js事件流分为三个阶段:
① 事件捕获阶段;
② 处于目标阶段;
③ 事件冒泡阶段
// 强调:jQuery只有②、③ 两个阶段

以点击事件为例作出比喻:
整个屏幕相当于一片草地,点击一下屏幕中的某个位置,相当于在屏幕中埋了一颗地雷
事件捕获就是扫雷的过程:从外向里扫雷
处于目标阶段就是找到了雷,然后嘣的一声,雷爆炸了
事件冒泡阶段就是雷爆炸了向外产生的冲击波:从内向外扩散,以雷为中心方圆几十里地都给丫的炸死

可以通过向文档或者文档中的元素添加“事件侦听器”(addEventListener)来验证上述流程,

addEventListener这个方法接收3个参数:要处理的事件名、事件触发时执行的函数、一个布尔值。

布尔值参数如果是true,表示在捕获阶段执行函数;如果是false,表示在冒泡阶段执行函数

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>事件流</title>
    <script>

        window.onload = function () {

            // 1、事件捕获阶段:

            document.addEventListener('click', function () { 
                // document代表的是整个html页面;
                console.log('document处于事件捕获阶段');
            }, true);

            document.documentElement.addEventListener('click', function () { 
                // document.documentElement代表的是<html>标签;
                console.log('html处于事件捕获阶段');
            }, true);

            document.body.addEventListener('click', function () { 
                // document.body代表的是<body>标签;
                console.log('body处于事件捕获阶段');
            }, true);


            var oBtn = document.getElementById('btn');
            oBtn.addEventListener('click', function () { // btn标签
                console.log('btn处于事件捕获阶段');
            }, true);


            // 2、处于目标阶段


            // 3、事件冒泡阶段
            document.addEventListener('click', function () { 
                // document代表的是整个html页面;
                console.log('document处于事件冒泡阶段');
            }, false);

            document.documentElement.addEventListener('click', function () { 
                // document.documentElement代表的是<html>标签;
                console.log('html处于事件冒泡阶段');
            }, false);

            document.body.addEventListener('click', function () { 
                // document.body代表的是<body>标签;
                console.log('body处于事件冒泡阶段');
            }, false);

            oBtn.addEventListener('click', function () { // btn
                console.log('btn处于事件冒泡阶段');
            }, false);
        };

    </script>
</head>
<body>
<!--
href="javascript:;"代表阻止默认事件
-->
<a href="javascript:;" id="btn">按钮</a>
</body>
</html>

当我们点击这个btn时,页面输出结果:

img

总结事件捕获与事件冒泡

//1、事件捕获指的是从document到触发事件的那个元素:自上而下地去触发事件
//2、事件冒泡指的是从触发事件的那个元素到document:自下而上地去触发事件

二、事件操作

1、常见事件

img

2、事件绑定与解除绑定的方法

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        .box1 {
            width: 500px;
            height: 500px;
            background-color: gray;
        }
    </style>
</head>
<body>
<div class="box1">
    div1
</div>
<script src="jquery-3.3.1.min.js"></script>
<script>
    // 绑定方式一:
    $('.box1').click(function () {
        alert('绑定方式一')
    });

    // 绑定方式二:
    $('.box1').bind('click', function () {
        alert('绑定方式二')
    });

    $('.box1').bind('mouseover mouseout', function () { // 绑定多个事件做同一件事
        console.log('绑定多个事件做同一件事')
    });
    $('.box1').bind({
        'mouseup': function () {
            console.log('mouseover');
        },
        'mousedown': function () {
            console.log('mouseout');
        }
    });

    // 移除事件,unbind没有参数则代表移除所有事件
    setTimeout(function () {
        alert('3s啦。。。mouseover失效');
        $('.box1').unbind('mouseover');
    }, 3000);

    setTimeout(function () {
        alert('10s啦。。。所有事件移除');
        $('.box1').unbind();
    }, 10000)
</script>
</body>
</html>

3、事件对象

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }

        .box1 {
            width: 500px;
            height: 500px;
            background-color: gray;
        }
        .box2 {
            width: 200px;
            height: 200px;
            background-color: red;
        }
    </style>
</head>
<body>
<div class="box1">
    div1
    <div class="box2">div2</div>
</div>
<script src="jquery-3.3.1.min.js"></script>
<script>

    // this和event.target
    // 相同之处:
    //     1、this和event.target都是js dom对象
    // 不同之处:
    //     1、js中事件是会冒泡的,所以this是会变化的,但event.target不会变化,它永远是直接接受事件的目标js DOM元素,这一点区别将在后续的事件委托的知识点中体现;
    $('.box2').bind('click',function (event) {
        console.log(event.type); // event.type事件的类型为:click
        console.log(event.target); // event.target指的是点击的那个元素
        console.log(event.pageX); // 点击事件/点击位置相对于窗口的X轴位置
        console.log(event.pageY);
    })
    
    // 常用的事件方法:1 阻止事件冒泡 2.阻止默认事件
    // ev.preventDefault() 阻止默认事件
    // ev.stopPropagation()阻止事件冒泡

    // return false 既阻止默认事件又阻止事件冒泡

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

4、事件冒泡的应用之事件委托

添加的事件不能用于将来去动,例如之前我们早做表格的增删改时,每新增一行内容都需要重新绑定事件,基于事件委托可以解决问题
事件委托是通过事件冒泡的原理,利用父子标签去捕获子标签的事件
# 语法:
$('某个范围').on('事件名称','标签名',function () {
    ...  //触发的事件代码
})

# 示例:
$(body).on('click','botton',function () {
    alert(123)  //在指定的范围内 将事件委托给某个标签,无论该标签是事先写好的还是后面动态创建的
})
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        ul>li{
            list-style: none;
            width: 600px;
            height: 50px;
            border: 1px solid black;

        }
    </style>
</head>
<body>
<ul>
    <li>aaaa</li>
    <li>bbb</li>
    <li>ccc</li>
    <li>ddd</li>
    <li>eeee</li>
</ul>

<button id="btn">点击新增</button>

<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.js"></script>
<script>
    /* 在新增的li标签中绑定鼠标悬浮的事件,但是代码冗余且效率过低,不推荐使用
    $("#btn").click(function () {
        var li=document.createElement("li")
        li.innerText="666"
        $(li).appendTo($("ul"))

        $("li").mouseover(function () {
        // console.log(this.innerText)
        $(this).css('background-color',"red").siblings().css('background-color',"white")
    })
    })

    // 推荐使用
     $("li").mouseover(function () {
        // console.log(this.innerText)
        $(this).css('background-color',"red").siblings().css('background-color',"white")
    })
     */

    $("ul").on("mouseover","li",function () {
        // console.log(this.innerText)  
        //将ul内所有的鼠标悬浮事件委托给li标签去触发
        //此时的this就是有鼠标悬浮的li标签,本质上事件是作用在ul标签上,但是通过on真正作用到了li上
        $(this).css('background-color',"red").siblings().css('background-color',"white")
    })

    $("#btn").click(function () {
        var li=document.createElement("li")
        li.innerText="666"
        $(li).appendTo($("ul"))
    })
</script>
</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: jquery.min.js 是一个JavaScript库,用于简化操作DOM(文档对象模型)和处理事件的过程。它是基于JavaScript语言开发的,提供了丰富的功能和方法,使得开发者能够更加轻松地操作网页元素。 使用jquery.min.js 库可以使开发人员更高效地编写JavaScript代码。它提供了一些常用的DOM操作方法,如选择元素、修改元素属性、添加或移除元素等。通过简单的函数调用,开发人员可以直接对页面中的元素进行操作,而无需手动编写冗长的JavaScript代码。这大大提高了开发效率。 除了常用的DOM操作方法,jquery.min.js 还提供了更高级的功能。例如,它可以处理常见的事件,如点击、悬停、滚动等,使开发人员可以轻松地为网页添加交互效果。此外,jquery.min.js 还提供了动画效果、AJAX请求和表单验证等功能,方便开发人员开发更加复杂和交互性强的网页。 另一个 jquery.min.js 的优点是它的兼容性。无论是在各种现代主流浏览器还是移动设备上,jquery.min.js 都能良好运行。这使得开发人员无需为不同浏览器或设备进行特定的适配工作,从而节省了时间和精力。 总的来说,jquery.min.js 库是一个强大且广泛使用的JavaScript库,它简化了DOM操作事件处理的过程,并提供了丰富的功能和兼容性。它被广泛应用于Web开发中,无论是构建简单的静态页面还是复杂的网页应用程序,都能为开发人员提供便捷和高效的开发体验。 ### 回答2: jquery.min.js是一个开源的JavaScript库,主要用于简化JavaScript编写和处理HTML文档的过程。它提供了丰富的方法和功能,使得JavaScript代码更加简洁、易读和易维护。 使用jquery.min.js可以实现一些常见的操作,如查找和选择HTML元素、修改元素的属性和样式、处理用户的事件、发送Ajax请求等等。它还提供了许多实用的辅助函数和插件,可以加快开发速度,并且具有良好的跨浏览器兼容性。 这个库的体积较小,可压缩到更小的体积,所以加载速度快。它的语法非常简洁,易于学习和使用。通过查询文档,可以轻松地找到需要的函数和方法,并且有很多社区和教程提供相关的支持和帮助。 另外,由于jquery.min.js的广泛使用,网上有很多现有的插件和扩展,可以直接引入和使用,而无需重新编写代码。 总的来说,jquery.min.js是一个非常实用的JavaScript库,可以大大简化和加速JavaScript开发过程,是众多前端开发者的不可或缺的工具。但是由于现代的前端技术的发展,一些新的框架和库已经涌现出来,所以是否使用jquery.min.js还需要根据具体项目情况和个人偏好来决定。 ### 回答3: jquery.min.js 是一个流行的JavaScript库,它提供了许多方便的功能和方法,简化了编写和处理JavaScript代码的过程。它是一个轻量级的库,因此它的文件大小很小,这使得它在加载网页时非常快速。 它的主要特点和优点包括: 1. DOM 操作jquery.min.js 提供了简单和易于使用的方法来操作HTML文档,包括查找、添加、修改、移除元素及其属性和样式。 2. 事件处理:它为用户与页面元素之间的交互提供了强大且灵活的事件处理功能。它可以为按钮、表单、图像等元素添加事件处理程序,并且可以处理多种类型的事件,如点击、悬停、滚动等。 3. AJAX:该库支持AJAX(异步JavaScript和XML)请求,这使得与服务器进行交互和获取或发送数据变得非常简单。它可以异步加载数据并更新网页,而无需刷新整个页面。 4. 动画效果:jquery.min.js 提供了各种动画效果和过渡效果,使得网页元素的外观更生动和吸引人。它可以轻松地实现淡入淡出、滑动、展开、收起等效果,提高用户体验。 5. 插件支持:由于jquery.min.js 是一种开源库,因此有许多第三方开发者创建了各种插件来扩展其功能。这使得开发人员可以根据需求选择和使用各种插件来增强其项目的功能和性能。 总而言之,jquery.min.js 是一种非常强大和灵活的JavaScript库,可以让开发人员更轻松地编写和处理复杂的JavaScript代码。它的广泛应用使得它成为前端开发人员的首选之一,并且是构建跨浏览器、交互丰富的网页应用程序的理想解决方案。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值