获取鼠标位置或元素位置

时间:2013-04-24 15:06:53

标签: javascript jquery

我正在使用工具提示插件,其中包含以下选项:

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

  2. 静态=真|假。选项Mouse = true时跟随鼠标。

  3. 我有一个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/中看到代码和演示。

    谢谢!

2 个答案:

答案 0 :(得分:2)

您需要考虑窗口的scrollTopscrollLeft

基本理念:

var win = $(window);
$tooltip.css( {
    left: position[0] + win.scrollLeft() + 'px', 
    top: position[1] + win.scrollTop() + 'px' 
});

答案 1 :(得分:1)

添加scrollTop
document.body.scrollTop

你会很高兴...

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

  

function(){             if(options.offset [1]&lt; 0)               return coordinates.top - Math.abs(options.offset [1]) - $ tooltip.outerHeight() + document.body.scrollTop ;             否则if(options.offset [1] === 0)               return coordinates.top - (($ tooltip.outerHeight() - $ this.outerHeight())/ 2) + document.body.scrollTop ;             其他               return coordinates.top + $ this.outerHeight()+ options.offset [1] + document.body.scrollTop ;

     

})