2013-04-24 4 views
0

Я работаю на подсказке плагин со следующими параметрами:Получить мышь Позиция или элемент Позиция

  1. Мышь = True | Ложь. Позиция подсказки относительно мыши или элемента;

  2. Static = True | False. Следуйте мыши, если опция 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/.

Спасибо!

ответ

2

Вам необходимо указать scrollTop и scrollLeft окна.

Основная идея:

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

Это работает! спасибо –

1

Добавить scrollTop по

document.body.scrollTop 

И вы будете хорошо идти ..

В коде сделать эти изменения

функции() { if (o ptions.offset [1] < 0) return координат.top - Math.abs (options.offset [1]) - $ tooltip.outerHeight() + document.body.scrollTop; else if (options.offset [1] === 0) return координат.top - (($ tooltip.outerHeight() - $ this.outerHeight())/2) + document.body.scrollTop; еще return координат.top + $ this.outerHeight() + options.offset [1] + document.body.scrollTop;

})

Смежные вопросы