web前端 --- js事件

news2025/2/26 13:15:32

js事件(event)

(js诞生就是基于事件驱动型编程)

(1)事件

用户通过各种行为(按键、鼠标点击、鼠标hover......)行为动作,引起相关 js 代码的执行。

事件的三元素:

  • 事件源:事件的被触发者,一般会绑定事件
  • 事件对象(event):这个对象包含了该事件相关的所有信息
  • 事件处理函数:处理事件的代码

<1> 定义事件(三种方式)

[1] DOM0模式:需html的标签onxxxx属性来配置

缺点:耦合了js和html,违背了w3c的三层分离原则;这种方式在事件处理函数中,拿不到事件对象;事件函数中的this指针指向winodw对象

ps:

test01(this)        //  绑定事件时,可以将this传递到事件函数中,事件函数需要传递这个this指针;

console.log(this)        //  而在function中的this直接指向了window对象

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script>
        function test01(node){
            alert("这里是美女,只不过你看不见")
        }
        // console.log(this);
        console.log(node);
        // node:事件源
    </script>
    <title>js事件</title>
</head>
<body>
    <button onclick="test01(this);">点击一下,你就知道</button>
    <!-- 双引号中,引入javascript代码 -->
</body>
</html>

[2] DOM2模式

主要涉及到两个方法,用于处理指定和删除事件处理程序的操作:addEventListener()removeEventListener()

  • 通过DOM对象,动态绑定事件
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>DOM2</title>
</head>
<body>
    <button id="box">美女不在这</button>
    
    <a href="#" class="msg">可以在这找找看</a>
    <a href="#" class="msg">可以在这找找看</a>

    <a href="#" class="sss">你喜欢美女吗</a>
    <a href="#" class="sss">你喜欢美女吗</a>
    <a href="#" class="sss">你喜欢美女吗</a>
    <a href="#" class="sss">你喜欢美女吗</a>
    <script>

        // DOM对象()
        let box = document.getElementById("box");

        // 通过DOM对象,动态绑定事件
        box.onclick = function (ev){
            // PS:动态绑定事件的方式,第一个参数就是事件对象
            alert("那美女在哪?")
            console.log(ev); // 事件对象
            console.log(ev.target); // 事件源
            console.log(this); // 事件源,这种事件中,this指向事件源
            console.log(`x轴坐标${ev.pageX},y轴坐标${ev.pageY}`)
            
        }

        // 用className单个绑定,需确定下标
        let msg = document.getElementsByClassName("msg");
        console.log(msg);
        msg[0].onclick = function(){
            alert("这里也没有美女。")
        }

        // 多个同时绑定,需采用循环
        let sss = document.getElementsByClassName("sss");
        for(let i = 0;i < sss.length;i++){
            sss[i].onclick = function(){
                alert(`md,我喜欢的不得了,这是我第${i + 1}个按钮`);
            }
        }
    </script>
