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

内容回顾

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.mzph.cn/news/805094.shtml

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

相关文章

基于51单片机的DAC0832锯齿波产生设计

**单片机设计介绍&#xff0c; 基于51单片机的DAC0832锯齿波产生设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于51单片机的DAC0832锯齿波产生设计是一个结合了硬件与软件技术的项目&#xff0c;旨在利用51单片机和DAC08…

【机器学习】决策树(Decision Tree,DT)算法介绍:原理与案例实现

前言 决策树算法是机器学习领域中的一种重要分类方法&#xff0c;它通过树状结构来进行决策分析。决策树凭借其直观易懂、易于解释的特点&#xff0c;在分类问题中得到了广泛的应用。本文将介绍决策树的基本原理&#xff0c;包括熵和信息熵的相关概念&#xff0c;以及几种经典的…

现代深度学习模型和技术

Transformer模型的理解和应用 Transformer模型自2017年由Vaswani等人在论文《Attention is All You Need》中提出以来&#xff0c;已经彻底改变了自然语言处理&#xff08;NLP&#xff09;领域的面貌。Transformer的核心是自注意力&#xff08;Self-Attention&#xff09;机制…

liunx系统发布.net core项目

liunx系统发布.net core项目 准备.net6程序运行环境部署nginx&#xff0c;通过一个地址既能访问web api&#xff0c;又能访问web项目有一个客户把web api放到docker中&#xff0c;想通过nginx转发&#xff0c;nginx也支持配置多个程序api接口的其它 liunx系统&#xff1a;cento…

惠海H5031 降压恒流芯片IC 支持36V48V60V80V转9V12V5A方案 爆闪 高低亮,远近光

降压恒流芯片IC是一种电子元件&#xff0c;用于将较高的电压转换为较低的电压&#xff0c;并保持电流的稳定。这种芯片IC广泛应用于各种电子设备中&#xff0c;如LED灯、汽车灯光等。 对于您提到的支持36V48V60V80V转9V12V5A方案的降压恒流芯片IC&#xff0c;它可以将36V至80V…

【设计模式】笔记篇

目录标题 OO设计原则策略模式 - Strategy定义案例分析需求思路分析核心代码展示进一步优化UML 图 观察者模式 - Observe定义案例分析需求UML图内置的Java观察者模式核心代码 总结 装饰者模式 - Decorator定义案例分析需求UML图分析核心代码 总结 工厂模式 - Abstract Method/Fa…

突如其来:OpenAI分家的Anthropic公司悄悄地释放出他们的秘密武器——Claude3

突如其来的消息&#xff0c;OpenAI分家的Anthropic公司悄悄地释放出他们的秘密武器——Claude3 这货居然在默默无闻中一举超越了GPT-4的地位。没发布会&#xff0c;没吹牛逼&#xff0c;就发了一帖子。 字少&#xff0c;事大。 Claude3独挡一面的推理能力 Anthropic推出了三款…

【springboot开发】Gradle VS Maven

前言&#xff1a; java构建工具的主要作用是依赖管理和构建的生命周期管理。gradle和maven是目前java中最流行的两个构建工具&#xff0c;springboot常用maven&#xff0c;Android studio使用gradle。 目录 1. 简介2. Maven2.1 安装2.2 依赖管理2.3 构建生命周期管理 3. Gradle…

【noVNC】使用noVNC实现浏览器网页访问vnc(基于web的远程桌面)

1.VNC本身提供的http连接方式&#xff0c;可传输文件&#xff0c;画面有卡顿&#xff0c;需要安装jre 2.noVNC访问方式&#xff0c;不可传输文件&#xff0c;画面较为流畅&#xff0c;不用安装插件运行环境 一、noVNC 是什么 Web 端的Vnc软件&#xff0c;通过noVNC&#xff0…

tsc --init 报错

运行 tsc --init 报错&#xff0c; 全局安装 ts 也不行 通过 npx tsc --init 就可以解决

【环境变量】常见的环境变量 | 相关指令 | 环境变量系统程序的结合理解 | 环境变量表 | 本地变量环境变量 | 外部命令内建命令

