javascript - 如何获取某个元素的transform属性?
PHP中文网
PHP中文网 2017-04-11 10:56:47
[JavaScript讨论组]

目的:动态获取元素transform中的rotateY属性
问题:如图,

试了ele.style.transform$ele.css('transform')两种办法,第一种只能获取内联样式;用jQuery出来的是奇怪的matrix3d变换矩阵, 有没有办法用JS直接获取在<style>中设置的'transform'样式的值呢?

PHP中文网
PHP中文网

认证0级讲师

全部回复(3)
天蓬老师

这个好像无法直接获取,所以需要转换下。
老外给出的办法。

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<style>
#pTransform {
    margin: 30px;
    width: 200px;
    height: 100px;
    background-color: yellow;
    /* Rotate p */
    transform: rotate(9deg);
    -ms-transform: rotate(9deg);
    /* Internet Explorer */
    -moz-transform: rotate(9deg);
    /* Firefox */
    -webkit-transform: rotate(9deg);
    /* Safari 和 Chrome */
    -o-transform: rotate(9deg);
    /* Opera */
}
</style>

<body>
    <p id="pTransform">
    </p>
</body>
<script>
var el = document.getElementById("pTransform");
var st = window.getComputedStyle(el, null);
var tr = st.getPropertyValue("-webkit-transform") ||
    st.getPropertyValue("-moz-transform") ||
    st.getPropertyValue("-ms-transform") ||
    st.getPropertyValue("-o-transform") ||
    st.getPropertyValue("transform") ||
    "FAIL";

// With rotate(30deg)...
// matrix(0.866025, 0.5, -0.5, 0.866025, 0px, 0px)
console.log('Matrix: ' + tr);

// rotation matrix - http://en.wikipedia.org/wiki/Rotation_matrix

var values = tr.split('(')[1].split(')')[0].split(',');
var a = values[0];
var b = values[1];
var c = values[2];
var d = values[3];

var scale = Math.sqrt(a * a + b * b);

console.log('Scale: ' + scale);

// arc sin, convert from radians to degrees, round
var sin = b / scale;
// next line works for 30deg but not 130deg (returns 50);
// var angle = Math.round(Math.asin(sin) * (180/Math.PI));
var angle = Math.round(Math.atan2(b, a) * (180 / Math.PI));

console.log('Rotate: ' + angle + 'deg');
</script>

</html>
迷茫

可以参考下这个问题,应该会有帮助
https://segmentfault.com/q/1010000003068938

PHPz

用document.getElementById(‘element’).style.xxx可以获取的只是DOM元素style属性里的样式规则,对于通过class属性引用的外部样式表,就拿不到;
用$('').css()获取的是最终渲染规则,transform最终产生的渲染规则是以矩阵maxrix(x,x,x,x,x)的形式保存。


这是zepto的源代码,可以看一下$('').css()函数获取CSS属性的实现

所以对于要操作transform样式,还是直接写在元素style属性上,用内联样式,然后document.getElementById(‘element’).style.xxx就可以获取到了

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号