将SVG重置为原始变换矩阵
Reset SVG to original transform matrix
我试图将SVG重置回其原始变换矩阵属性。我有一个缩放函数,它使用这个矩阵来放大和缩小SVG。但是,我希望能够将SVG重置回它最初拥有的转换矩阵。
我首先将transform matrix属性加载到一个数组中,然后在我的scale函数中使用它。
我如何存储原始值,使它们不会被我的缩放函数触及,所以我可以使用它们来重置SVG?
这是我的jsfield
这是我的脚本:
$(document).ready(function() {
var newMatrix;
var transMatrix = $("#svgGroup").attr("transform").replace(/[^0-9.,]+/, "");
transMatrix = transMatrix.split(",");
var origMatrix = [1,0,0,1, parseFloat(transMatrix[4]), parseFloat(transMatrix[5])];
$("#out").click(function() {
zoom(0.8)
});
$("#in").click(function() {
zoom(1.25);
});
$("#reset").click(function() {
alert(origMatrix)
$("#svgGroup").attr("transform", "matrix(" + origMatrix + ")");
});
function zoom(scale) {
for (var i=0; i<origMatrix.length; i++) {
origMatrix[i] *= scale;
}
newMatrix = "matrix(" + origMatrix.join(' ') + ")";
$("#svgGroup").attr("transform", newMatrix);
}
});
您必须深度克隆原始数组。为了做到这一点,使用.slice(0)
var origMatrix = [1,0,0,1, parseFloat(transMatrix[4]), parseFloat(transMatrix[5])];
var initialValue = origMatrix.slice(0);
现在你可以在你的重置功能中使用它。
$("#reset").click(function() {
origMatrix = initialValue.slice(0);
$("#svgGroup").attr("transform", "matrix(" + origMatrix + ")");
});
jsfiddle
由于不使用SVG DOM,似乎使这比需要的困难得多。重置仅仅是将比例变回1的问题。
下面是一些简化的代码。
$(document).ready(function() {
$("#out").click(function() {
zoom(0.8)
});
$("#in").click(function() {
zoom(1.25);
});
$("#reset").click(function() {
scale = 1.0 / $("#svgGroup")[0].transform.baseVal.getItem(0).matrix.a;
zoom(scale);
});
function zoom(scale) {
var transform = $("#svgGroup")[0].transform.baseVal.getItem(0);
transform.matrix.a *= scale;
transform.matrix.d *= scale;
transform.matrix.e *= scale;
transform.matrix.f *= scale;
}
});
相关文章:
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- 使用jQuery从原始页面内容创建iframe
- 从客户端获取修改后的对象,并将其与服务器上的原始对象组合
- 我如何制作一个JS函数,它可以从相似的原始颜色双向更改为某个颜色
- 查找仅适用于原始图像的图像放大算法的名称
- 如何在使用Javascript浏览网站时处理原始窗口
- markrwithlabel.js(第三方)原始文件链接断开
- 在Javascript中重新分配对象变量时,原始对象会发生什么
- 如何在玩TimelineMax(GSAP)后重置原始位置
- 在编译阶段后创建新的DOM树,或者继续使用原始修改的DOM
- 原始javascript将json对象中的项目打印到列表中的屏幕上
- 我们可以用参数对象集合而不是原始数据来调用JavaScript collection.reduce()方法吗
- django没有访问控制允许删除原始标头
- JQuery:使用clone()生成的元素不采用原始的事件属性
- HTML5 Canvas访问控制允许原始错误
- 使用KineticJS变换(移动/缩放/旋转)形状
- 如何使用JavaScript粘贴原始二进制文件而不出现“无效字符”错误
- 如何使用JavaScriptLib将字符串(WYSIWYG)转换为原始html
- 从ajax请求中获取原始文本
- 将SVG重置为原始变换矩阵