</body>
</html>

  • 还有一种事件监听方式,绑定事件
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>绑定事件</title>
</head>
<body>

    <a href="http://www.baidu.com" id="go">百度</a>
    <button id="box">这里有个祢豆子</button>
    <script>
        let box = document.getElementById("box");
        // addEventListener:事件监听
        box.addEventListener("click",function(e){
            alert("点我干嘛");
            console.log(this);
            console.log(e.target);

            // 这个方法会取消冒泡 IE浏览器
            // e.cancelBubble();

            // 停止标签继续向上冒泡(阻止冒泡)  w3c
            // ev.stopPropagation();

        },true); // true:第三个参数true决定是否开启捕获流

        document.querySelector("#go").onclick = function(ev){

            alert("还是会去百度");
            // 阻止标签的默认行为
            ev.preventDefault();

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

[3] HTML事件处理程序

直接在HTML代码中添加事件处理程序

<input id= "btn" value= "按钮" type= "button" onclick= "showmsg();" >
  <script>
   function showmsg(){
   alert( "HTML添加事件处理" );
   }
  </script>

<2> 事件流的分类

 

冒泡流:冒泡即事件最开始由最具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上传播至最不具体的节点(文档)

捕获流:捕获即事件最早由不太具体的节点接收,而最具体的节点最后接收到事件。

(2)常见的事件

事件内容
onabort图像加载被中断
onblur元素失去焦点
onchange用户改变域内容
ondblclick鼠标双击某个对象
onerror当加载文档或图像时发生某个错误
onfocus元素获得焦点
onkeydown某个键盘的键被按下
onkeypress某个键盘的键被按下或按住
onkeyup某个键盘的键被松开
onload某个页面或图像完成加载
onmousedown某个鼠标按键被按下
onmousemove鼠标被移动
onmouseout鼠标从某元素被移开
onmouseover鼠标被移到某元素之上
onmouseup某个鼠标按键被松开
onreset重置按钮被点击
onresize窗口或框架被调整尺寸
onselect文本被选定
onsubmit提交按钮被点击
onunload用户退出页面

(3)代码示例:

例1:抽奖

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <style >
        * {
            margin: 0;
            padding: 0;
        }
        .container {
            width: 800px;
            height: 800px;
            border: 1px dashed rebeccapurple;
            position: absolute;
            left: 50%;
            margin-left: -400px;
            text-align: center;
            line-height: 100px;
        }
        .container .box, .box2 {
            width: 300px;
            height: 300px;
            background: greenyellow;
            border-radius: 50%;
            margin: auto;
            margin-top: 50px;
            text-align: center;
            line-height: 300px;
        }
        .box2 {
            background: deepskyblue;
        }
        #show {
            font-size: 30px;
            color: white;
            font-weight: bold;
        }
        #start {
            width: 300px;
            height: 50px;
            background: palegreen;
        }
    </style>
    <title>抽奖</title>
</head>
<body>
    <div class="container">
        <div class="box" id="box">
            <span id="show">
                小礼品
            </span>
        </div>
        <button id="start" onclick="start()">点击开始</button>
    </div>

    <script>
        let start = document.querySelector("#start");
        let show = document.querySelector("#show");
        let timer = null;
        let box = document.querySelector("#box");
        let isStop = false;
        let nums = ["iphone14","100w","1000w","杯子","大花棉袄","充电宝","欠我五元","谢谢惠顾"];

        start.onclick = function(){
            if(!isStop){
                isStop = true;
                timer = setInterval(function(){
                let index = Math.floor(Math.random()*nums.length);
                show.innerHTML = nums[index];
                box.className = "box2";
                start.textContent = "停止抽奖";
            },100);
            } else{
                isStop = false;
                window.clearInterval(timer);
                box.className = "box";
                start.textContent = "开始抽奖";

            }

        }
    </script>

</body>
</html>

例2:div的拖动

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <style>
        .box{
            width: 150px;
            height: 150px;
            border: 1px dashed rosybrown;
            position: absolute; /* 进行绝对定位 */
            left: 300px;
            top: 200px;

        }
    </style>
    <title>div的拖动</title>
</head>
<body>
    <div class="box"></div>

    <script>
        let _box = document.querySelector(".box");
        _box.onmousedown = function(e){
            let x = e.pageX-_box.offsetLeft;
            let y = e.pageY-_box.offsetTop;

            document.onmousemove = function(ev){
                let x2 = ev.pageX - x;
                let y2 = ev.pageY - y;

                _box.style.left = x2 + "px";
                _box.style.top = y2 + "px";

            }
        }
        _box.onmouseup = function(){
            document.onmousemove = null;
        }
    </script>
</body>
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/618795.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

多篇论文入选ICASSP 2023 火山语音有效解决多类实践问题

近日由IEEE主办、被誉为世界范围内最大规模、也是最全面的信号处理及其应用方面的顶级学术会议ICASSP2023于希腊召开&#xff0c;该会议具有权威、广泛的学界以及工业界影响力&#xff0c;备受AI领域多方关注。会上火山语音多篇论文被接收并发表&#xff0c;内容涵盖众多前沿领…

