jQuery弹出气泡/工具提示

100
我想制作一个“气泡”,可以在 onmouseover 事件触发时弹出,并会在鼠标停留在引发 onmouseover 事件的项目上或者鼠标移动到气泡内时保持打开状态。我的气泡需要拥有各种HTML和样式,包括超链接、图片等。
我已经通过编写大约200行丑陋的JavaScript代码基本实现了这一目标,但我真的很想找到一个jQuery插件或其他方式来简化它。

1
@bluefeet 离题?认真的吗?这个人问了一个关于如何使用JQuery缩短他的200行代码的问题,它已经被使用了将近25万次(刚刚解决了我的问题),你却标记它为离题?这有什么比其他问题更邀请主观答案的地方吗? - Chris Sharp
@ChrisSharp,你看到它被关闭的原因了吗?它明确要求“一个用于制作花哨气泡效果的好的jQuery插件”。寻求建议的问题是不符合主题的,但如果你认为可以重写使其符合主题,那么请随意建议编辑以使其变得更好。 - Taryn
13个回答

159

6
迄今为止最好的。与其他人提出的庞大解决方案相比只需一行代码。我希望这个回答能得到投票支持。 - Peter Walke
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
4
@Cymen,我无法代表2010年9月左右的情况,但你所说的现在都不再正确。它是:活跃的,有良好的文档支持,并且允许像jQuery UI一样非常自定义的下载大小。 - Kirk Woll

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

然后,您可以创建一个函数,使用CSS将工具提示定位到触发mouseover事件的DOM元素的偏移位置。这是可行的。
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:缺少position:absolute :) - kheraud
1
你可能想要将“px”单位添加到你的整数上。例如: 'top': tPosY + 'px' 等等。 - Robusto
1
$('span.klickme') - 这不好 :) - formatc
我喜欢你的方法。非常简单易行,而且没有使用任何外部库。 - AMIC MING

13

尽管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代码片段:

这是一个与之对应的HTML片段:

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

4
我已经编写了一个有用的jQuery插件,只需一行jQuery代码即可轻松创建智能气泡弹出窗口!
您可以做什么: - 将弹出窗口附加到任何DOM元素! - 鼠标悬停/鼠标移出事件自动管理! - 设置自定义弹出窗口事件! - 创建智能阴影弹出窗口!(在IE中也是如此!) - 在运行时选择弹出窗口的样式模板! - 在弹出窗口内插入HTML消息! - 设置许多选项,如距离、速度、延迟、颜色...
弹出窗口的阴影和着色模板完全支持Internet Explorer 6+、Firefox、Opera 9+、Safari。
您可以从以下链接下载源代码: http://plugins.jquery.com/project/jqBubblePopup

4

3

听起来你不想要鼠标悬停事件: 你想要jQuery hover()事件。

而你似乎想要一个“丰富”的工具提示,这种情况下我建议使用jQuery tooltip。通过bodyHandler选项,你可以放置任意HTML内容。


嘿,感谢您的超快速回复!我刚才浏览了一下文档,不确定是否有选项可以使“工具提示”保持固定位置,以便您可以将鼠标移到其上并单击链接。您以前用过吗?在此期间,我会下载并开始使用。 - jakejgordon

2
当鼠标悬停在元素上触发onmouseover事件时,我想制作一个"气泡",并且只要鼠标停留在触发onmouseover事件的元素上或移动到气泡中,气泡就会一直保持打开状态。我的气泡需要包含各种html和样式,包括超链接、图像等。这个插件可以完全管理所有这些事件... http://plugins.jquery.com/project/jqBubblePopup

这个链接已经失效了... - Prescott Chartier

2

2
jQuery气泡弹出框插件的新版本3.0支持jQuery v.1.7.2,这是目前最流行、最稳定的javascript库版本。
3.0版本最有趣的特性是,您可以将jQuery和Bubble Popup插件与其他库和javascript框架(如Script.aculo.us、Mootols或Prototype)一起使用,因为该插件完全封装,以防止不兼容问题。
jQuery Bubble Popup已经经过测试,并支持许多已知和未知的浏览器;请参阅文档以获取完整列表。
与以前的版本一样,jQuery气泡弹出框插件仍然在MIT许可证下发布;只要版权标头保持不变,您就可以在商业或个人项目中自由使用它。
下载最新版本或访问实时演示和教程,请访问http://www.maxvergelli.com/jquery-bubble-popup/

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接