2009-03-09 2 views
97

Я пытаюсь создать «пузырь», который может появиться, когда событие onmouseover будет запущено и останется открытым до тех пор, пока мышь находится над элементом, который выбросил событие onmouseover ИЛИ, если мышь перешел в пузырь. Мой пузырь должен будет иметь все манеры HTML и стиль, включая гиперссылки, изображения и т. Д.jQuery Popup Bubble/Tooltip

Я в основном выполнил это, написав около 200 строк уродливого JavaScript, но мне бы очень хотелось найти плагин jQuery или некоторые другие способ немного почистить.

+1

@bluefeet Не в теме? Шутки в сторону? Парень задал вопрос о том, как сократить его 200 строк кода, используя JQuery, и он использовался почти четверть миллиона раз (только что решил мою проблему), и вы отметили его тему? Что об этом предлагает более упрямые ответы, чем любой другой вопрос? –

+0

@ ChrisSharp Вы прочитали, почему он был закрыт? Он специально просит «хороший плагин jQuery для создания причудливых пузырей». Вопросы, требующие рекомендаций, не соответствуют темам, но если вы считаете, что это можно переписать, чтобы сделать это по теме, тогда не стесняйтесь предлагать редактирование, чтобы получить его в форме. – Taryn

ответ

155

Qtip is the best one I've seen. Это лицензия MIT, красивая, имеет всю необходимую конфигурацию.

Мой любимый легкий вариант: tipsy. Также лицензирован MIT. Это вдохновило Bootstrap's tooltip plugin.

+6

Безусловно, самое лучшее. Одна строка кода и все другие огромные решения, предлагаемые другими. Я надеюсь, что этот ответ проголосовали. –

+2

Qtip имеет проблемы совместимости с jQuery 1.4+. Однако однострочное исправление для плагина qTip исправляет его. См. Здесь: http://craigsworks.com/projects/forums/thread-solved-qtip-1-0-0rc3-does-not-work-with-latest-jquery-release – tchaymore

+4

Я смотрел на Qtip сегодня, и пока он работа есть несколько сторонних сторон: не обновлялась через некоторое время, отсутствует или не документировала некоторые очевидные вещи (вы хотите создать текст подсказки инструмента с функцией, которая вызывается, когда отображается подсказка) и представляет собой здоровенную загрузку (отчасти потому, что он, как представляется, включает в себя множество вещей, таких как закругленный угловой стиль). Надеюсь, мы не увидим его как отрицательного - просто пытаемся спасти кого-то еще некоторое время. Определенно стоит рассмотреть, но есть некоторые недостатки. – Cymen

3

Звучит для меня, вам не нужна мышь над событиями: вы хотите событие jQuery hover().

И вам, кажется, нужна «богатая» подсказка, и в этом случае я предлагаю jQuery tooltip. С помощью опции bodyHandler вы можете разместить произвольный HTML-код.

+0

Эй, спасибо за супер быстрый ответ! Я просто просмотрел документацию, и я не уверен, что есть возможность для «подсказки» оставаться в фиксированной позиции, чтобы вы могли навести на нее мышь и щелкнуть ссылку. Вы использовали это раньше? В то же время я загружу и начну играть – jakejgordon

50

Это можно сделать легко с помощью события mouseover. Я сделал это, и он не принимает 200 строк. Начните с запуска события, затем используйте функцию, которая создаст всплывающую подсказку.

$('span.clickme').mouseover(function(event) { 
    createTooltip(event);    
}).mouseout(function(){ 
    // create a hidefunction on the callback if you want 
    //hideTooltip(); 
}); 

function createTooltip(event){   
    $('<div class="tooltip">test</div>').appendTo('body'); 
    positionTooltip(event);   
}; 

Затем вы создаете функцию, расположите всплывающую подсказку с смещенной позиции в DOM-элемента, вызвавшего событие наведения мыши, это выполнимо с помощью CSS.

function positionTooltip(event){ 
    var tPosX = event.pageX - 10; 
    var tPosY = event.pageY - 100; 
    $('div.tooltip').css({'position': 'absolute', 'top': tPosY, 'left': tPosX}); 
}; 
+1

Простой и полезный, вам не нужно плагин XX ko, когда вы можете легко его написать. PS: позиция: абсолютная отсутствует :) – iwalktheline

+1

Возможно, вы захотите добавить единицы «px» к целым числам. ''top': tPosY + 'px'' и т. д. – Robusto

+1

$ ('span.klickme') - это плохо :) – formatc

4

Хорошо, после некоторой работы я могу получить «пузырь», чтобы всплыть и уйти в нужное время. Существует много стилей, которые должны произойти еще, но это в основном код, который я использовал.