springboot+vue+java企业车间工位管理系统

。本文介绍了企业级工位管理系统的开发全过程。通过分析企业级工位管理系统管理的不足&#xff0c;创建了一个计算机管理企业级工位管理系统的方案。文章介绍了企业级工位管理系统的系统分析部分&#xff0c;包括可行性分析等&#xff0c;系统设计部分主要介绍了系统功能设计和…

Vue.js 中的过滤器和计算属性

Vue.js 中的过滤器和计算属性 Vue.js 是一款流行的 JavaScript 框架&#xff0c;它提供了一种简单而灵活的方式来构建交互式 Web 应用程序。在 Vue.js 中&#xff0c;过滤器和计算属性是两个常用的概念。它们可以帮助开发者更方便地处理数据&#xff0c;提高代码的可读性和可维…

【学习日记】操作系统-入门知识-个人学习记录

我的学习笔记链接&#xff1a; MyLinuxProgramming 参考资料 CSAPP操作系统导论OSTEP √APUEhttps://stevens.netmeister.org/631软件调试王道-操作系统操作系统真象还原小林coding-图解系统https://xiaolincoding.com嵌入式软件开发笔试面试指南Linux是怎样工作的2020 南京大…

怎么才能成为一名合法的无线电爱好者?

要想成为一名合法的无线电爱好者&#xff0c;就必须要拥有属于自己的呼号及操作证书。那么具体怎么才能获得这些呢&#xff1f;下面河南宝蓝小编就为大家详细介绍下。 车载电台 一、无线电的呼号是什么&#xff1f; 呼号&#xff0c;是从事无线电操作人员或电台&#xff0c;在…

第12章 并 发

多进程与多线程本质的区别&#xff1a;每个进程都拥有自己的一整套变量&#xff0c;而线程则共享数据。 12.1 什么是线程 将执行这个任务的代码放在一个类的run方法中&#xff0c;这个类要实现Runnable接口。 Runnable接口非常简单&#xff0c;只有一个run方法&#xff1a; …

情感分析实战(中文)-数据获取

情感分析实战(中文)-数据获取 背景&#xff1a;该专栏的目的是将自己做了N个情感分析的毕业设计的一个总结版&#xff0c;不仅自己可以在这次总结中&#xff0c;把自己过往的一些经验进行归纳&#xff0c;梳理&#xff0c;巩固自己的知识从而进一步提升&#xff0c;而帮助各大…

Ubuntu20、centos7安装部署Gitlab

目录 一、简介 二、安装GitLab 1、安装准备工作 2、安装Gitlab a、安装并配置必要的依赖 b、下载Gitlab c、启动postfix邮件服务&#xff0c;设置开机自启 d、安装Gitlab e、修改gitlab配置文件&#xff08;ip和端口&#xff09; g、更新配置文件并重启 h、通过ip地址加端口进行…

国产力作:全新Excel平台,画表格搭建软件,Access用户:告别VBA

全新Excel平台&#xff0c;功能强大到离谱&#xff1f; 最近&#xff0c;发现了一款新型的软件&#xff0c;而且还是国产的&#xff0c;功能超级强大&#xff0c;用法却很简单。就是感觉非常的厉害&#xff01; 一款全新的Excel平台&#xff0c;但是却跟Excel没有任何联系&am…

webpack.config.js基础配置(五大核心属性)

在上一节webpack零基础入门中我们在安装完webpack 和 webpack-cli依赖之后&#xff0c;直接通过npx webpack ./src/main.js --modedevelopment的方式对src下的js文件进行了打包。 其中的 ./src/main.js: 指定 Webpack 从 main.js 文件开始打包&#xff0c;不但会打包 main.js&a…

A ConvNet for the 2020s

