当前位置: 首页 > news >正文

‘元素.style.样式名‘获取不到样式,应该使用Window.getComputedStyle()获取正真的样式

一、问题描述

有一次,想通过js获取一个元素的样式的某个属性状态而去执行不同的逻辑代码,结果发现获取的样式总是不对,基本为空。(通过元素.style.样式名的方式去获取。)

通过打印发现,所有的属性均存在,但是值都没有,一开始以为是页面还没有渲染,样式值没有计算才导致获取不到值,后面经过实验,发现也不是(在Vue3中通过nextTick()函数试过)或者说还没有到这一步。而通过JavaScript设置的样式值没有问题,可以获取。

二、发现问题

经过查阅资料发现:使用元素.style.样式名只能获取到元素的内联样式,也就是行内样式,而无法获取到正真计算后的样式。也就是说通过类名设置和外联样式均无法被获取到。

语法:元素.style.样式名
注意:通过style属性设置和读取的都是内联样式,无法读取样式表中的样式。

我们通过JavaScript获取元素然后设置的样式也属于行内样式。
通过打印整个元素我们发现,'style'只是元素上的一个属性,他和其他的样式共同作用才能最终决定元素的样子,这当然需要浏览器计算所有的样式后才能决定。

所以当我们通过元素.style.样式名去获取样式时,只是获取到元素身上style属性的所拥有的样式,这或许不会符合我们的期望。

三、解决(Window.getComputedStyle())

使用:

Window.getComputedStyle()

它允许你获取到一个元素的最终计算样式,即该元素在页面上实际呈现的样式。这些样式不仅包括内联样式,还包括外部样式、继承的样式、动态计算的样式(如 display, color 等)以及伪元素的样式

Window.getComputedStyle()方法返回一个对象,该对象在应用活动样式表并解析这些值可能包含的任何基本计算后报告元素的所有 CSS 属性的值。私有的 CSS 属性值可以通过对象提供的 API 或通过简单地使用 CSS 属性名称进行索引来访问。
MND-Window.getComputedStyle()

  • 该方法第一个参数必须是一个element元素,返回的对象与从元素的 style 属性返回的对象具有相同的类型,并且从getComputedStyle返回的对象是只读的。

  • 第二个参数可选,为要匹配的伪元素的字符串,主要用于获取伪元素的样式。注意如果你只需要获取普通元素的样式,这个参数应该不填或者填null。如:获取某个元素的::after getComputedStyle(element, "::after")

使用Window.getComputedStyle()就可以通过JavaScript去获取当前元素的所有样式了,如果你的样式是变化的,而没有获取到正确的样式,那么此时才应该考虑获取时机是否正确。

还有一点需要注意的是:window.getComputedStyle 会返回计算后的所有样式,这会迫使浏览器更早的进行样式计算,这可能会让浏览器做不少多余的的工作,尤其是当你在大规模的 DOM 操作或动画过程中频繁调用时。所以为了避免不必要的性能问题,最好避免在频繁的动画或循环中多次调用 getComputedStyle。

http://www.lryc.cn/news/515400.html

相关文章:

  • 双目视觉:reprojectImageTo3D函数
  • Arduino Uno简介与使用方法
  • 深入了解 StarRocks 表类型:解锁高效数据分析的密码
  • L27.【LeetCode笔记】2 的幂(五种解法)
  • Pentaho Kettle迁移至Oracle的空字符串和NULL的问题处理,大坑!
  • 「Mac畅玩鸿蒙与硬件50」UI互动应用篇27 - 水果掉落小游戏
  • 2.C语言基础:语句、表达式、注释与标准库简介
  • Python 基于 opencv 的人脸识别监控打卡系统(源码+部署)
  • Maven的依赖管理
  • 数据结构考前一天
  • 获取 Astro Bot AI 语音来增强您的游戏体验!
  • html5开发,js 在元素div id=img1的最前面插入一个图片
  • Elasticsearch Serverless中的数据流自动分片深度解析
  • 2025考研江南大学复试科目控制综合(初试807自动控制原理)
  • Elasticsearch分片数量是什么意思?
  • PWN的知识之栈溢出
  • java.lang.Error: FFmpegKit failed to start on brand:
  • TCPDump参数详解及示例
  • Spring如何实现管理事务
  • windows C#-接口中的索引器
  • Launcher3主页面加载显示流程分析
  • 【读书笔记·VLSI电路设计方法解密】问题36:一个好的设计流程有哪些特点
  • C语言----共用体、枚举
  • 26.Java Lock 接口(synchronized 关键字回顾、可重入锁快速入门、Lock 对比 synchronized)
  • 机器学习 学习知识点
  • GESP真题 | 2024年12月1级-编程题4《美丽数字》及答案(C++版)
  • java并发之AQS
  • 4 种修复 IPhone 备份输入密码解锁的方法
  • 选课(贪心)
  • 【深度学习】Java DL4J基于 LSTM 构建新能源预测模型