如何通过jquery获得div元素的translateY值

如题。我如果利用$("div").css("transform")来获取会得到一个矩阵字符串,请问如何获得具体的translateY值

阅读 16.5k
3 个回答

可以用正则表达式来解析这个Y值:

$('div').css('transform').match(/matrix\(\d+, \d+, \d+, \d+, \d+, (\d+)\)/)[1]

或者,更“模糊”一点儿的匹配:

$('div').css('transform').match(/matrix.*, (\d+)\)/)[1]

正则表达式:

HTML

<p style="transform:rotate(45deg);"></p>
<p style="transform:rotate(45deg) translate(5px,2px);"></p>
<p style="transform:translate3d(5px,2px,9px);"></p>
<p style="transform:translateY(2px);"></p>
<p style="transform:matrix(0,0,0,0,0,2);"></p>

JavaScript

var getTranslateY = function(node){
    var regRule = /translate(Y|\dd)?\(\s*(\w+\s*,)?\s*([^,]+)(\s*,[^)]+)?\s*\)/;
    var regRule2 = /matrix\(.*,\s*(\w+)\s*\)/;
    var transform = node.style.transform;
    var reg;
    if(!transform){
        return null;
    }
    reg = regRule.exec(transform);
    if(null === reg){
        reg = regRule2.exec(transform);
        return reg ? reg[1] : null;
    }
    return reg[3];
}

var pNodes = document.getElementsByTagName('p');

for(var i = 0,l = pNodes.length;i < l;++i){
    console.log(getTranslateY(pNodes[i]));
}

获得矩阵变换

let transform = $(targetNode).css('transform')
// matrix(6.12323e-17, 1, -1, 6.12323e-17, 0, 0)
let transformMatrix = transform.slice(7, transform.length - 1).split(', ')
// ["6.12323e-17", "1", "-1", "6.12323e-17", "0", "0"]

矩阵各个值

matrix(scaleX, skewY, skewX, scaleY, translateX, translateY)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