A ConvNet for the 2020s 2020年代的ConvNet https://openaccess.thecvf.com/content/CVPR2022/papers/Liu_A_ConvNet_for_the_2020s_CVPR_2022_paper.pdf Zhuang Liu 1 , 2 ∗ ^{1,2*} 1,2∗ Hanzi Mao 1 ^1 1 Chao-Yuan Wu 1 ^1 1 Christoph Feichtenhofer 1 ^1 1 Trevor Da…

mpls vpn综合实例配置案例

如图1所示&#xff1a; 1、AR4连接公司总部财务部、AR6连接分支机构财务部&#xff0c;AR4和AR6属于vpna&#xff1b; 2、 AR5连接公司总部办公、 AR7连接分支机构办公&#xff0c; AR5和 AR7属于vpnb。 公司要求通过部署BGP/MPLS IP VPN&#xff0c;实现总部和分支机构的安全互…

2023年6月DAMA-CDGA/CDGP数据治理工程师认证到这家

DAMA认证为数据管理专业人士提供职业目标晋升规划&#xff0c;彰显了职业发展里程碑及发展阶梯定义&#xff0c;帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力&#xff0c;促进开展工作实践应用及实际问题解决&#xff0c;形成企业所需的新数字经济下的核心职业…

CleanMyMac X 4.13.4许可证激活码2023最新免费版

小伙伴们&#xff0c;你们好&#xff0c;今天兔八哥爱分享来聊聊cleanmymac X如何激活&#xff0c;关于cleanmymac的基本情况说明介绍的文章,网友们对这件事情都比较关注&#xff0c;那么现在就为大家来简单介绍下&#xff0c;希望对各位小伙伴们有所帮助。在不断更新的版本中&…

数字化转型的难点是什么?该如何突破?

01为什么要进行数字化转型&#xff1f; 数字化转型不仅是企业提高效率和竞争力的必经之路&#xff0c;也是市场发展趋势的体现。 提升业务效率&#xff1a;数字化转型可以采用自动化流程、数据分析和智能化技术&#xff0c;从而提高企业业务的自动化水平&#xff0c;优化流程…

TLE7244SL-ASEMI代理英飞原装汽车芯片TLE7244SL

编辑&#xff1a;ll TLE7244SL-ASEMI代理英飞原装汽车芯片TLE7244SL 型号&#xff1a;TLE7244SL 品牌&#xff1a;Infineon(英飞凌) 封装&#xff1a;SSOP-24-150mil 类型&#xff1a;电源负载开关 TLE7244SL特性 4个输入引脚&#xff0c;提供灵活的PWM配置 由专用引脚…

XML转换成JSON

说在前面 相信大家对 XML 都不会很陌生了&#xff0c;XML 被设计用来结构化、存储以及传输信息。最近在开发过程中发现&#xff0c;有一些旧接口返回的数据格式即是 XML 的格式&#xff0c;因此需要我们对返回的 XML 数据进行解析&#xff0c;转换成我们好处理的 JSON 数据结构…

SCI论文去哪里查找下载

SCI论文&#xff0c;是指被SCI(Scientific Citation Index)&#xff0c;即科学引文索引所收录的SCI期刊上刊登的学术期刊论文。如何查找下载SCI论文呢&#xff1f;请看下面讲解。 Web of Science数据库 Web of Science是获取全球学术信息的重要数据库&#xff0c;它收录了全球…

vue篇——vue原理以及实现

vue 官网解释Vue (读音 /vjuː/&#xff0c;类似于 view) 是一套用于构建用户界面的渐进式框架&#xff0c;简单易学、双向数据绑定、组件化。数据和结构的分离、虚拟DOM、运行速度快。链接 它有以下的特性&#xff1a;1.轻量级的框架&#xff1b;2.双向数据绑定&#xff1b;3…

MySQL索引事务(一)

1、索引 1.1、概念 索引相当于一种特殊文件&#xff0c;包含着对数据表里所有记录的引用指针。可以对表中的一列或多列创建索引&#xff0c;并指定索引类型&#xff0c;各类索引各自的结构实现。 1.2、作用 *通俗来讲&#xff0c;索引就相当于是我们的书本目录&#xff0c;…