svg 实践之屏幕坐标与svg元素坐标转换
近期在做svg相关项目,很好用的东西要记下来:
1、基础知识就是根据 矩阵进行坐标转换,如下:
: 屏幕坐标 = 矩阵* svg对象坐标
2、javascript有个方法用于获取 svg对象 的转换矩阵CTM :svgObj.getScreenCTM(); 该矩阵将svg坐标转换为屏幕坐标
3、所以以上公式:已知屏幕坐标,已知矩阵,求svg对象坐标
4、如下:
5、javascript方法:矩阵.inverse() =矩阵的逆矩阵
6、代码如下:
api:
/*屏幕坐标转为svg坐标*/
coordinateTransform(screenPoint, someSvgObject) {
var CTM = someSvgObject.getScreenCTM();
return screenPoint.matrixTransform(CTM.inverse());
}
reportMouseCoordinates(svgElement, pageX, pageY, svgChild) {
var point = svgElement.createSVGPoint();
point.x =pageX;
point.y = pageY;
point = coordinateTransform(point, svgChild);
return point;
}
调用:
bindEvent(){
this.grid.addEventListener('click',(event) => {
let pageX = event.pageX;
let pageY = event.pageY;
let point = utils.reportMouseCoordinates(this.svg, pageX, pageY, this.grid);
}
}
dom:
<svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMidYMid meet">
<defs>
<pattern id="gridDot" x="" y="" width="" height="" patternUnits="userSpaceOnUse">
<path d="M0,0H1V1" stroke="#ccc" stroke-width="0.1" fill="none"></path>
</pattern>
<pattern id="gridBlock" x="" y="" width="" height="" patternUnits="userSpaceOnUse">
<path d="M0,0H1V1" stroke="#ccc" stroke-width="0.1" fill="none"></path>
</pattern>
</defs> <rect id="grid_10X10" x="" y="" width="100%" height="100%" fill="url(#gridDot)">
</rect>
<!-- <rect id="grid_20X20" x="" y="" width="100%" height="100%" fill="url(#gridBlock)">
</rect> -->
<!-- <text x="" y="" dx="20 20 20 20" dy="" style="font-size:20px; font-family: 'Arial'">ABCDE</text>
<path d="M100,0V200M0,100H200" stroke="red"></path> -->
</svg>
svg 实践之屏幕坐标与svg元素坐标转换的更多相关文章
- 使用 SVG 动画实现弹性的页面元素效果
Codrops 分享了一些给SVG元素加上弹性动画的灵感.实现的思路是把一个SVG元素整合成一个组件,然后从一个路径弹性动画到另一个.这种效果可以应用到像菜单,按钮或其它元素,使得交互更有趣,看起更原 ...
- 【HTML5-基础-SVG实践】
关于svg HTML页面常用加载svg图片方式: HTML元素 // data 和 type 至少指定一项 <object data = './public/icon.svg' width='2 ...
- 深入理解 SVG 系列(一) —— SVG 基础
来源:https://segmentfault.com/a/1190000015652209 本系列文章分为三个部分: 第一部分是 SVG 基础. 主要讲 SVG 的一些基础知识,包括 SVG 基本元 ...
- svg和canvas比较以及svg简单介绍
文章地址:https://www.cnblogs.com/sandraryan/ 什么是svg 可缩放矢量图形(Scalable Vector Graphics) 1. 一种使用XML描述的2D图形语 ...
- 多个SVG图形集成到一个SVG图形上
SVG:使用XML格式定义图像的可缩放矢量图形(Scalable Vector Graphics). 优点就不多说了,下面看看怎么将多个svg图形集成到一个svg图形上. 如果使用bootstrap框 ...
- Apache 处理svg工具包Apache(tm) Batik SVG Toolkit
Apache™ Batik SVG Toolkit¶ Overview¶ Batik is a Java-based toolkit for applications or applets that ...
- SVGO: Node.js 开发的 SVG 矢量图优化工具(svg压缩工具)
SVG图片压缩 这是个通过借助npm包的一种方式去压缩svg的图片,由于阿里的图库自己创建的图标有大小的限制,当我们想要自己用自己的图标的时候就可以使用这种方式去完成对svg的图片压缩. 1.下载no ...
- 原创 HTML5:JS操作SVG实践体会
在工业信息化系统里,常常需要动态呈现系统的数据在一张示意图里,用于展现系统状态,分析结果等.这样用JavaScript操作svg 元素就有现实意义.本人近期做了一些实践,现分享一下. 需求: 你下面这 ...
- SVG 动画实现弹性的页面元素效果
Codrops 分享了一些给SVG元素加上弹性动画的灵感.实现的思路是把一个SVG元素整合成一个组件,然后从一个路径弹性动画到另一个.这种效果可以应用到像菜单,按钮或其它元素,使得交互更有趣,看起更原 ...
随机推荐
- 201771010103 陈亚茹 《面向对象程序设计(java)》第一周学习总结
本人学号<面向对象程序设计(java)>第一周学习总结 第一部分:课程准备部分 填写课程学习 平台注册账号, 平台名称 注册账号 博客园:www.cnblogs.com https://w ...
- (一)iview的校验TypeError: Cannot read property 'validateField' of undefined"
一.问题描述 我是在自己封装了一个地址级联选择,然后想要每次改变了其中数据的时候,就进行一次单独校验,所以用到了iview对部分表单字段进行校验的方法validateField.其实一开始使用的时候是 ...
- windows10环境下QtCreator中出现skipping incompatible xxx when searching for xxx 问题解决办法
windows10环境下QtCreator中出现skipping incompatible xxx when searching for xxx 我再QtCreator中想导入一个外部库时,他提示不匹 ...
- 基本的访问控制列表ACL配置
摘要: 访问控制列表ACL (Access Control L ist)是由permit或 deny语句组成的一系列有顺序的规则集合,这些规则根据数据包的源地址.目的地址.源端口.目的端口等信息 来 ...
- Xmind8 Pro破解版
思维导图又叫心智导图,是表达发散性思维的有效图形思维工具 ,它简单却又很有效,是一种实用性的思维工具.思维导图运用图文并重的技巧,把各级主题的关系用相互隶属与相关的层级图表现出来,把主题关键词与图像. ...
- 走近源码:Redis如何清除过期key
"叮--",美好的周六就这么被一阵钉钉消息吵醒了. 业务组的同学告诉我说很多用户的帐号今天被强制下线.我们的帐号系统正常的逻辑是用户登录一次后,token的有效期可以维持一天的时间 ...
- OpenCV-Python | 图像的基本操作 十
目标 学会: 访问像素值并修改它们 访问图像属性 设置感兴趣区域(ROI) 分割和合并图像 本节中的几乎所有操作都主要与Numpy相关,而不是与OpenCV相关.要使用OpenCV编写更好的优化代码, ...
- TensorFlow系列专题(十三): CNN最全原理剖析(续)
目录: 前言 卷积层(余下部分) 卷积的基本结构 卷积层 什么是卷积 滑动步长和零填充 池化层 卷积神经网络的基本结构 总结 参考文献 一.前言 上一篇我们一直说到了CNN[1]卷积层的特性,今天 ...
- 树莓派 zeroWH 使用笔记
更新raspbian apt-get update apt-get upgrade 删除python2 sudo rm /usr/bin/python安装python3 sud ...
- Java合并png图片
package org.jimmy.autosearch2019.test; import java.awt.Graphics; import java.awt.image.BufferedImage ...