Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQuery mouseenter,mouseleave FF中的意外行为_Jquery - Fatal编程技术网

jQuery mouseenter,mouseleave FF中的意外行为

jQuery mouseenter,mouseleave FF中的意外行为,jquery,Jquery,我试图做的是在mouseenter事件上附加一个div,并将该新div的top属性设置为事件的鼠标位置。我遇到的问题是,当我输入更靠近事件元素边缘的鼠标时(例如,元素宽度的四分之一,元素宽度为60px),事件与mouseleave事件交替激发,产生闪烁效果。我只注意到FF中的问题。如果我设置statictop属性(例如事件元素的高度),也不会出现问题。我已经尝试使用超时来解决这个问题。我不确定我是做错了什么,还是FF出了问题 有什么办法可以阻止这种行为吗?请放轻松,因为这是我在这里的第一篇帖子:

我试图做的是在
mouseenter
事件上附加一个div,并将该新div的
top
属性设置为事件的鼠标位置。我遇到的问题是,当我输入更靠近事件元素边缘的鼠标时(例如,元素宽度的四分之一,元素宽度为60px),事件与
mouseleave
事件交替激发,产生闪烁效果。我只注意到FF中的问题。如果我设置static
top
属性(例如事件元素的高度),也不会出现问题。我已经尝试使用超时来解决这个问题。我不确定我是做错了什么,还是FF出了问题

有什么办法可以阻止这种行为吗?请放轻松,因为这是我在这里的第一篇帖子:)

例如:

HTML

将讨论的元素追加到DOM的函数:

function columnHover(event, trigger){   
  var targetPopup = trigger.siblings('.colPopup');
  targetPopup = targetPopup.clone().appendTo('Body').css({'visibility' : 'hidden', 'display' : ''});

  var colOffset = trigger.offset();
  var popupWidth = targetPopup.width();
  var popupHeight = targetPopup.height();
  var colWrapPos = trigger.closest('.columnWrap').position();
  var containerWidth = trigger.closest('div#chartWrapper').width();

  var posX = (colWrapPos.left > (containerWidth / 2)) ? colOffset.left - popupWidth : colOffset.left + (trigger.width() / 2);
  var posY = event.pageY - popupHeight;
  //var posY = colOffset.top;

  targetPopup.css({'left' : posX, 'top' : posY});
  targetPopup.css('visibility', '');        
}

尝试
var posY=event.pageY-popuscuight-1以确保弹出窗口的创建距离光标位置稍远


我认为问题在于Firefox甚至允许像素位置的十进制值。这意味着弹出窗口是在光标的正下方创建的,这当然意味着你已经离开了
。冲洗并重复。

也许你可以制作一个jsfiddle.net来更好地说明你的问题。解决了!感谢您的快速重播。正如您所说的,问题确实是新的div在鼠标光标的正下方追加。然而,这很难实现,因为在其他浏览器中,mouseout事件在鼠标光标移出之前不会在附加的div上触发。
$(document).ready(function(){

var colHoverTimer;
var popupOpen = false;

$('.column.col_hover').mouseenter(function(e){ 
    e.stopPropagation();
    if (popupOpen === false){
        popupOpen = true;
        var trigger = $(e.target).closest('.col_hover');
        colHoverTimer= setTimeout(function(){columnHover(e, trigger)}, 500);
    }
});

$('.column.col_hover').mouseleave(function(e){
        console.log('mouseout');
        clearTimeout(colHoverTimer);
        $('body > .colPopup').remove();
        popupOpen = false;
});
});
function columnHover(event, trigger){   
  var targetPopup = trigger.siblings('.colPopup');
  targetPopup = targetPopup.clone().appendTo('Body').css({'visibility' : 'hidden', 'display' : ''});

  var colOffset = trigger.offset();
  var popupWidth = targetPopup.width();
  var popupHeight = targetPopup.height();
  var colWrapPos = trigger.closest('.columnWrap').position();
  var containerWidth = trigger.closest('div#chartWrapper').width();

  var posX = (colWrapPos.left > (containerWidth / 2)) ? colOffset.left - popupWidth : colOffset.left + (trigger.width() / 2);
  var posY = event.pageY - popupHeight;
  //var posY = colOffset.top;

  targetPopup.css({'left' : posX, 'top' : posY});
  targetPopup.css('visibility', '');        
}