jQuery绑定事件异常行为

b5lpy0ml  于 2022-11-03  发布在  jQuery
关注(0)|答案(1)|浏览(170)

我有用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();

        };
23c0lvtd

23c0lvtd1#

从您发布的代码片段来看,问题似乎出在您的缩放库代码中,特别是以下代码段:

$(source)
        .on('mouseleave', stop)

mousestop插件检查mouseenter/mouseleave事件,但是您的缩放库也处理mouseleave事件,这似乎在两个脚本之间造成了混淆。但是,如果没有jsFiddle,要弄清楚发生了什么并不容易。如果这不是问题所在,您可以创建一个jsFiddle示例吗?

相关问题