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中的问题。如果我设置statictop
属性(例如事件元素的高度),也不会出现问题。我已经尝试使用超时来解决这个问题。我不确定我是做错了什么,还是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', '');
}