Javascript - 2

news/2025/4/3 0:34:30/文章来源:https://www.cnblogs.com/wxrwajiez/p/18804309

Javascript - 2 事件

DOM

DOM - document object model - HTML 文档的结构化表示 由浏览器自动创建,以 树结构存储,每一个 HTML 元素(标签、内容、属性)都是一个对象

DOM允许我们使用 js 访问 HTML 元素和样式,以操作它们

  • 改变文本
  • 改变 HTML 属性
  • 改变 CSS 样式

可以通过 js 访问和交互每一个节点

DOM 和 DOM 操作 不是js,它们是 Web API 的一部分,我们是使用 js 访问Web API 库(浏览器提供,也是js写的)

DOM 树

  • DOCUMENT - DOM 的入口点

DOM 总是以 DOCUMENT 对象开头(在最顶端)

  • <html> - DOCUMENT 的第一个子元素

<html> 是 HTML 文档的根元素

  • <head> <body> - <html> 的两个子元素

  • DOM树上还有 TEXT(文本)

querySelector() 方法

querySelector() 返回一个元素

'use strict';// 传入选择器(css一样的选择器)
document.querySelector('.message'); 

textContent 属性

返回元素的文本内容

document.querySelector('.message').textContent;

value 属性

获取 input filed 的实际值

console.log(document.querySelector('.guess').value);

事件监听器 Event Listener

事件 - 页面上发生的事

鼠标单击、鼠标移动、按键...

事件监听器 - 等待事件的发生,然后对它做出反应

