阅读&更改SnapSVG中元素的旋转值

时间:2016-01-09 07:39:36

标签: javascript matrix svg transform snap.svg

请查看这个不完整的小提琴(https://jsfiddle.net/JayKandari/srqLLd97/)。

标记:

console.log(validatePIN('3627i1'));

JS代码:

var r = new RegExp('^[0-9]*$');
function validatePIN (pin) {
  //return true or false
  if(r.test(pin) && pin.length == 4 || pin.length == 6){
    return true;
  }else{
    return false;
  }
}

console.log(validatePIN("3627i1")); //call valid function, parameter = string

问题:

  • 读取应用于Element的当前转换。
  • 将当前元素旋转为特定值。

1 个答案:

答案 0 :(得分:0)

你可能想到的是这样的事情......

var rotateVal = t.transform().localMatrix.split().rotate;

localMatrix给出了专门应用于该元素的矩阵。

globalMatrix给出了应用于该元素的总矩阵(例如来自外部容器的矩阵)。

diffMatrix给出了localMatrix和globalMatrix之间的区别。

split()(docs here)将该矩阵分解为其元素。所以我们可以从这里找到'旋转'。

example fiddle

所以这就是我认为你所追求的答案。

然而,如果这只是一个更复杂设计的最小例子,我实际上会设计稍微不同的代码。

而不是像transform()。localMatrix.split()。rotate那样,我会存储你自己的变换组件。所以......就像......

var rotate = 45;
var tx = 250;
var ty = 250;
...then in func
rotate += +10;
var newTransform = 'T'+tx+','+ty+'R'+rotate;

原因在于,您现在正在精确控制值,并且它不容易出错(来自lib或对矩阵的误解)。如果你看一下你显示的矩阵值,你会注意到有微妙的舍入差异,再加上复杂的矩阵计算,这些值并不是我们所期望的,并且不总是以一种有意义的简单方式分割。< / p>

因此,如果这是主要示例,则第一位代码可能就足够了。如果您正在进行更复杂的转换,我会考虑自己控制值并构建转换字符串,就像后一个示例一样。