图像有时比单词能解释得更好。



因此,我的自写jquery工具提示存在一个非常奇怪的问题(我实际上想避免使用某些lib,因为我的用例实际上非常简单,这里不需要一些some肿的lib)。

当我从右到左或从上到下移动鼠标时,一切都很好。当我从左到右或从下到上移动鼠标时,工具提示变得口吃-请参阅gif。

数据属性引用了我的工具提示

<a href="#" data-tooltip="#myTooltip">HOVER ME</a>
<div id="myTooltip">Tooltip Content Foo Bar</div>


为了避免在定位元素时出现问题,我稍后将其与jQuery一起移至正文。

好了,现在我已经知道了我的工具提示是怎么回事。有什么想法为什么会口吃?
顺便说一句:对我来说,这在所有现代浏览器中都在发生。

$(function () {

    $('[data-tooltip]').each(function () {

        $($(this).data('tooltip')).appendTo('body');

        // this mouseenter listener could be safely removed, probably
        // (don't forget to move the display:block part to mousemove tho)
        $(this).on('mouseenter', function (e) {
            $($(this).data('tooltip')).css({
                display: 'block',
                left: e.pageX,
                top: e.pageY
            });
        });
        $(this).on('mousemove', function (e) {
            $($(this).data('tooltip')).css({
                left: e.pageX,
                top: e.pageY
            });
        });
        $(this).on('mouseleave', function () {
            $($(this).data('tooltip')).hide();
        });
    });

});

最佳答案

我想我为您找到了解决方案。可能不是您真正想要的东西,但我认为它将对您想要使用的东西起作用。

这是JSfiddle:http://jsfiddle.net/nj1hxq47/3/

好吧,关键是确保鼠标永远不会移到要拖动的元素上。因此,确保要拖动的元素和悬停的元素之间至少有1 xp,将确保它不会触发onleavemouse事件。

var yPos = e.pageY + 5;


我相信有更好的方法可以做到这一点...但是我希望这会有所帮助。

编辑:主要问题是鼠标移过要移动到鼠标位置的元素,从而触发onmouseleave事件,导致元素被隐藏并以毫秒为单位显示。因为鼠标离开事件在移动之前触发。

关于javascript - jQuery工具提示口吃,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34119683/

10-10 00:23
查看更多