負の translate3d 値を正の数に変換するにはどうすればよいですか?
例えば:
var val = $m('slider').style.webkitTransform;
console.log(val); // this returns a number like: translate3d(-93px, 0, 0);
出力が次のようになるように、値を正の数に変換するにはどうすればよいですか。
translate3d(93px, 0, 0); // positive 93
負の translate3d 値を正の数に変換するにはどうすればよいですか?
例えば:
var val = $m('slider').style.webkitTransform;
console.log(val); // this returns a number like: translate3d(-93px, 0, 0);
出力が次のようになるように、値を正の数に変換するにはどうすればよいですか。
translate3d(93px, 0, 0); // positive 93
できればJSでも座標を追跡することをお勧めしますが、これが不可能な場合は、変換行列から個々の値を解析する必要があります...
変換の計算されたスタイル (.style
プロパティだけでなく) を取得するgetComputedStyle
と、それを使用すると行列が返されます。
// 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);
これは、 を使用してすべての値を分離し、 を使用しsplit
て整数値を解析しparseInt
、次に を使用して絶対値を取得する方法の例です。abs()
作業フィドル: http://jsfiddle.net/bXgCP/
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