我显示一个带有嵌入式 SVG 的 HTML。我希望它检测鼠标事件,但它不适用于移动设备(Android Jellybean)。它适用于桌面浏览器。
这是一个演示页面: http ://artsyenta.org/misc/ss/j.touchtry1.html 。
如果您将鼠标拖到圆圈上,您会看到鼠标条目记录到名为“j_xxx”的元素中。这适用于 Firefox 和 Chrome。
打开您的 Android 平板电脑(我也在某人的 iPhone 上尝试过,结果相同)。在圆圈上拖动手指,您只会时不时地收到一个 touchenter 事件。没有其他显示。
您可以通过查看页面源代码来查看整个页面和代码。它不长,最长的部分是 SVG 定义。重要的部分是:
$(document).ready(function() {
makeSomethingHappen("hello");
});
function makeSomethingHappen(svg) {
placeATop(true);
$('[class^=j_]')
.on("mouseover", function(event) { logAction(event, this); })
.on("mouseout", function(event) { logAction(event, this); })
.on("touchstart", function(event) { logAction(event, this); })
.on("touchend", function(event) { logAction(event, this); })
.on("touchenter", function(event) { logAction(event, this); })
.on("touchleave", function(event) { logAction(event, this); })
.on("touchEnter", function(event) { logAction(event, this); })
.on("touchLeave", function(event) { logAction(event, this); });
}
var cntAct = 0;
function logAction(ev, ele) {
cntAct++;
var logSpan = $('#logTrace');
logSpan.html("" + cntAct + ": " + ev.type + " '" + $(ele).attr("class") + "'<br/>" + logSpan.html());
}
这是 SVG 的一部分:
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
id="jsvg" x="0px" y="0px" width="376.247px" height="364.318px" viewBox="140 110 130 120"
enable-background="new 0 0 376.247 364.318" xml:space="preserve">
<g id="Layer_1">
<path class="j_aa_" opacity="0.75" fill="#FFFFFF" stroke="#0071BC" stroke-width="0.9925" enable-background="new " d="M224.739,6.55l-6.414,23.957c-10.377-2.785-21.304-2.785-31.671,0L180.232,6.55C194.813,2.63,210.155,2.63,224.739,6.55z"/>
[snip]
</g>
</svg>
同样,我在桌面浏览器上检测到鼠标事件,但在移动浏览器上没有检测到触摸或鼠标事件。是否缺少技术,或者手机缺少某些东西?它在 iPhone 浏览器、Jellybean 上的 Google Chrome 和 Firefox 移动设备上失败。
在此先感谢,杰罗姆。