JavaScript编程基础(五)细说事件与实战之经典计算器 原创 阁主 2025-11-03 07:12:43 阅读 2246 次 评论 0 条 摘要:继续上次的JavaScript编程基础(四)继续学习,简单记录学习PHP中文网23期JavaScript基础知识,内容包括:dataset自定义属性、class属性、getComputedStyle计算样式、事件添加与派发、事件冒泡、事件冒泡: 事件代理/委托 ## dataset 对象 1. 预定义属性: `id,class,style, title...` 2. 自定义属性: `data-`前缀 3. 注: `data-`不要写,蛇形->驼峰 ```JavaScript dataset: 自定义属性 用户信息 ``` ## getComputedStyle对象 - 计算样式: 元素上的全样样式,包括行内,文档,外部等 - 只读 style1.css代码: ```css h2 { background-color: yellow; } ``` 完整示例代码: ```JavaScript getComputedStyle: 计算样式 Hello world ``` ## classList 这是专用于操作元素的`class`属性 1. 添加: `classList.add()` 2. 判断: `classList.contains()` 3. 替换: `classList.replace()` 4. 移除: `classList.remove()` 5. 切换: `classList.toggle()` ```JavaScript classList: class属性 Hello world ``` ## 事件基础 - 事件 3 要素 1. 事件名称: 字符串, `click, keydown, scroll` 2. 事件主体: 元素, `,,...` 3. 事件方法: 函数, `function(ev){}, ()=>{}` - 事件增删 1. 事件添加: 事件属性, `addEventListener()` 2. 事件删除: `null`,`removeEventListener()` 3. 事件派发:`dispatchEvent()` - 定时器 1. 一次性: `setTimeout()` 2. 间歇式: `setInterval()` ```JavaScript 事件添加与派发 登录 保存 提交 广告位 ``` ## 事件冒泡 1. 事件由内向外,逐级向上传递,直到根元素 2. 事件冒泡可以被禁用:`ev.stopPropagation()` ```JavaScript 事件冒泡 box1 box2 box3 ``` ## 事件代理 1. 利用事件冒泡,将子元素事件委托到父级上触发 2. 事件代理机制,可以极大的简化事件添加操作 3. 事件绑定主体`ev.currentTarge` 4. 事件触发主体: `ev.target` ```JavaScript 事件冒泡: 事件代理/委托 电脑 手机 外套 西瓜 苹果 草莓 ``` ## 实战计算器  index.html: ```html 计算器 F1 F2 CE AC 7 8 9 / 4 5 6 X 1 2 3 - 0 . = + ``` style.css: ```css * { padding: 0; margin: 0; box-sizing: border-box; } body { background-color: #eee; } .calculator { min-width: 360px; max-width: 460px; border-radius: 8px; background-color: #666; padding: 15px; display: grid; grid-template-rows: 60px 1fr; gap: 20px; margin: 40px auto; } .calculator .result { font-size: 32px; font-weight: bolder; text-align: right; padding: 6px; border: none; outline: none; border-radius: 8px; background-color: #cecece; box-shadow: 2px 2px 2px #333 inset; } .calculator .btns { display: grid; grid-template-columns: repeat(4, 1fr); grid-auto-rows: 50px; gap: 15px; } .calculator .btns > * { font-size: 32px; font-weight: bolder; border-radius: 8px; color: #888; border: none; outline: none; background-color: #444; box-shadow: 2px 2px 2px #000; } .calculator .btns *:nth-child(-n + 4) { background-color: #222; } .calculator .btns *:nth-child(-n + 4):hover, .calculator .btns > *:hover { cursor: pointer; opacity: 0.7; color: white; transition: 0.3s; } ``` script.js: ```JavaScript // 计算函数 function calculator(ev) { // 显示结果区 const result = document.querySelector('.result') // 当前按钮(事件代理) if (ev.target.tagName !== 'BUTTON') return false // 当前按钮 const curBtn = ev.target // 按钮内容 let content = curBtn.textContent // eval('字符串表达式'): 将一个字符串表达式进行计算并返回结果 // 将内容显示到结果区 // 根据用户点击的按钮内容确定要执行的操作 switch (content) { // AC 清零 case 'AC': result.value = 0 break // CE: 退格 case 'CE': // 如果结果区有内容 if (result.value.length == 1 || result.value == '错误') { result.value = 0 } else { // 删除最后一个字符 // slice(startIndex,endIndex),结果中不包含结束索引的值 result.value = result.value.slice(0, -1) } break // F1 case 'F1': break // F2 case 'F2': break // = : 计算结果 case '=': // 缓存结果 let tmpResult = 0 try { // 如果是乘法,将 "X" 换成 "*" result.value = result.value.replace('X', '*') // 计算字符串表达式 tmpResult = eval(result.value) // 如果结果是小数,仅保留5位就可以了 if (tmpResult.toString().includes('.')) { tmpResult = tmpResult.toFixed(5) // 如果小数部分出现了多余的0,应该去掉(对结果精度没影响) tmpResult = parseFloat(tmpResult) } // 显示出结果 result.value = tmpResult } catch { result.value = '错误' } break default: // 如果当前结果区显示有前导0,先清空, 防止出现前导0 if (result.value == 0 || result.value == '错误') result.value = '' result.value += content } } /** * 知识点总结 * 1. 事件代理 * 2. eval() * 3. try-catch * 4. toFixed() */ /** * 作业 * 1. 处理除零错误 * 2. 处理操作符位于表达式首位的错误 */ ``` 完整代码附件: calculator.zip大小:3KB已经过安全软件检测无毒,请您放心下载。 本文地址:https://www.mainblog.cn/330.html 版权声明:本文为原创文章,版权归 阁主 所有,欢迎分享本文,转载请保留出处! 免责申明:有些内容源于网络,没能联系到作者。如侵犯到你的权益请告知,我们会尽快删除相关内容。 PREVIOUS:关闭浏览器访问http时自动转https NEXT:已经是最新一篇了 文章导航 相关文章 关键词:HTML5JavaScript大前端 •前端图片<img>、链接<a>等去除referer标记,绕过防盗链 •记录前端常用的开源框架 •JavaScript编程基础(九)完结散花:闭包原理、实战之投票系统与购物车功能 •JavaScript编程基础(八)json 跨域 异步编程 •JavaScript编程基础(七)经典实战之轮播图构造与功能模块的编写 •JavaScript编程基础(六)表单事件、模块的使用与实战之留言板、经典选项卡 •JavaScript编程基础(四)DOM基本操作 •JavaScript编程基础(三)访问器属性、常用字符串与数组方法、构造函数、类 评论已关闭!