【转】JavaScript获得CSS3的tranform的值

由于样式并没有设置在元素的 style 属性上,所以一般要通过 getComputedStyle 才能获取。而这时就有一个和 transform 相关的问题了:不管你 CSS 中设的何种变换,计算值都会以 matrix(...) 的方式返回,要准确还原成你设置的值从理论上来说就是不可能的。
 
1 document.body.style.transform = 'scale(2)';
2 getComputedStyle(document.body).transform; // matrix(2, 0, 0, 2, 0, 0)

以下再提供一个野路子:通过 document.styleSheets 可以读取页面内的样式表,可以直接访问 CSSOM。

假设一个页面仅引入了这样的一段 CSS:

1 <style>
2 body {
3     transform: scale(2);
4 }
5 </style>

我们可以这样读取:

1 // 取第一个样式表的第一条规则
2 document.styleSheets[0].ownerNode.sheet.cssRules[0].style.transform; // scale(2)
当然,实际情况下,我们需要根据要查找的元素去匹配 selectorText,自行计算优先级,才能确定最后生效的规则是哪条。需要注意跨域的情况下是无法直接读取 cssRules 的,如果有跨域的样式存在,理论上这个方法就不可靠了。这时我们可以把我们算出来的值转成 matrix 去和通过 getComputedStyle 得到的值做比较,一致的话那我们取到的值还 可能是对的。为什么只是可能呢,因为可能跨域样式中写的 transform 值才是生效的,但表达式和我们找出来的在字面上不一样实际却是等价的。


作者:顾轶灵
链接:https://www.zhihu.com/question/30215867/answer/118884865
来源:知乎
著作权归作者所有,转载请联系作者获得授权。

转载于:https://www.cnblogs.com/Bideam/p/5810810.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值