0

我正在开发具有以下选项的工具提示插件:

  1. 鼠标 = 真|假。相对于鼠标或元素的工具提示位置;

  2. 静态 = 真|假。Follow mouse when option Mouse = true.

我有一个 JSFiddle 示例:http: //jsfiddle.net/mdmoura/RPUX6/

问题:

当我将鼠标放在列表的最后一个工具提示上时,位置是错误的。

每次我滚动页面时都会发生这种情况......我不知道为什么。

设置位置的代码部分是:

$(this).each(function (e) {
  // SOME CODE  

  $this.mouseenter(function (e) {

    var $tooltip =
      $("<div>")
      .attr("class", options.class)
      .html(options.content !== '' ? (typeof options.content === 'string' ? options.content : options.content($this, $tooltip)) : tooltip.title)
      .appendTo('body');

    $this.attr('title', '');

    var position = [0, 0];

    if (options.mouse) {
      position = [e.clientX + options.offset[0], e.clientY + options.offset[1]];
    } else {
      var coordinates = $this[0].getBoundingClientRect();       
      position = [
        (function () {
          if (options.offset[0] < 0)
            return coordinates.left - Math.abs(options.offset[0]) - $tooltip.outerWidth();
          else if (options.offset[0] === 0)
            return coordinates.left - (($tooltip.outerWidth() - $this.outerWidth()) / 2);
          else
            return coordinates.left + $this.outerWidth() + options.offset[0];

        })(),
        (function () {
          if (options.offset[1] < 0)
            return coordinates.top - Math.abs(options.offset[1]) - $tooltip.outerHeight();
          else if (options.offset[1] === 0)
            return coordinates.top - (($tooltip.outerHeight() - $this.outerHeight()) / 2);
          else
            return coordinates.top + $this.outerHeight() + options.offset[1];

        })()
      ];
    }

    $tooltip.css({ left: position[0] + 'px', top: position[1] + 'px' });

您还可以在http://jsfiddle.net/mdmoura/RPUX6/中查看代码和演示。

谢谢你!

4

2 回答 2

2

您需要考虑窗口的scrollTopscrollLeft

基本思路:

var win = $(window);
$tooltip.css( {
    left: position[0] + win.scrollLeft() + 'px', 
    top: position[1] + win.scrollTop() + 'px' 
});
于 2013-04-24T15:11:21.443 回答
1

添加滚动顶部

document.body.scrollTop

你会很高兴去的..

在您的代码中进行这些更改

function () { if (options.offset[1] < 0) return coordinates.top - Math.abs(options.offset[1]) - $tooltip.outerHeight() +document.body.scrollTop ; else if (options.offset[1] === 0) 返回坐标.top - (($tooltip.outerHeight() - $this.outerHeight()) / 2) +document.body.scrollTop ; 否则返回坐标.top + $this.outerHeight() + options.offset[1] +document.body.scrollTop ;

})

于 2013-04-24T15:18:14.130 回答