jQuery Popup Bubble / Підказка [закрито]


99

Я намагаюся зробити "бульбашку", яка може спливати, коли onmouseoverподія запущена, і залишатиметься відкритою до тих пір, поки миша буде над предметом, який кинув onmouseoverподію АБО, якщо миша буде переміщена в міхур. Мій міхур повинен мати всі способи використання HTML та стилів, включаючи гіперпосилання, зображення тощо.

Я в основному досяг цього, написавши близько 200 рядків некрасивого JavaScript, але мені дуже хотілося б знайти плагін jQuery або якийсь інший спосіб очистити це.


1
@bluefeet Off topic? Серйозно? Хлопець задав питання про те, як скоротити свої 200 рядків коду за допомогою JQuery, і він був використаний майже чверть мільйона разів (щойно вирішив мою проблему), і ви відзначили це поза темою? Що щодо цього пропонує будь-які більш впевнені відповіді, ніж будь-яке інше питання?
Кріс Шарп

@ChrisSharp Ви читали причину, чому її закрили? Він спеціально просить "хороший плагін jQuery для створення фантазійних бульбашок". Питання, що задають рекомендації, є позатематичними, але якщо ви думаєте, що це можна переписати, щоб зробити його тематичним, тоді не соромтесь запропонувати редагування, щоб надати його форму.
Тарін

Відповіді:


158

Qtip - найкращий, що я бачив. Це ліцензований MIT, прекрасний, має всю необхідну конфігурацію.

Мій улюблений легкий варіант - підказки . Також ліцензується MIT. Це надихнуло плагін підказки Bootstrap .


6
На сьогодні найкращий. Один рядок коду проти всіх інших величезних рішень, які пропонували інші. Я сподіваюся, що ця відповідь буде озвучена.
Пітер Уолк

2
Qtip має проблеми із сумісністю з jQuery 1.4+. Просте однолінійне виправлення на плагіні qTip у виправляє його. Дивіться тут: craigsworks.com/projects/forums/…
tchaymore

4
Сьогодні я подивився на Qtip, і поки він працює, є деякі нижчі сторони: деякий час не оновлювався, відсутній або не задокументовано явних речей (хочу створити текст підказки інструменту з функцією, яка викликається, коли підказка відображається) і є потужним завантаженням (частково тому, що, здається, включає багато речей, як стилізація з закругленими кутами). Сподіваємось, це не сприймається як негатив - просто намагаюся врятувати когось іншого певний час. Однозначно варто подумати, але є і деякі недоліки.
Цимен

4
@Cymen, я не можу говорити про те, як все було навколо вересня 10 року, але жодне з того, що ти кажеш, вже не відповідає дійсності. Це: активний, добре задокументований і дозволяє дуже налаштовувати розміри завантаження a la jQuery UI.
Кірк Волл

52

Це можна легко зробити і за допомогою події миші. Я це зробив, і це взагалі не займає 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: позиція: абсолют відсутній :)
kheraud

1
Можливо, ви хочете додати одиниці "px" до ваших цілих чисел. 'top': tPosY + 'px'і так далі.
Robusto

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>

4

Я запрограмував корисний плагін jQuery для створення легко розумних спливаючих міхурів із лише рядком коду в jQuery!

Що ви можете зробити: - приєднати спливаючі вікна до будь-якого елемента DOM! - події миші / мишоут автоматично управляються! - встановити власні події, що з'являються! - Створюйте розумні тіньові спливаючі вікна! (в IE теж!) - вибирайте шаблони стилів спливаючих вікон під час виконання! - вставляйте HTML-повідомлення у спливаючі вікна! - встановіть багато варіантів як: відстань, швидкість, затримки, кольори…

Тіні Popup і кольорові шаблони повністю підтримуються Internet Explorer 6+, Firefox, Opera 9+, Safari

Ви можете завантажити джерела з http://plugins.jquery.com/project/jqBubblePopup



3

Звучить мені, що ви не хочете, щоб миша над подіями: ви хочете, щоб подія jQuery hover ().

І вам здається, що ви хочете "багату" підказку, і в такому випадку я пропоную підказку jQuery . За допомогою параметра bodyHandler ви можете ввести довільний HTML-код.


Гей, дякую за надшвидку відповідь! Я просто проглянув документацію, і я не впевнений, що є можливість, щоб "підказка" залишилася у фіксованому положенні, щоб ви могли перемістити мишу на неї та натиснути посилання. Ви раніше цим користувалися? Тим часом я
скачу

2

Я намагаюся зробити "бульбашку", яка може спливати, коли подія onmouseover буде запущена, і залишатиметься відкритою до тих пір, поки миша буде над предметом, який кинув подію onmouseover АБО якщо миша переміщена в міхур. Мій міхур повинен мати всі способи html та стилів, включаючи гіперпосилання, зображення тощо.

Усі ці події повністю керовані цим плагіном ...

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


Це посилання вже не добре ...
Прескотт Шартьє


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

Автоматизуйте простий Bubble Popup

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;
    });
  }); 
});

міхур.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); 
}


1

Ви можете використовувати qTip для цього; Однак вам доведеться трохи зашифрувати його для запуску в події переходу миші; І якщо ви хочете, щоб у ваших текстових полях був водяний знак за замовчуванням, вам доведеться використовувати плагін водяного знака ...

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

Сподіваюся, це допомагає.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.