前端三剑客 —— JavaScript (第七节)

目录

内容回顾

DOM编程

事件对象*

事件驱动机制

标签绑定

DOM0事件模型

DOM2事件

捕获/冒泡

事件解除

窗口事件属性(Window Event Attributes)

表单事件(Form Events)

键盘事件(Keyboard Events)

鼠标事件(Mouse Events)

多媒体事件(Media Events)

其他事件

事件演示

1)窗口事件

2)表单事件

3)键盘事件

4)鼠标事件


内容回顾

DOM编程

        document对象

                有属性

                有方法

        节点类型

                元素节点

                属性节点

                文本节点

        操作DOM属性

                DOM对象.属性名称

                DOM对象[属性名称]

                调用DOM对象的API

        操作DOM样式

                获取有单位的样式值

                        标签对象.style.样式名称,这种方式只能操作行内样式。

                        使用getComputedStyle(标签对象).样式名称,这种方式既可以操作行内的,也可以操作页面或外部的。缺点是需要高版本的浏览器IE9以上。

                        标签对象.currentStyle.样式名称,这种方式是适用于低版本的浏览器。

                获取无单位的样式值

                        offsetwith:获取宽度

                        offsetHeight:获取高

                        offsetTop:获取距离顶部的值

                        offsetLeft:获取距离左边的值

                操作DOM内容

                        处理没有value属性的标签对象,如:div、p、span

                                innerHTML:它是可以解析带有HTML标签的内容,因此我们使用它的时候要谨慎,因为存在安全隐患

                                innerText:它不会解析HTML标签,而是会原样输出,但它不是W3C的标准

                                textContent:它不会解析HTML标签,而是会原样输出,但它是W3C的标准

                        处理带有value属性的标签,如:input、textarea

                                标签对象.value

                                标签对象[value]

事件对象*

JS中采用事件驱动的方式来进行编程,通过事件驱动来响应用户的操作。如:用户点击、鼠标移动等。

所谓事件就是浏览器与用户进行交互的动作。

事件驱动机制

在JS中事件有三个元素:事件源、事件对象(event)、事件处理函数

事件源:一般是页面的标签元素,浏览器的窗口、鼠标点击等。

事件对象:该事件中的所有事件信息

事件处理函数:对这个事件最后的处理行为

这三个元素对应三种事件模型:标签属性绑定、DOM0事件模型、DOM2事件模型

标签绑定

这是一种最简单最传统的一种事件方式。

这样注册的事件,相当于动态调用的函数。

DOM0事件模型

这种模型是为了实现三层分离,由W3C组织提供了基于DOM0的绑定方式:先获取DOM对象,然后再绑定事件。它是一种常见的方式。

DOM2事件

这种事件模型是支持同一个DOM元素可以注册多个事件,而在它里面新增了事件的捕获和冒泡的操作。它是通过addEventListener和romoveEventListener来进行管理。

addEventListener有三个参数:事件名称、事件回调(函数)、事件捕获/冒泡

捕获/冒泡

相比DOM0,去掉了前边的on而已,回调时和DOM0一样,也会默认传入一个event参数,同时this是触发该事件的dom节点。最后一个参数是布尔型,true代表捕获事件,false代表冒泡事件,如图:

意思就是说,某个元素触发了某个事件,最先得知的是window,然后是document,依次而入,直到真正触发事件的那个元素(目标元素)为止,这个过程就是捕获。接下来,事件会从目标元素开始起泡,再依次而出,直到window对象为止,这个过程就是冒泡。

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <title>捕获/冒泡</title>

    <style>

        .test {

            width: 300px;

            height: 300px;

            background: #317FE5;

        }

        .test-inner {

            width: 200px;

            height: 200px;

            background-color: #C44F00;

        }

    </style>

</head>

<body>

<div class="test">

    <div class="test-inner"></div>

</div>

<script>

    // 1. 获取事件源对象

    let outer = document.querySelector('.test')

    // 2. 绑定捕获事件,第三个参数是一个布尔值:true表示捕获,false表示冒泡

    outer.addEventListener('click', function (e) {

        console.log('外层捕获')

    }, true)

    // 2. 绑定冒泡事件,即将第三个参数变为 false

    outer.addEventListener('click', function (e) {

        console.log('外层冒泡')

    }, false)

    // 获取第二个事件源对象

    let inner = document.querySelector('.test-inner')

    inner.addEventListener('click', function (e) {

        console.log('内层捕获')

    }, true)

    inner.addEventListener('click', function (e) {

        console.log('内层冒泡')

    }, false)

