javascript - 在 Enyo 2.0 中使用 SVG 控件处理事件(对象或嵌入标记)

标签 javascript html events svg enyo

我有这个用于加载 SVG 文档的控件(有效,SVG 显示正常)

enyo.kind({
    name: "SvgParser",
    kind:"Control",
    fit: true,
    published: {
        source:''
    },
    components:[{ 
        tag: "object", // Or Embed
        name:'svgObject', 
        classes: 'SvgObject',
        ontap:'click',
        onload:'loaded'
    }],
    create: function() {
        this.inherited(arguments);
        this.sourceChanged();
    },
    click: function(inSender, inEvent) {
        console.log('click'); // doesn't happen
    },
    sourceChanged: function() {
         this.$.svgObject.attributes.type = 'image/svg+xml';
         this.$.svgObject.attributes.data = this.source;
    },
    loaded: function(inSender, inEvent) {
         console.log('loaded'); // doesn't happen
    }
});

但是“tap”和“load”的事件处理程序永远不会被触发,有人能解释一下我做错了什么吗?提前致谢

最佳答案

你实际上有两个不同的问题,一个阻止了 load处理程序停止工作,另一个阻止 tap处理程序停止工作。

load处理程序未被调用,因为您需要告诉 Enyo 监听 load <object> 上的事件标签。您可以通过调用 enyo.makeBubble() 来完成此操作.

tap处理程序未被调用,因为在 <object> 上单击/点击事件包含 SVG 图像的标签被路由到图像本身的 DOM 中。要在 HTML 中拦截它们,您需要包装 <object>在透明的<div>并给出 <object>负面z-index .

我在这里制作了一个 fiddle 来说明这两种技术:http://jsfiddle.net/rbWMr/

有关 SVG 包装技术的背景,请参阅 Making an svg image object clickable with onclick, avoiding absolute positioning .

关于javascript - 在 Enyo 2.0 中使用 SVG 控件处理事件(对象或嵌入标记),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13343560/

相关文章:

javascript - 使用 JS 有向图矩阵可视化

c# - 检查事件是否注册

javascript - 防止重复函数 onchange 事件 jQuery

HTML/CSS 导航位置

javascript - 第一次尝试时我的悬停过渡不流畅

.net - 如何捕获文件复制/移动事件的详细信息,例如源文件名

java - WatchService:错过和未处理的事件

javascript - 应用 appendTo 将排序节点添加到应用模板

javascript - 根据 Angular 中的验证模式的错误消息

javascript - 如何使用 React-Apollo 处理 GraphQL 错误?