2010-09-12 5 views
0

Я использую следующий сценарий JQuery для создания всплывающих подсказок, проблема в том, что всплывающая подсказка приближается к краю экрана, который он не переворачивает или не привязывается к краю.Изменить JQuery easyTooltip для обнаружения краев экрана

(function($) { 
$.fn.easyTooltip = function(options){ 
    var defaults = { // default configuration properties 
     xOffset: 10,   
     yOffset: 25, 
     tooltipId: "easyTooltip", 
     clickRemove: false, 
     content: "", 
     useElement: "" 
    }; 

    var options = $.extend(defaults, options); 
    var content; 
    var url; 

    this.each(function() {     
     var title = $(this).attr("title"); 
     var url = $(this).attr("tooltipURL"); 
     $(this).hover(function(e){ 
      if (url != "" && url != undefined) { 
       content = '<span class="loadingimage"></span> Loading...'; 
       tooltip(content); 
       $('#'+options.tooltipId).load(url, {"id":$(this).attr("value")}); 
      } else { 
       content = (options.content != "") ? options.content : title; 
       content = (options.useElement != "") ? $("#" + options.useElement).html() : content; 
       $(this).attr("title",""); 
       if (content != "" && content != undefined){   
        tooltip(content); 
       } 
      } 

      function tooltip(content) { 
       $("body").append("<div id='"+ options.tooltipId +"'>"+ content +"</div>");  
       $("#" + options.tooltipId) 
        .css("position","absolute") 
        .css("top",(e.pageY - options.yOffset) + "px") 
        .css("left",(e.pageX + options.xOffset) + "px")      
        .css("display","none") 
        .fadeIn("fast") 
      } 

     }, 
     function(){ 
      $("#" + options.tooltipId).remove(); 
      $(this).attr("title",title); 
     }); 
     $(this).mousemove(function(e){ 
      $("#" + options.tooltipId) 
       .css("top",(e.pageY - options.yOffset) + "px") 
       .css("left",(e.pageX + options.xOffset) + "px")     
     }); 
     if(options.clickRemove){ 
      $(this).mousedown(function(e){ 
       $("#" + options.tooltipId).remove(); 
       $(this).attr("title",title); 
      });    
     } 
    }); 

}; 

}) (jQuery);

+0

Http: // документы .jquery.com/Plugins/Tooltip – kennytm

+0

может показать вашу рабочую страницу? – 2010-09-12 08:02:13

+0

Он используется на новом веб-сайте, на котором я работаю на http://webcomictweets.com/, наведите на любой аватар или имя пользователя для примера. – Canadaka

ответ

0

jQuery Tools Tooltip (+ Dynamic Plugin) поддерживает это; Я предлагаю вам переключиться на использование этого или попробовать реализовать код на существующей настройке.

+0

Я посмотрел на другие скрипты jQuery, но все они кажутся раздутыми. Это более 7 КБ, тот, который я использую сейчас, составляет 1,8 КБ. Но одна из основных вещей, которые мне нравятся в easyTooltip, я могу загрузить содержимое всплывающей подсказки из внешнего php-файла, вместо того, чтобы помещать весь текст в тег title = "", который, как представляется, многие из этих всплывающих подсказок. – Canadaka

+0

Вы можете настроить экспорт jQuery Tools только на нужную вам функциональность и выбрать, чтобы его можно было минимизировать. Я уверен, что это снизит его ниже 7 КБ. Я также ожидаю, что функциональность позволит абстрагировать контент извне; это довольно разнообразный плагин. – Steve

0

Вместо

$("#" + options.tooltipId) 
      .css("top",(e.pageY - options.yOffset) + "px") 
      .css("left",(e.pageX + options.xOffset) + "px") 

Попробуйте что-то вдоль линий:

var x = (e.pageX + options.xOffset);//start with your current setting 
    //Check to see if it goes off screen 
    if ((x + $("#yourdiv").outerWidth()) >= $(window).width()) { 
      x = e.pageX - $("#tooltip").outerWidth(); 
     } 

, а затем повторить у и заменить существующий код курса:

 $("#" + options.tooltipId) 
      .css("top",(y) + "px") 
      .css("left",(x) + "px") 
Смежные вопросы