首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获取translate3d的绝对值?

如何获取translate3d的绝对值?
EN

Stack Overflow用户
提问于 2013-03-26 02:50:15
回答 3查看 7K关注 0票数 1

如何将负的translate3d值转换为正数?

例如:

代码语言:javascript
复制
var val = $m('slider').style.webkitTransform;
console.log(val); // this returns a number like: translate3d(-93px, 0, 0);

如何将值转换为正数,以便我的输出为:

代码语言:javascript
复制
translate3d(93px, 0, 0); // positive 93
EN

回答 3

Stack Overflow用户

发布于 2013-03-26 03:08:26

如果可以的话,最好也在JS中跟踪您的坐标,但如果这不可能,您需要使用parse out the individual values from the transform matrix...

如果使用getComputedStyle获得转换的计算样式(而不仅仅是.style属性),它将返回一个矩阵:

代码语言:javascript
复制
// adapted from jQuery solution at https://stackoverflow.com/questions/7982053/get-translate3d-values-of-a-div
function getTransform(el) {
    var transform = window.getComputedStyle(el, null).getPropertyValue('-webkit-transform');
    var results = transform.match(/matrix(?:(3d)\(-{0,1}\d+(?:, -{0,1}\d+)*(?:, (-{0,1}\d+))(?:, (-{0,1}\d+))(?:, (-{0,1}\d+)), -{0,1}\d+\)|\(-{0,1}\d+(?:, -{0,1}\d+)*(?:, (-{0,1}\d+))(?:, (-{0,1}\d+))\))/);

    if(!results) return [0, 0, 0];
    if(results[1] == '3d') return results.slice(2,5);

    results.push(0);
    return results.slice(5, 8); // returns the [X,Y,Z,1] values
}


var translation = getTransform( $m('slider') );
var translationX = translation[0];
var absX = Math.abs(translationX);
票数 2
EN

Stack Overflow用户

发布于 2013-03-26 03:08:18

下面的示例展示了如何使用split分隔所有值,使用parseInt解析整数值,然后使用abs()获取绝对值

工作小提琴:http://jsfiddle.net/bXgCP/

代码语言:javascript
复制
var mystr = "93px, 0, 10";

var myarr = mystr.split(",");
var finalStr = '';

for (var i=0;i<myarr.length;i++)
{ 

    myarr[i] = Math.abs(parseInt(myarr[i]),10);
}

finalStr = myarr.join(); // put the values back with the `,` format
票数 1
EN

Stack Overflow用户

发布于 2015-02-18 01:51:42

Adam的答案有一个错误:它不能像这样处理十进制值:

代码语言:javascript
复制
matrix(1, 0, 0, 1, 100.000002649095, 100.000002649095) 

对regex进行了修改以允许这样做:

代码语言:javascript
复制
function getTransform(el) {
    var transform = window.getComputedStyle(el, null).getPropertyValue('-webkit-transform');
    var results = transform.match(/matrix(?:(3d)\(-{0,1}\d+(?:, -{0,1}\d+)*(?:, (-{0,1}\d+))(?:, (-{0,1}\d+))(?:, (-{0,1}\d+)), -{0,1}\d+\)|\(-{0,1}\d+(?:, -{0,1}\d+)*(?:, (-{0,1}.+))(?:, (-{0,1}.+))\))/);

    if(!results) return [0, 0, 0];
    if(results[1] == '3d') return results.slice(2,5);

    results.push(0);
    return results.slice(5, 8); // returns the [X,Y,Z,1] values
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15622466

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档