javascript - 移动设备上的 SVG 尺寸与浏览器仿真不同
问题描述
我有一个 svg,我想使用单击处理程序来确定用户单击了哪个象限。所以我获取指针坐标,通过矩阵变换运行它们以获取 svg 坐标并与 svg 大小进行比较。这似乎适用于桌面浏览器和移动仿真。它不适用于实际的手机,因为我得到了不同的 svg 尺寸。
这是代码笔,您必须单击内部才能读出尺寸。
https://cdpn.io/seansly/debug/jOwQRoN/WPMLYRJXqxJr
我想知道我是否配置错误。
这是生成尺寸读数的点击处理程序:
function handleClick(e) {
if (zoomed) {
zoomOut();
zoomed = false;
return;
}
var quadrant = 0;
var pt = svgCoords(e);
var x = pt.x;
var y = pt.y;
var width = svg.width.baseVal.value;
var height = svg.height.baseVal.value;
document.querySelector("#v1").innerHTML = "width: " + width;
document.querySelector("#v2").innerHTML = "height: " + height;
document.querySelector("#v3").innerHTML = "x: " + x;
document.querySelector("#v4").innerHTML = "y: " + y;
if (x < (width / 2) && y < (height / 2)){
quadrant = 1;
} else if (x < (width / 2) && y > (height / 2)) {
quadrant = 2;
} else if (x > (width / 2) && y > (height / 2 )) {
quadrant = 3;
} else if (x > (width / 2) && y < (height / 2)) {
quadrant = 4;
}
if (!zoomed && quadrant > 0) {
zoomOnQuadrant(quadrant);
zoomed = true;
}
}
function svgCoords(e) {
var pt = new DOMPoint();
pt.x = e.clientX;
pt.y = e.clientY;
return pt.matrixTransform(svg.getScreenCTM().inverse());
}
然后是两个不同的结果:
解决方案
推荐阅读
- linux - 安装arch后无法上网
- java - 从 C++ 到 Java——什么是 Gradle
- c# - 在 .NET Framework 4 中使用多个环境
- javascript - 制表编辑器选择下拉菜单无法正常工作
- swift - UIActivityViewController 不适用于 WKWebView
- azure-devops - 在 azure 多级管道 (YAML) 中将变量从一个作业传递到另一个作业
- extjs - Extjs 验证表单复选框字段
- javascript - Highcharts 动态数据更新失败
- c# - 实体框架核心和延迟加载问题
- html - 允许 html 文件在 iframe django 中显示