</script>

</body>

</html>

事件解除

解除事件的语法:

要想注册过的事件能够被解除,必须将回调函数保存起来,否则无法解除。

窗口事件属性(Window Event Attributes

由窗口触发该事件 (适用于标签)。

属性

描述

onafterprint

在打印文档之后运行脚本

onbeforeprint

在文档打印之前运行脚本

onbeforeonload

在文档加载之前运行脚本

onblur

当窗口失去焦点时运行脚本

onerror

当错误发生时运行脚本

onfocus

当窗口获得焦点时运行脚本

onhaschange

当文档改变时运行脚本

onload

当文档加载时运行脚本

onmessage

当触发消息时运行脚本

onoffline

当文档离线时运行脚本

ononline

当文档上线时运行脚本

onpagehide

当窗口隐藏时运行脚本

onpageshow

当窗口可见时运行脚本

onpopstate

当窗口历史记录改变时运行脚本

onredo

当文档执行再执行操作(redo)时运行脚本

onresize

当调整窗口大小时运行脚本

onstorage

当 Web Storage 区域更新时(存储空间中的数据发生变化时)运行脚本

onundo

当文档执行撤销时运行脚本

onunload

当用户离开文档时运行脚本

表单事件(Form Events

表单事件在HTML表单中触发 (适用于所有 HTML 元素, 但该HTML元素需在form表单内)。

键盘事件(Keyboard Events

鼠标事件(Mouse Events

通过鼠标触发事件, 类似用户的行为。

多媒体事件(Media Events

通过视频(videos),图像(images)或者音频(audio) 触发该事件,多应用于HTML媒体元素。

属性

描述

onabort

当发生中止事件时运行脚本

oncanplay

当媒介能够开始播放但可能因缓冲而需要停止时运行脚本

oncanplaythrough

当媒介能够无需因缓冲而停止即可播放至结尾时运行脚本

ondurationchange

当媒介长度改变时运行脚本

onemptied

当媒介资源元素突然为空时(网络错误、加载错误等)运行脚本

onended

当媒介已抵达结尾时运行脚本

onerror

当在元素加载期间发生错误时运行脚本

onloadeddata

当加载媒介数据时运行脚本

onloadedmetadata

当媒介元素的持续时间以及其他媒介数据已加载时运行脚本

onloadstart

当浏览器开始加载媒介数据时运行脚本

onpause

当媒介数据暂停时运行脚本

onplay

当媒介数据将要开始播放时运行脚本

onplaying

当媒介数据已开始播放时运行脚本

onprogress

当浏览器正在取媒介数据时运行脚本

onratechange

当媒介数据的播放速率改变时运行脚本

onreadystatechange

当就绪状态(ready-state)改变时运行脚本

onseeked

当媒介元素的定位属性 [1] 不再为真且定位已结束时运行脚本

onseeking

当媒介元素的定位属性为真且定位已开始时运行脚本

onstalled

当取回媒介数据过程中(延迟)存在错误时运行脚本

onsuspend

当浏览器已在取媒介数据但在取回整个媒介文件之前停止时运行脚本

ontimeupdate

当媒介改变其播放位置时运行脚本

onvolumechange

当媒介改变音量亦或当音量被设置为静音时运行脚本

onwaiting

当媒介已停止播放但打算继续播放时运行脚本

其他事件

事件演示

1)窗口事件

2)表单事件

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <title>事件类型-表单事件</title>

    <style>

        input {

            border-radius: 3px;

            outline: none;

            font-size: 12px;

        }

      .blue {

          border: 1px solid #317FE5;

      }

      .green {

          border: 1px solid green;

      }

      .red {

          border: 1px solid red;

      }

      span {

          font-size: 12px;

      }

    </style>

</head>

<body>

<input type="text" name="username" class="blue" placeholder="请输入用户名"> <span></span>

<script>

    let input = document.querySelector('input')

    let span = document.querySelector('span')

    /*input.onfocus = function () {

    }*/

    input.addEventListener('focus', function (e) {

        //console.log(e)

        //console.log(e.target.className);

        e.target.className = 'green'

        span.innerHTML = '请输入用户名'

    })

    input.onblur = function (e) {

        //console.log(e)

        let val = e.target.value

        if (val === '') {

            e.target.className = 'red'

            span.innerHTML = '用户名不为空'

            span.style.color = 'red'

        } else {

            e.target.className = 'blue'

            span.innerHTML = '用户名有效'

            span.style.color = 'green'

        }

    }

</script>

</body>

</html>

3)键盘事件

4)鼠标事件

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

springboot整合vosk实现简单的语音识别功能

vosk开源语音识别 Vosk是开源的语音识别工具包。Vosk支持的事情包括&#xff1a; 支持十九种语言 - 中文&#xff0c;英语&#xff0c;印度英语&#xff0c;德语&#xff0c;法语&#xff0c;西班牙语&#xff0c;葡萄牙语&#xff0c;俄语&#xff0c;土耳其语&#xff0c;越…

TCP/IP协议—TCP

TCP/IP协议—TCP TCP协议TCP通信特点TCP技术概念TCP定时器 TCP头部报文TCP连接三次握手&#xff08;建立连接&#xff09;四次挥手&#xff08;释放连接&#xff09;连接状态 TCP协议 传输控制协议&#xff08;TCP&#xff0c;Transmission Control Protocol&#xff09;是一种…

ubuntu16.04安装Eclipse C/C++

1.安装 JDK 官网源码安装 首先打开JDK官网&#xff0c;JDK1.8的下载网址为&#xff1a;https://www.oracle.com/cn/java/technologies/downloads/#java8-windows&#xff0c;进入到网址如下图所示&#xff1a; 向下滑动到 JDK1.8的下载界面&#xff0c;如下图所示&#xff1a…

(十)C++自制植物大战僵尸游戏设置功能实现

植物大战僵尸游戏开发教程专栏地址http://t.csdnimg.cn/m0EtD 游戏设置 游戏设置功能是一个允许玩家根据个人喜好和设备性能来调整游戏各项参数的重要工具。游戏设置功能是为了让玩家能够根据自己的需求和设备性能来调整游戏&#xff0c;以获得最佳的游戏体验。不同的游戏和平…

前端框架模板

前端框架模板 1、vue-element-admin vue-element-admin是基于element-ui 的一套后台管理系统集成方案。 **功能&#xff1a;**https://panjiachen.github.io/vue-element-admin-site/zh/guide/#功能 **GitHub地址&#xff1a;**GitHub - PanJiaChen/vue-element-admin: :t…

Linux学习之路 -- 进程篇 -- PCB介绍 -- 进程的孤儿和僵尸状态

前面介绍了进程的各种状态&#xff0c;下面介绍比较特殊的两种状态 -- 孤儿和僵尸&#xff08;僵死&#xff09;。 一、僵尸状态 我们创建进程的目的其实就是想要进程帮我们执行一些任务&#xff0c;当任务被执行完后&#xff0c;进程的使命其实就已经完成了。此时我们就需要…

【机器学习300问】69、为什么深层神经网络比浅层要好用?

要回答这个问题&#xff0c;首先得知道神经网络都在计算些什么东西&#xff1f;之前我在迁移学习的文章中稍有提到&#xff0c;跳转链接在下面&#xff1a; 为什么其他任务预训练的模型参数&#xff0c;可以在我这个任务上起作用&#xff1f;http://t.csdnimg.cn/FVAV8 …

MySQL8.0.20 下载与安装

一、下载 MySQL服务器下载安装&#xff1a; 官网社区版地址&#xff1a; https://downloads.mysql.com/archives/installer/ 二、安装 安装注意事项---成功秘诀 安装密码不要设置复杂了&#xff0c;千万要记住密码&#xff0c;比如root和mysql就很好&#xff1b;不要随意卸…

科技云报道:AI大模型疯长,存储扛住了吗?

科技云报道原创。 AI大模型正在倒逼数字基础设施产业加速升级。 过去一年半&#xff0c;AI大模型标志性的应用相继出现&#xff0c;从ChatGPT到Sora一次次刷新人们的认知。震撼的背后&#xff0c;是大模型参数指数级的增长。 这种数据暴涨的压力&#xff0c;快速传导到了大模…

node.js服务器静态资源处理

前言&#xff1a;node.js服务器动态资源处理见 http://t.csdnimg.cn/9D8WN 一、什么是node.js服务器静态资源&#xff1f; 静态资源服务器指的是不会被服务器的动态运行所改变或者生成的文件. 它最初在服务器运行之前是什么样子, 到服务器结束运行时, 它还是那个样子. 比如平…

【数据结构】树与二叉树、树与森林部分习题与算法设计例题

目录 【数据结构】树与二叉树部分习题与算法设计例题一、单选题二、算法设计题判断二叉树是否为完全二叉树求二叉树的最小深度 以及 二叉树树高 树与二叉树知识点文章: 【数据结构】树与二叉树&#xff08;递归法先序、中序、后序、层次遍历二叉树、二叉树的建立以及求树高的方…

百货商场用户画像描绘and价值分析(下)

目录 内容概述数据说明技术点主要内容4 会员用户画像和特征字段创造4.1 构建会员用户基本特征标签4.2 会员用户词云分析 5 会员用户细分和营销方案制定5.1 会员用户的聚类分析及可视化5.2 对会员用户进行精细划分并分析不同群体带来的价值差异 内容概述 本项目内容主要是基于P…

华为欧拉系统(openEuler-22.03)安装深信服EasyConnect软件(图文详解)

欧拉镜像下载安装 iso镜像官网下载地址 选择最小化安装&#xff0c;标准模式 换华为镜像源 更换华为镜像站&#xff0c;加速下载&#xff1a; sed -i "s#http://repo.openeuler.org#https://mirrors.huaweicloud.com/openeuler#g" /etc/yum.repos.d/openEuler.r…

七月审稿之提升模型效果的三大要素:prompt、数据质量、训练策略(含Reviewer2和PeerRead)​

前言 我带队的整个大模型项目团队超过40人了&#xff0c;分六个项目组&#xff0c;每个项目组都是全职带兼职&#xff0c;且都会每周确定任务/目标/计划&#xff0c;然后各项目组各自做任务拆解&#xff0c;有时同组内任务多时 则2-4人一组 方便并行和讨论&#xff0c;每周文档…

SpringCloud之LoadBalancer负载均衡器的简单使用

SpringCloud之LoadBalancer负载均衡器的简单使用 loadbalancer用于对提供服务的集群做一个节点的选取规则。 如图所示&#xff0c;load balancer集成在调用方 示例 创建loadbalance-base模块,并引入相关依赖 <dependencies><dependency><groupId>org.spr…

LeetCode 热题 100 Day02

滑动窗口模块 滑动窗口类问题&#xff1a;总能找到一个窗口&#xff0c;从前往后移动来查找结果值。 这个窗口的大小可能是固定的&#xff0c;也可能是变化的。但窗口的大小一定是有限的。 https://www.cnblogs.com/huansky/p/13488234.html Leetcode 3. 无重复字符的最长子串 …

图书馆自习室|基于SSM的图书馆自习室座位预约小程序设计与实现(源码+数据库+文档)

图书馆自习室目录 基于SSM的图书馆自习室座位预约小程序设计与实现 一、前言 二、系统设计 三、系统功能设计 1、小程序端&#xff1a; 2、后台 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a…

专业照片编辑软件ON1 Photo RAW 2024 mac/win

ON1 Photo RAW 2024 for Mac是一款集专业性与易用性于一体的照片编辑软件。它拥有简洁直观的用户界面&#xff0c;即便对于摄影新手&#xff0c;也能快速上手。软件支持RAW格式照片处理&#xff0c;能够完整保留照片原始信息&#xff0c;让后期调整更加灵活。 在功能方面&#…

视力筛查通知短信群发选择106平台时应注意什么!

选择106平台进行视力筛查通知短信群发时&#xff0c;需要注意以下几点&#xff1a; 1.平台的合规性与资质&#xff1a;首先&#xff0c;确保所选的106短信平台具有合法的运营资质和工信审批相关证书。避免与违法平台合作&#xff0c;确保服务的合规性。 2.平台的覆盖范围与到…

第07-2章 TCP/IP模型

7.7 TCP/IP模型详解 7.7.1 简介 应用层的PDU>APDU&#xff08;Application PDU&#xff09; 表示层的PDU>PPDU&#xff08;Presentation PDU&#xff09; 会话层的PDU>SPDU&#xff08;Session PDU&#xff09; 7.7.2 TCP/IP协议体系 &#xff08;1&#xff09;TCP…