目录 常见的环境变量 HOME PWD SHELL HISTSIZE 环境变量相关的指令 echo&env export unset 本地变量 环境变量整体理解 程序现象_代码查看环境变量 ​整体理解 环境变量表 环境变量表的传递 环境变量表的查看 内建命令 少说废话&#x1f197; 每个用…

python爬虫 爬取网页图片

http://t.csdnimg.cn/iQgHw //爬虫爬取图片其实是很简单的&#xff0c;但是大多数同学&#xff0c;可能对 url的设置一直有困惑&#xff08;这点本人也在研究&#xff09;&#xff0c;而本篇文章&#xff0c;对于想要爬取图片的小白简直是福利。你只需要将文章代码运行即可&am…

超图SuperMap-Cesium,地形图层,可以渲染一个或多个地形(地形可缓存DEM,TIN方式),webGL代码开发(2024-04-08)

1、缓存文件类型TIN格式&#xff0c;TIN的地形sct只能加一个 const viewer new Cesium.Viewer(cesiumContainer); viewer.terrainProvider new Cesium.CesiumTerrainProvider({isSct: true, // 是否为iServer发布的TIN地形服务,stk地形设置为falserequestWaterMask : true,…

AI日报:GPT-4-Turbo正式版自带读图能力;Gemini1.5Pro开放API;SD3将于4月中旬发布;抖音宫崎骏AI特效爆火

欢迎来到【AI日报】栏目!这里是你每天探索人工智能世界的指南&#xff0c;每天我们为你呈现AI领域的热点内容&#xff0c;聚焦开发者&#xff0c;助你洞悉技术趋势、了解创新AI产品应用。 新鲜AI产品点击了解&#xff1a;AIbase - 智能匹配最适合您的AI产品和网站 &#x1f4f…

springboot 创建子模块时 pom 配置

创建子模块 2. 修改父模块 pom 文件 添加如下内容 <packaging>pom</packaging><modules><module>mybatisconf</module></modules>3. 修改子模块 pom 文件 <parent><groupId>com.vazquez</groupId><artifactId>bo…

TensorFlow学习之:深度学习基础

神经网络基础 神经网络是深度学习的核心&#xff0c;它们受人脑的结构和功能启发&#xff0c;能够通过学习大量数据来识别模式和解决复杂问题。神经网络的基本工作原理包括前向传播和反向传播两个阶段。 前向传播&#xff08;Forward Propagation&#xff09; 前向传播是神经…

全国水科技大会 免费征集《水环境治理减污降碳协同增效示范案例》

申报时间截止到2024年4月15日&#xff0c;请各单位抓紧申报&#xff0c;申报条件及申报表请联系&#xff1a;13718793867 围绕水环境治理减污降碳协同增效领域&#xff0c;以资源化、生态化和可持续化为导向&#xff0c;面向生态、流城、城市、农村、工业园区、电力、石化、钢…

在VsCode中写vue的css,代码提示一直不出现或提示错误

在我们vue项目正常写css样式&#xff0c;便会出现一下提示&#xff0c;如&#xff1a; 但有时无提示&#xff0c;那么这种情况有以下几种解决方案 观察Vscode插件是否正常 Vetur和Vue - Official是否安装(Vue - Official的前身就是Volar) 安装了检查是否最新版本 确保你的s…

el-table 设置固定列导致行错位的解决方案

element 官方给出的解决办法是使用doLayout&#xff0c;使用doLayout重新加载一下table就好了。 updated() {// tableRef是表格的ref属性值if (this.$refs.tableRef&& this.$refs.tableRef.doLayout) {this.$refs.tableRef.doLayout();}},调整前后效果对比&#xff1a…

lua学习笔记14(协程的学习)

print("*****************************协程的学习*******************************") --创建1 coroutine.create(function()) 使用1 coroutine.resume(co) -- 创建2 co2coroutine.wrap(fun) 使用2 co2() --协程的挂起函数 coroutine.yield() --协程的状态 --c…