处理点击事件

  1. 选择事件发生的元素
  2. 在这个元素上添加事件监听器 .addEventListener
  3. 在 事件监听器 中传入 事件的类型
  4. 指定 事件监听器 的反应(事件处理程序
ducument.querySelector('.check').addEventListener('click',function() {console.log(document.querySelector('.guess').value);
})

Math 是js的对象

Math.random() 返回 0-1(不包括1) 的随机数; Math.trunk() 去除小数

// 秘密数字
const secretNumber = Math.trunk(Math.random()+1); // 1-20// 总分
let score = 20;// 猜一次数字
ducument.querySelector('.check').addEventListener('click',function() {// 从用户界面获取的,通常是一个字符串const guess = Number(ducument.querySelector('.guess').value);// 没有有效输入if(!guess) {ducument.querySelector('.message').textContent = 'No number!';// 猜中}else if(guess === secretNumber){ducument.querySelector('.message').textContent = 'Correct number!';document.querySelector('.number').textContent = secretNumber;// 猜太大}else if(guess > secretNumber){if(score > 1){ducument.querySelector('.message').textContent = 'Too high!';score--;document.querySelector('.score').textContent = score;}else{ducument.querySelector('.message').textContent = 'You lose!';}  // 猜太小}else if(guess < secretNumber){if(score > 1){ducument.querySelector('.message').textContent = 'Too low!';score--;document.querySelector('.score').textContent = score;}else{ducument.querySelector('.message').textContent = 'You lose!';} }       
})

操纵CSS

style 属性

  1. 选择要操纵的元素
  2. 访问该元素的 style 属性
  3. 选择要更改的 css属性

js中 所有有两个单词的属性名称 要使用 驼峰命名

当操纵一个 style 时,需要指定 string

// 猜一次数字
ducument.querySelector('.check').addEventListener('click',function() {const guess = Number(ducument.querySelector('.guess').value);if(!guess) {ducument.querySelector('.message').textContent = 'No number!';}else if(guess === secretNumber){ducument.querySelector('.message').textContent = 'Correct number!';document.querySelector('.number').textContent = secretNumber;// 操纵背景颜色document.querySelector('body').style.backgroundColor = '#60b347';// 操纵大小document.querySelector('.number').style.width = '30rem';}else if(guess > secretNumber){if(score > 1){ducument.querySelector('.message').textContent = 'Too high!';score--;document.querySelector('.score').textContent = score;}else{ducument.querySelector('.message').textContent = 'You lose!';}  }else if(guess < secretNumber){if(score > 1){ducument.querySelector('.message').textContent = 'Too low!';score--;document.querySelector('.score').textContent = score;}else{ducument.querySelector('.message').textContent = 'You lose!';} }      
})

重构

重构代码,但不改变它的功能(improve code, 消灭重复代码)

// **
const displayMessage = function(message){ducument.querySelector('.message').textContent = message;
}// 猜一次数字
ducument.querySelector('.check').addEventListener('click',function() {const guess = Number(ducument.querySelector('.guess').value);if(!guess) {displayMessage('No number!');}else if(guess === secretNumber){displayMessage('Correct number!');document.querySelector('.number').textContent = secretNumber;document.querySelector('body').style.backgroundColor = '#60b347';document.querySelector('.number').style.width = '30rem';}else if(guess !== secretNumber){if(score > 1){// **displayMessage(guess > secretNumber ? 'Too high!' : 'Too high!');score--;document.querySelector('.score').textContent = score;}else{displayMessage('You lose!');} }

模态窗口 Modal Window

窗口已经存在了,我们要做的是展示它

querySelector 只会选择第一个符合的选择器,querySelectorAll 会选择全部符合的选择器

querySelectorAll 返回的一个 NodeList 对象,而不是一个真正的数组,它包含多个 DOM 元素,并且具有类似数组的索引(可以通过 NodeList[index] 访问)

const modal = document.querySelector('.modal');
const overlay = document.querySelector('.overlay');
const btnCloseModal = document.querySelector('.close-modal');
const btnShowModal = document.querySelectorAll('.show-modal');for(let i = 0; i<btnShowModal.length; i++)console.log(btnShowModal[i].textContent);

classList 属性

classList 属性的方法

  • remove: 移除 类(不要写 .
const modal = document.querySelector('.modal');
const overlay = document.querySelector('.overlay');
const btnCloseModal = document.querySelector('.close-modal');
const btnShowModal = document.querySelectorAll('.show-modal');for(let i = 0; i<btnShowModal.length; i++)btnShowModal[i].addEventListener('click', function(){// 移除 hidden 类modal.classList.remove('hidden');overlay.classList.remove('hidden');});
  • add: 添加 类
const closeModal = function(){// 添加 hidden 类modal.classList.add('hidden');overlay.classList.add('hidden');
}
btnCloseModal.addEventListener('click', closeModal);
overlay.addEventListener('click', closeModal);

处理按键事件

按键事件 是 全局事件,不会发生在一个特定的元素上

// 传入事件对象
document.addEventListener('keydown', function(e){console.log(e); // KeyboardEventconsole.log(e.key);if(e.key === 'Escape'){if(!modal.classList.contains('hidden')){closeModal();}}
});

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

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

相关文章

【QML】定时时间控制控件

代码:1 import QtQuick 2.152 import QtQuick.Controls 2.153 4 ApplicationWindow {5 width: 5006 height: 3007 visible: true8 title: "飞行时间设置"9 10 // 自定义时间选择组件11 Component {12 id: timeComponent13 …

Ollama本地部署qwen2.5

一、概述 Ollama 是一个开源的本地大语言模型运行框架,专为在本地机器上便捷部署和运行大型语言模型(LLM)而设计。支持多种操作系统,包括 macOS、Windows、Linux 以及通过 Docker 容器运行。Ollama 提供对模型量化的支持,可以显著降低显存要求,使得在普通家用计算机上运行…

天下拍-艺术品拍卖经典案例分享

在当今快速发展的数字化时代,艺术品拍卖行业正经历着前所未有的变革。天下拍作为一款功能齐全的拍卖产品,凭借先进的技术平台和专业的服务团队,为艺术品拍卖提供了全新的解决方案。同步拍卖的模式和互联网运营工具的加持可以帮助您实现艺术品的高效变现和价值最大化。线上线…

[T.4] 团队项目:团队代码管理准备

项目 内容这个作业属于哪个课程 2025年春季软件工程(罗杰、任健)这个作业的要求在哪里 [T.4] 团队项目:团队代码管理准备我在这个课程的目标是 掌握代码管理与修复流程,完善团队协作机制这个作业在哪个具体方面帮助我实现目标 团队协作,软件开发代码管理基础团队代码仓库地…

asio使用async_connect,连接127.0.0.1,函数回调函数errorcode连接成功

编译运行rest_rpc库的客户端出现问题 asio使用async_connect,连接127.0.0.1,函数回调函数errorcode连接成功(没有启动服务器的情况下),需要等到调用发送函数,才会失败。调试发现是使用9000端口被本机另外的程序占用了-_- 环境:win10 netstat -ano | findstr "9000&…

算法备案没产品可以申请吗?

算法备案复审阶段涉及产品信息填报,所以一度让一些开发者有这样的错误认知:只有等产品要上线了,才能火急火燎地去申请算法备案。但这个观点其实是错误的,其实开发者也可以在没有具体产品的情况下发起算法备案申请。只要材料合法合规,也能取得备案号。下面是一些具体信息介…

工业通信协议“牵手密码”,Ethernet IP转Profinet网关的桥梁魔法

在当前工业自动化领域,实时以太网技术已经成为至关重要的通信标准之一。Profinet和EtherNetIP作为两种广泛采用的实时以太网协议,各自拥有其独特的性能优势和适用场景。本文旨在探讨稳联技术Profinet转EtherNetIP网关WL-PN-EIPM的功能,并评估其在节能实施与监测方面的应用价…

LeetCode刷题-动态规划-爬楼梯

LeetCode刷题-动态规划-爬楼梯 题目: 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 示例 1: 输入:n = 2 输出:2 解释:有两种方法可以爬到楼顶。1 阶 + 1 阶 2 阶 示例 2:输入:n = 3 输出:3 解释:有…

【攻防世界】Hidden-Message

⭕、知识点 流量分析/端口号隐写/tshark/json文件处理 一、题目二、解法 1、端口号个位呈现有规律的01交替,可能隐藏信息。 2、为便于提取信息,使用kali的tshark对其进行转存 tshark -r input.pcap -T json > output.txt注意在使用tshark时应避免使用root账户 否则会出现如…

022 props组件交互

.vue 的文件,就是一个组件,每个.vue 文件就是每个页面html 的时候,每个页面都是一个 htmlvue2 和 vue3 的生命周期钩子是不同的components:常用的组件,公共的组件views:用来存放页面的新建项目,删除HelloWorld.vue components也删除views删除 这个index.js删除 这两页面…

客户端打开BI报表提示 Your current browser is not supported”

win7的打开会报这个问题, win11可以正常打开, 应该是环境差异导致。