Javascript 如何在鼠标移动时隐藏jQueryUI工具提示

Javascript 如何在鼠标移动时隐藏jQueryUI工具提示,javascript,jquery,jquery-ui,jquery-ui-tooltip,Javascript,Jquery,Jquery Ui,Jquery Ui Tooltip,我想在鼠标移动到目标上时隐藏jQueryUI工具提示,并且只在鼠标静止在目标上时显示 我相信这是windows中工具提示的标准行为 这怎么可能实现呢?这不是jQueryUI工具提示的默认行为,因此您必须绕开它。经过深思熟虑,这里是我的建议。您可以使用阈值来查看什么最适合您的用例 本质上,我的方法是,一旦工具提示打开,绑定将控制工具提示可见性的mousemove事件。工具提示关闭后,您将解除该mousemove处理程序的绑定。如果鼠标正在移动,控件将隐藏工具提示,或者检查鼠标是否停止移动(通过测量

我想在鼠标移动到目标上时隐藏jQueryUI工具提示,并且只在鼠标静止在目标上时显示

我相信这是windows中工具提示的标准行为


这怎么可能实现呢?

这不是jQueryUI工具提示的默认行为,因此您必须绕开它。经过深思熟虑,这里是我的建议。您可以使用阈值来查看什么最适合您的用例

本质上,我的方法是,一旦工具提示打开,绑定将控制工具提示可见性的
mousemove
事件。工具提示关闭后,您将解除该
mousemove
处理程序的绑定。如果鼠标正在移动,控件将隐藏工具提示,或者检查鼠标是否停止移动(通过测量事件发生后经过的时间,在特定阈值内),并显示工具提示。以下是带有适当注释的代码:

var isShown=false,//指示当前是否显示工具提示的标志
animationTime=400,//显示/隐藏工具提示动画时间
checkIfStoppedThreshold=1000;//检查鼠标是否移动前的毫秒数
$(“#目标”)。工具提示({
打开:功能(事件、用户界面){
//开始控制工具提示之前的移动次数
//要考虑到打开的初始调用可能会
//也会触发mousemove事件,所以我们忽略它minmovescont
//为了便于用户使用,需要重复多次。
//如果发生minMovesCount移动,我们可以开始控制
//每次鼠标停止移动时显示工具提示。
var minmovescont=15;
$('#target')。on('mousemove.mytooltip',function(){
如果(最小移动量>0){
民运--;
}如果(!isShown){
控件工具提示();
}
})
},
关闭:功能(事件、用户界面){
//解除鼠标移动处理程序的绑定,因为工具提示已关闭
$('#target').off('mousemove.mytooltip');
}
});
//在每一个mousemove上调用,在minmovescont mousemove发生之后
函数控制工具提示(){
变量工具提示=$('.ui工具提示'),
moveTime=Date.now();//mousemove事件的时间
//如果工具提示尚未隐藏,则隐藏工具提示
工具提示。淡出(动画时间);
//启动“计时器直到显示工具提示”
setTimeout(函数(){
var allowedPrecisionError=20;//检查鼠标移动时间的计时精度中允许的错误(以毫秒为单位)
//自上次mousemove事件以来已用毫秒数
var elapsedTime=Date.now()-moveTime;
//鼠标移动后允许经过的最大毫秒数
var thresholdTime=checkIfStoppedThreshold+allowedPrecisionError;
//如果当前时间与我们
//启动我们的计时器,这意味着鼠标停止移动
//我们可以显示工具提示

如果(elapsedTime我在阅读@nem的帖子后得出了这个解决方案:

            var waitTime = 500 // milliseconds to wait with mouse still over target before showing tooltip
            $("*[title]").tooltip({
                open: function(event, ui) {
                    /**
                    * tooltip opens on hover
                    * if mouse is moving we start a timer to show tooltip after waitTime
                    */
                    var tooltipTimer = window.setTimeout(function () {$(this).show();}, waitTime);
                    $(this).on('mousemove.mytooltip', function() {
                        // if mouse moves over target, we 1) hide tooltip, 2) cancel the timer and 3) start a  new timer to show tooltip after waitTime
                        $('.ui-tooltip').hide();
                        window.clearTimeout(tooltipTimer);
                        tooltipTimer = window.setTimeout(function () {$('.ui-tooltip').show();}, waitTime);
                    })
                }
            });

如果它是标准答案,那么它是可实现的。您的问题的答案将是
。假设这不是您想要的答案,请用您的短语回答question@TJ这里有……“这怎么可能实现”这不是
工具提示的默认行为吗?即使在web中也是如此?@anmarti nope,工具提示的默认行为(至少在Chrome中)是在一定延迟后显示的,当用户在元素上悬停时,这听起来是个好主意!我会尝试让您知道,谢谢!@arod,没问题,我添加了另一个可能的解决方案,希望其中一个能帮上忙:)@arod,我删除了第一个解决方案,并修改了第二个解决方案,因为在动画未完成时,它们都有一个闪烁的错误。现在代码稍微有点条理化和可自定义,闪烁的错误得到了修复。您的解决方案有一些问题,比如在第一次悬停在目标上时显示了工具提示,并且有些闪烁。但它确实存在给我指出了正确的方向。我非常感谢你。请看我的解决方案。