Focus、blur、focusin、focusout,不适用于 D3 和 SVG 元素?有其他选择吗?
Focus, blur, focusin, focusout, don't work with D3 and SVG Elements? Is there an alternative?
我正在使用 d3 库在 SVG 中创建小部件。在 SVG 中,我正在尝试执行以下操作:
有可点击的小矩形。一旦可点击,他们应该“放大”并显示一些输入字段。当我在矩形外单击时,我希望它们“取消放大”并再次删除输入字段。
小矩形:
点击后放大(还没有输入框):
当我在白色矩形外点击时,我希望它恢复到图 1:
我通过点击事件触发放大:
let whiteRect = node.append("g")
.on('click', function(a) {
// Trigger enlarge function
return a;
})};
而且我想使用模糊或聚焦事件触发“点击外部”。但这似乎不适用于 SVG。像这样:
let whiteRect = node.append("g")
.on('blur', function(a) {
// Trigger "un-enlarge" function
return a;
})};
我一直在做一些搜索,似乎在 SVG 2 中可能支持这一点,但似乎没有任何浏览器实现这一点。
有人知道我该如何实现吗?我知道我可以为整个 SVG 添加一个 onclick 事件侦听器,并在其中编写一些逻辑来识别我是否正在单击放大的矩形。但如果可能的话,我更喜欢使用更简单的东西,比如模糊或聚焦。有什么想法吗?
发布后不久,我发现了这个关于聚焦 svg 元素的教程:https://allyjs.io/tutorials/focusing-in-svg.html
事实证明,如果您将焦点事件添加到元素,它就会变得可聚焦,并且还会获得模糊事件。所以我所做的是添加一个空的焦点事件以便能够使用模糊。
let whiteRect = node.append("g")
.on('click', function(a) {
// Trigger enlarge function
return a;
})}
.on('focus', function(a) {
// Empty focus event
return a;
})}
.on('blur', function(a) {
// Trigger un-enlarge function
return a;
})};
这对我有用。
我正在使用 d3 库在 SVG 中创建小部件。在 SVG 中,我正在尝试执行以下操作:
有可点击的小矩形。一旦可点击,他们应该“放大”并显示一些输入字段。当我在矩形外单击时,我希望它们“取消放大”并再次删除输入字段。
小矩形:
点击后放大(还没有输入框):
当我在白色矩形外点击时,我希望它恢复到图 1:
我通过点击事件触发放大:
let whiteRect = node.append("g")
.on('click', function(a) {
// Trigger enlarge function
return a;
})};
而且我想使用模糊或聚焦事件触发“点击外部”。但这似乎不适用于 SVG。像这样:
let whiteRect = node.append("g")
.on('blur', function(a) {
// Trigger "un-enlarge" function
return a;
})};
我一直在做一些搜索,似乎在 SVG 2 中可能支持这一点,但似乎没有任何浏览器实现这一点。
有人知道我该如何实现吗?我知道我可以为整个 SVG 添加一个 onclick 事件侦听器,并在其中编写一些逻辑来识别我是否正在单击放大的矩形。但如果可能的话,我更喜欢使用更简单的东西,比如模糊或聚焦。有什么想法吗?
发布后不久,我发现了这个关于聚焦 svg 元素的教程:https://allyjs.io/tutorials/focusing-in-svg.html
事实证明,如果您将焦点事件添加到元素,它就会变得可聚焦,并且还会获得模糊事件。所以我所做的是添加一个空的焦点事件以便能够使用模糊。
let whiteRect = node.append("g")
.on('click', function(a) {
// Trigger enlarge function
return a;
})}
.on('focus', function(a) {
// Empty focus event
return a;
})}
.on('blur', function(a) {
// Trigger un-enlarge function
return a;
})};
这对我有用。