<script type="text/javascript"> 
    //--indicates the mouse is currently over a div 
    var onDiv = false; 
    //--indicates the mouse is currently over a link 
    var onLink = false; 
    //--indicates that the bubble currently exists 
    var bubbleExists = false; 
    //--this is the ID of the timeout that will close the window if the user mouseouts the link 
    var timeoutID; 

    function addBubbleMouseovers(mouseoverClass) { 
     $("."+mouseoverClass).mouseover(function(event) { 
      if (onDiv || onLink) { 
       return false; 
      } 

      onLink = true; 

      showBubble.call(this, event); 
     }); 

     $("." + mouseoverClass).mouseout(function() { 
      onLink = false; 
      timeoutID = setTimeout(hideBubble, 150); 
     }); 
    } 

    function hideBubble() { 
     clearTimeout(timeoutID); 
     //--if the mouse isn't on the div then hide the bubble 
     if (bubbleExists && !onDiv) { 
      $("#bubbleID").remove(); 

      bubbleExists = false; 
     } 
    } 

    function showBubble(event) { 
     if (bubbleExists) { 
      hideBubble(); 
     } 

     var tPosX = event.pageX + 15; 
     var tPosY = event.pageY - 60; 
     $('<div ID="bubbleID" style="top:' + tPosY + '; left:' + tPosX + '; position: absolute; display: inline; border: 2px; width: 200px; height: 150px; background-color: Red;">TESTING!!!!!!!!!!!!</div>').mouseover(keepBubbleOpen).mouseout(letBubbleClose).appendTo('body'); 

     bubbleExists = true; 
    } 

    function keepBubbleOpen() { 
     onDiv = true; 
    } 

    function letBubbleClose() { 
     onDiv = false; 

     hideBubble(); 
    } 


    //--TESTING!!!!! 
    $("document").ready(function() { 
     addBubbleMouseovers("temp1"); 
    }); 
</script> 

Вот отрывок из HTML, который идет с ним:

<a href="" class="temp1">Mouseover this for a terribly ugly red bubble!</a> 
1

AUTORESIZE простой Popup Bubble

index.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
    <link href="bubble.css" type="text/css" rel="stylesheet" /> 
    <script language="javascript" type="text/javascript" src="jquery.js"></script> 
    <script language="javascript" type="text/javascript" src="bubble.js"></script> 
</head> 
<body> 
    <br/><br/> 
    <div class="bubbleInfo"> 
     <div class="bubble" title="Text 1">Set cursor</div> 
    </div> 
    <br/><br/><br/><br/> 
    <div class="bubbleInfo"> 
     <div class="bubble" title="Text 2">Set cursor</div> 
    </div> 
</body> 
</html> 

bubble.js

$(function() {  
    var i = 0; 
    var z=1; 
    do{ 
    title = $('.bubble:eq('+i+')').attr('title'); 
    if(!title){ 
     z=0; 
    } else { 
     $('.bubble:eq('+i+')').after('<table style="opacity: 0; top: -50px; left: -33px; display: none;" id="dpop" class="popup"><tbody><tr><td id="topleft" class="corner"></td><td class="top"></td><td id="topright" class="corner"></td></tr><tr><td class="left"></td><td>'+title+'</td><td class="right"></td></tr><tr><td class="corner" id="bottomleft"></td><td class="bottom"><img src="bubble/bubble-tail.png" height="25px" width="30px" /></td><td id="bottomright" class="corner"></td></tr></tbody></table>'); 
     $('.bubble:eq('+i+')').removeAttr('title'); 
    } 
    i++; 
    }while(z>0) 

    $('.bubbleInfo').each(function() { 
    var distance = 10; 
    var time = 250; 
    var hideDelay = 500;   
    var hideDelayTimer = null;  
    var beingShown = false; 
    var shown = false; 
    var trigger = $('.bubble', this); 
    var info = $('.popup', this).css('opacity', 0);   

    $([trigger.get(0), info.get(0)]).mouseover(function() { 
     if (hideDelayTimer) clearTimeout(hideDelayTimer); 
     if (beingShown || shown) { 
     // don't trigger the animation again 
     return; 
     } else { 
     // reset position of info box 
     beingShown = true; 

     info.css({ 
     top: -40, 
     left: 10, 
     display: 'block' 
     }).animate({ 
     top: '-=' + distance + 'px', 
     opacity: 1 
     }, time, 'swing', function() { 
      beingShown = false; 
      shown = true; 
     }); 
     }   
     return false; 
    }).mouseout(function() { 
     if (hideDelayTimer) clearTimeout(hideDelayTimer); 
     hideDelayTimer = setTimeout(function() { 
     hideDelayTimer = null; 
     info.animate({ 
      top: '-=' + distance + 'px', 
      opacity: 0 
     }, time, 'swing', function() { 
      shown = false; 
      info.css('display', 'none'); 
     }); 
     }, hideDelay); 
     return false; 
    }); 
    }); 
}); 

