jQuery Popup Bubble / Tooltip [закрыто]

99

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

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

Jakejgordon
источник
1
@bluefeet Не по теме? Шутки в сторону? Парень задал вопрос о том, как сократить свои 200 строк кода с помощью JQuery, и он использовался почти четверть миллиона раз (только что решил мою проблему), и вы отметили это не по теме? Что по этому поводу требует более категоричных ответов, чем любой другой вопрос?
Крис Шарп
@ChrisSharp Вы читали причину, по которой он был закрыт? В частности, он требует «хорошего плагина jQuery для создания причудливых пузырей». Вопросы, требующие рекомендаций, не по теме, но если вы думаете, что это можно переписать, чтобы оно соответствовало теме, не стесняйтесь предлагать редактирование, чтобы привести его в форму.
Тарин

Ответы:

158

Qtip - лучший из тех, что я видел. Он лицензирован MIT, красивый, имеет всю необходимую конфигурацию.

Мой любимый легкий вариант - навеселе . Также имеет лицензию MIT. Он вдохновил плагин всплывающих подсказок Bootstrap .

Кообз
источник
6
Безусловно, лучший. Одна строка кода против всех других огромных решений, которые предлагали другие. Я надеюсь, что за этот ответ проголосуют.
Питер Уолк,
2
Qtip имеет проблемы совместимости с jQuery 1.4+. Простое однострочное исправление плагина qTip исправляет это. Смотрите здесь: craigsworks.com/projects/forums/…
tchaymore
4
Я посмотрел на Qtip сегодня, и хотя он действительно работает, есть некоторые недостатки: он давно не обновлялся, отсутствует или не задокументировал некоторые очевидные вещи (хочу создать текст всплывающей подсказки с функцией, которая вызывается, когда подсказка отображается) и является огромной загрузкой (отчасти потому, что, похоже, он включает в себя много вещей, таких как стиль с закругленными углами). Надеюсь, это не будет считаться негативным - просто попытка сэкономить время кому-то еще. Определенно стоит подумать, но есть некоторые недостатки.
Cymen
4
@ Саймен, я не могу говорить о том, как все было примерно в сентябре 2010 года, но все, что вы говорите, больше не является правдой. Он: активен, хорошо документирован и позволяет настраивать размер загрузки в стиле пользовательского интерфейса jQuery.
Кирк Уолл
52

Это также легко сделать с помощью события 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});
};
Deeenes
источник
1
Просто и полезно, нет необходимости в плагине XX ko, если его легко написать. PS: position: absolute отсутствует :)
kheraud 01
1
Вероятно, вы захотите добавить к своим целым числам единицы измерения «px». 'top': tPosY + 'px'и так далее.
Робусто
1
$ ('span.klickme') - это плохо :)
formatc
Мне нравится твой подход. Очень простой способ обойтись без использования какой-либо внешней библиотеки
AMIC MING
12

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

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

Божо
источник
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>
Jakejgordon
источник
4

Я запрограммировал полезный плагин jQuery, чтобы легко создавать интеллектуальные всплывающие окна с помощью всего лишь строчки кода в jQuery!

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

Тени и цветные шаблоны всплывающих окон полностью поддерживаются Internet Explorer 6+, Firefox, Opera 9+, Safari.

Вы можете скачать исходники с http://plugins.jquery.com/project/jqBubblePopup

Максимум
источник
3

Мне кажется, вам не нужно наведение указателя мыши на события: вам нужно событие jQuery hover ().

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

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

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

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

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

Максимум
источник
Эта ссылка больше не подходит ...
Прескотт Шартье,
2

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

тимон
источник
2

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

Самая интересная особенность версии 3.0 заключается в том, что вы можете использовать вместе jQuery и плагин Bubble Popup вместе с любыми другими библиотеками и фреймворками javascript, такими как Script.aculo.us, Mootols или Prototype, потому что плагин полностью инкапсулирован для предотвращения проблем несовместимости;

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

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

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

Максимум
источник
1

Автоматическое изменение размера простого всплывающего пузыря

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); 
}
Pulsar
источник
1

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

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

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

Гаутам Тандон
источник