我有用vanilla JavaScript编写的代码,它在运行时的某个时刻触发自定义事件,该事件由jQuery通过以下代码段进行处理:
// Fired on when snapshot is ready
$(document).bind('SnapshotReady', function(e) {
$('#image_container').zoom(); // zoom library
$(document).on('mousestop', '.zoomImg', function() {
alert('mousestop event occurs');
})
});
问题是mousestop
事件从来没有这样调用过,在zoom库的代码中,我们动态创建了.zoomImg
类的元素,它有如下的事件处理器:
$img.on('mousemove', zoom.move);
但如果我把上面的行改成:
$img
.on('mousemove', zoom.move)
.on('mousestop', function() {
// strange, but event in other code is fired that way
});
...一切正常,但我不想做两次计算,我需要在第一段代码中触发此事件,而不是在缩放库的代码中。
用于实现mousestop
事件的库如下:https://github.com/richardscarrott/jquery-mousestop-event/blob/master/jquery.event.mousestop.js
编辑:
/* The core code of zoom library */
img.onload = function () {
var zoom = $.zoom(target, source, img);
function start() {
zoom.init();
// Skip the fade-in for IE8 and lower since it chokes on fading-in
// and changing position based on mousemovement at the same time.
$img.stop();
$img.on('mousemove', zoom.move);
zoom.automove();
}
function stop() {
$img.clearQueue().stop();
}
$(source).on('mouseleave', stop)
start();
};
1条答案
按热度按时间23c0lvtd1#
从您发布的代码片段来看,问题似乎出在您的缩放库代码中,特别是以下代码段:
mousestop插件检查mouseenter/mouseleave事件,但是您的缩放库也处理mouseleave事件,这似乎在两个脚本之间造成了混淆。但是,如果没有jsFiddle,要弄清楚发生了什么并不容易。如果这不是问题所在,您可以创建一个jsFiddle示例吗?