bubble.css

/* Booble */ 
.bubbleInfo { 
    position: relative; 
    width: 500px; 
} 
.bubble {  
} 
.popup { 
    position: absolute; 
    display: none; 
    z-index: 50; 
    border-collapse: collapse; 
    font-size: .8em; 
} 
.popup td.corner { 
    height: 13px; 
    width: 15px; 
} 
.popup td#topleft { 
    background-image: url(bubble/bubble-1.png); 
} 
.popup td.top { 
    background-image: url(bubble/bubble-2.png); 
} 
.popup td#topright { 
    background-image: url(bubble/bubble-3.png); 
} 
.popup td.left { 
    background-image: url(bubble/bubble-4.png); 
} 
.popup td.right { 
    background-image: url(bubble/bubble-5.png); 
} 
.popup td#bottomleft { 
    background-image: url(bubble/bubble-6.png); 
} 
.popup td.bottom { 
    background-image: url(bubble/bubble-7.png); 
    text-align: center; 
} 
.popup td.bottom img { 
    display: block; 
    margin: 0 auto; 
} 
.popup td#bottomright { 
    background-image: url(bubble/bubble-8.png); 
} 
4

Я запрограммировал полезный JQuery плагин для создания легко смарт-пузырьковые всплывающие окна только строки кода в JQuery!

Что вы можете сделать: - приложить всплывающие окна к любому элементу DOM! - события mouseover/mouseout автоматически управляются! - набор пользовательских всплывающих окон! - создавать смарт-затененные всплывающие окна! (в IE тоже!) - выбор шаблонов стиля всплывающих окон во время выполнения! - вставляйте HTML-сообщения внутри всплывающих окон! - установить много вариантов как: расстояния, скорость, задержки, цвет ...

Popup-й тень и раскрашенные шаблоны полностью поддерживаются Internet Explorer 6+, Firefox, Opera 9+, Safari

Вы можете загрузить исходные файлы из http://plugins.jquery.com/project/jqBubblePopup

2

Я пытаюсь сделать «пузырь», который может всплывающее окно, когда событие OnMouseOver является уволен и будет оставаться открытым до тех пор, как мышь находится над элементом, который выбросил событие OnMouseOver ИЛИ если мышь перемещается в пузырь. Мой пузырь нужно будет иметь все манеры HTML и стиль, включая гиперссылки, изображения и т.д.

Все эти события полностью управляется этим плагином ...

http://plugins.jquery.com/project/jqBubblePopup

+0

Эта ссылка уже не является эффективной ... –

2

ColorTip является самый красивый, который я когда-либо видел

11

Хотя qTip (принятый ответ) хорош, я начал использовать его, и ему не хватало некоторых функций, которые мне нужны.

Я тогда наткнулся на PoshyTip - он очень гибкий и очень прост в использовании. (И я мог бы делать то, что мне нужно)

2

Новая версия 3.0 плагина jQuery Bubble Popup поддерживает jQuery v.1.7.2, в настоящее время последнюю и стабильную версию самой известной библиотеки javascript.

Наиболее интересная особенностью версии 3.0 является то, что вы можете использовать вместе JQuery & Bubble Popup плагин с любыми другими библиотеками и яваскриптом структурами как Script.aculo.us, Mootols или прототип, так как плагин полностью залит, чтобы избежать проблем с совместимостью ;

jQuery Bubble Popup был протестирован и поддерживает множество известных и «неизвестных» браузеров; см. документацию для полного списка.

Как и предыдущие версии, плагин jQuery Bubble Popup продолжает выпускаться под лицензией MIT; Вы можете использовать jQuery Bubble Popup в коммерческих или личных проектах до тех пор, пока заголовок авторского права останется нетронутым.

загрузить последнюю версию или посетить демонстрационные и обучающие программы на http://www.maxvergelli.com/jquery-bubble-popup/

1

Вы можете использовать qTip для этого; Однако вам придется немного закодировать для запуска его на событие mouseover; И если вы хотите использовать водяной знак по умолчанию в своих текстовых полях, вам придется использовать плагин с водяными знаками ...

Я понял, что это приводит к множеству повторяющихся кодов; Таким образом, я написал плагин поверх qTip, который позволяет легко подключать информационное всплывающее окно для формирования полей. Вы можете это проверить здесь: https://bitbucket.org/gautamtandon/jquery.attachinfo

Надеюсь, это поможет.