如何让popover出现在我的鼠标进入hover目标的位置?

这是一个示例代码,用于显示我的按钮下方的弹出窗口显示:

$.fn.popover.defaults = $.extend({} , $.fn.tooltip.defaults, { placement: 'bottom', content: '' 

现在我希望弹出窗口出现在光标移动的位置(不仅是顶部/底部/左/右,而是一个特定的位置,取决于用户将光标放在何处)。

怎么弄呢?

在bootstrap-tooltip.js中,替换(在第72行左右)

  , enter: function (e) { 

  , enter: function (e) { var mousePos = { x: -1, y: -1 }; mousePos.x = e.pageX; mousePos.y = e.pageY; window.mousePos = mousePos; 

并替换(约144行)

  case 'right': tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width} break 

  case 'right': tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width} break case 'mouse': tp = {top: window.mousePos.y, left: window.mousePos.x} break 

然后像这样调用你的popover:

 $('.pop').popover({'placement': 'mouse'}); 

这是一个快速肮脏的方式(黑客核心文件),但它的工作原理。 也许其他人有一个更好的方法。 请注意,弹出指针需要一些工作,因为它不会出现。

此示例在Bootstrap 2.0.3中进行了测试,但代码在2.2.2中显示类似。

对于bootstrap 3.xx

1.将属性atMouse:false添加到内联类Tooltip.DEFAULTS {}。

 Tooltip.DEFAULTS = { animation: true, placement: 'top', selector: false, template: '', trigger: 'hover focus', title: '', delay: 0, html: false, container: false, atMouse: false, viewport: { selector: 'body', padding: 0 } } 

2.转到方法“Tooltip.prototype.enter”中的第1368行并更改以下代码:

 if (obj instanceof $.Event) { self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true } 

至:

 if (obj instanceof $.Event) { self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true self.options.mousePos = {posX: obj['pageX'], posY: obj['pageY']} } 

3.在“Tooltip.prototype.show”方法的内部添加以下代码:

 if(this.options.atMouse) { pos['posY'] = this.options.mousePos['posY']; pos['posX'] = this.options.mousePos['posX']; } 

在这行代码之前:

 var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight) 

4.在代码后面的Tooltip.prototype.getCalculatedOffset方法的主体中:

 if(this.options.atMouse) { return placement == 'bottom' ? {top: pos.top + pos.height, left: pos.posX - (actualWidth / 2)} : placement == 'top' ? {top: pos.top - actualHeight, left: pos.posX - (actualWidth / 2)} : placement == 'left' ? {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.posX - actualWidth} : {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.posX} } 

5.Call工具提示/ popover这样的事情:

 $("[data-toggle='popover']").popover({ html: true, container: 'body', atMouse: true, trigger: 'hover', animation: false, placement: "top auto" }); 

为我工作。