Javascript svgPanZoom:禁用平移时单击侦听器
这是一个图书馆特有的问题 我有一个SVG元素,带有一些Javascript svgPanZoom:禁用平移时单击侦听器,javascript,svgpanzoom,Javascript,Svgpanzoom,这是一个图书馆特有的问题 我有一个SVG元素,带有一些标记。通过jQuery,我处理对这些元素的点击:$('svg')。在('click','a',function(){…}) 现在,我添加了上面提到的用于缩放和平移SVG元素的库。这非常有效,除了每次当光标位于a元素上时,它都会触发click侦听器 当鼠标由平移产生时,如何防止侦听器触发?您可以尝试将自定义事件处理程序添加到svgPanZoom中,如中所示 您应该钩住mousedown、mousemove和mouseup事件。 事情的顺序应该是
标记。通过jQuery,我处理对这些元素的点击:$('svg')。在('click','a',function(){…})
现在,我添加了上面提到的用于缩放和平移SVG元素的库。这非常有效,除了每次当光标位于a
元素上时,它都会触发click侦听器
当鼠标由平移产生时,如何防止侦听器触发?您可以尝试将自定义事件处理程序添加到svgPanZoom中,如中所示 您应该钩住
mousedown
、mousemove
和mouseup
事件。
事情的顺序应该是这样的:
- 在库启动之前钩住单击
- 在
上设置可能发生单击的标志(例如mousedown
)willClick=true
- 在
上禁用jquerylistener并将您的标志设置为falsemousemove
- 在
检查标志是否为false并启用jquery侦听器mouseup上
- 如果用户仅单击:
被触发mousedown
被触发mouseup
被激发单击
- 如果用户pans:
被触发mousedown
被激发,侦听器被禁用(可能多次)mousemove
被激发,监听器重新启用mouseup
另一种方法是在
mousemove
事件和jquery回调内部设置一个全局标志wasPanned
,以检查并重置该标志。对您来说可能太晚了,不过,我想分享我的解决方案:
我使用beforePan设置一个属性,该属性当前已禁用单击
在click eventhandler中,如果click当前处于禁用状态,则检查属性。如果是这样,请不要执行任何操作,而是将属性设置回原位。下次,将调用click eventhandler,当您实际单击时,单击操作将正常执行
beforePan: function(oldPan, newPan) {
svgPolygons.clickDisabled = true;
},
function clickerHandler() {
if (!svgPolygons.clickDisabled) {
// perform click action
} else {
// enable click again
svgPolygons.clickDisabled = false;
}
}
在上面的代码中,svgPolygons是SVG中的一个元素,我使用它来存储属性。当然,如果单击当前被禁用,任何其他地方都可以用来存储