javascript – 使用Hammer.js缩放SVG
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 使用Hammer.js缩放SVG,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2482字,纯文字阅读大概需要4分钟。
内容图文
![javascript – 使用Hammer.js缩放SVG](/upload/InfoBanner/zyjiaocheng/793/6437c1faebab4bd8b7686de987e92569.jpg)
我正在编写一个使用SVG显示信息的跨平台Web应用程序.我需要一个多点触控界面来平移和缩放SVG图形.根据我的研究,似乎Hammer.js是我最好的方法,我使用的是jQuery库版本.
我可以使用SVG的viewBox属性平移和缩放图像.我遇到的问题是在缩放缩放期间使用中心点信息(相对于左上角的缩放).无论在我的图像中的哪个中心点,都应保持在夹点的中心位置.显然,解决方案是修改viewBox的前两部分,但我无法确定正确的值.中心点(event.gesture.center)似乎在浏览器页面坐标中,因此我需要弄清楚如何可靠地缩放它,然后计算viewBox x和y坐标.我找了一些例子,但找不到任何相关的东西.
使用viewBox属性是扩展SVG图像的最佳方法吗?还有更好的选择吗?有没有人有从缩放中心缩放SVG图像的示例代码?
此外,我注意到即使我将事件处理绑定到SVG元素,捏手势似乎也可以在页面的任何位置工作.它不是pinch的默认浏览器处理,因为它只使用我的代码缩放SVG图像.这是我用来绑定pinch事件的代码:
$(window.demoData.svgElement).hammer().on("pinch", function (event) {
event.preventDefault();
...
});
感谢您对这两个问题的任何帮助.
解决方法:
我很高兴其他人一直在寻求解决这些问题.看来SVG到目前为止还没有得到足够的重视.
几个月来,我一直在寻找和研究解决方案.
首先,您有三种移动SVG的选项.
>如你所说,使用viewBox.如果您想将图像视为单个项目,我认为这是最佳解决方案.
>您可以使用SVG元素的CSS转换.缺点是这会导致像素化,但意味着您可以使用其他类型元素存在的解决方案
>您可以对SVG中的元素或元素组使用svg转换.
为了回答代码问题,可以如下描述中心夹点.
首先,您需要使用screenCTM(坐标变换矩阵)将夹点事件中心点从屏幕坐标转换为SVG坐标.如果point有坐标(x,y),那么你的viewbox的原点需要进行相当于的转换
>翻译(-x,-y)
>比例(scalefactor)
>翻译(x,y)
我已经把这项工作“主要”放在我称之为hammerhead的库中,该库在hammerjs上运行.这是一个example的实际操作.我不会给你代码来完全解决你的问题,因为有太多的代码去你放的地方’…’我最终写了一个viewBox对象来操纵.这里仅供参考,是我用来操作它的代码.
scale: function(scale, center){
var boxScale = 1.0/scale;
center = center || this.center();
var newMinimal = this.getMinimal().subtract(center).multiply(boxScale).add(center);
var newMaximal = this.getMaximal().subtract(center).multiply(boxScale).add(center);
var newViewBox = viewBox(newMinimal, newMaximal, this.getValidator());
return newViewBox.valid()? newViewBox : null;
}
这种方法并非没有问题.更改viewBox是非常计算密集的我不会在手机上进行愉快的滚动体验,除了具有很少元素的图像.如果您在响应操作时更改视图一次,它将很好地工作.例如,向左键向上键.
我已经在这些回购中探讨了我上面提到的一些其他选项
> svg maneuver
> svg agile
> svgViewer
正如我上次提到的那样.这些都是单独使用其中一种方法.为了获得平滑滚动和没有像素化,我认为需要两者的结合.我正在为另一个图书馆工作.
内容总结
以上是互联网集市为您收集整理的javascript – 使用Hammer.js缩放SVG全部内容,希望文章能够帮你解决javascript – 使用Hammer.js缩放SVG所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。