【问题标题】:How to make popover appear where my mouse enters the hover target?如何使弹出框出现在我的鼠标进入悬停目标的位置?
【发布时间】:2013-02-07 03:35:12
【问题描述】:

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

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

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

如何获得?

【问题讨论】:

标签: javascript jquery twitter-bootstrap bootstrap-popover mouse-cursor


【解决方案1】:

在 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

然后像这样调用你的弹出框:

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

这是一种快速的方法(破解核心文件),但它确实有效。也许其他人有更好的方法。请注意,弹出指针需要一些工作,因为它不会出现。

此示例在 Bootstrap 2.0.3 中进行了测试,但代码在 2.2.2 中看起来相似。

【讨论】:

    【解决方案2】:

    对于引导程序 3.x.x

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

      Tooltip.DEFAULTS = {
       animation: true,
       placement: 'top',
       selector: false,
       template: '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',
       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. 像这样调用工具提示/弹出框:

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

    为我工作。

    【讨论】:

      猜你喜欢
      • 2013-03-05
      • 1970-01-01
      • 1970-01-01
      • 2016-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-04
      • 1970-01-01
      相关资源
      最近更新 更多