我正在尝试制作一个可以在onmouseover
事件被触发时弹出的“气泡”,并且只要鼠标悬停在引发onmouseover
事件的项目上就会保持打开状态。鼠标移动到气泡中。我的泡泡需要具备HTML和样式的所有方式,包括超链接,图像等。
我基本上通过编写大约200行丑陋的JavaScript来实现这一点,但我真的想找到一个jQuery插件或其他一些方法来清理它。
答案 0 :(得分:158)
Qtip is the best one I've seen.这是麻省理工学院许可,美观,具备您需要的所有配置。
我最喜欢的轻量级选项是tipsy。麻省理工学院也许可。它启发了Bootstrap's tooltip plugin。
答案 1 :(得分:51)
这也可以通过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});
};
答案 2 :(得分:12)
虽然qTip(接受的答案)很好,但我开始使用它,它缺少我需要的一些功能。
然后我偶然发现了PoshyTip - 它非常灵活,而且非常易于使用。 (我可以做我需要的事情)
答案 3 :(得分: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 :(得分:4)
我编写了一个有用的jQuery插件来创建简单的智能气泡弹出窗口,只需在jQuery中使用一行代码!
你能做什么: - 将弹出窗口附加到任何DOM元素! - 自动管理mouseover / mouseout事件! - 设置自定义弹出窗口事件! - 创建智能阴影弹出窗口! (在IE中也是!) - 在运行时选择popup的样式模板! - 在弹出窗口中插入HTML消息! - 设置许多选项:距离,速度,延迟,颜色......
完全支持Popup的阴影和彩色模板 Internet Explorer 6 +,Firefox,Opera 9 +,Safari
答案 5 :(得分:4)
QTip有jQuery 1.4.2的错误。我不得不切换到jQuery Bubble Pop up http://www.vegabit.com/jquery_bubble_popup_v2/#examples并且效果很好!
答案 6 :(得分:3)
听起来我不想让鼠标超过事件:你想要jQuery hover()事件。
你似乎想要的是一个“丰富”的工具提示,在这种情况下我建议jQuery tooltip。使用bodyHandler选项,您可以将任意HTML放入。
答案 7 :(得分:2)
我正试图制造一个可以的“泡沫” onmouseover事件时弹出窗口 解雇,并将保持开放,只要 鼠标悬停在投掷的物品上 onmouseover事件或鼠标 进入了泡沫。我的泡泡 需要拥有html的所有方式 和样式包括超链接, 图像等。
所有这些事件完全由此插件管理......
答案 8 :(得分:2)
ColorTip是我见过的最美丽的
答案 9 :(得分:2)
jQuery Bubble Popup插件的新版本3.0支持jQuery v.1.7.2,它是目前最着名的javascript库的最新稳定版本。
3.0版本最有趣的功能是你可以一起使用jQuery&amp; 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/
答案 10 :(得分: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);
}
答案 11 :(得分:1)
Tiptip也是一个不错的图书馆。
答案 12 :(得分:1)
你可以使用qTip;但是你必须编写一些代码才能在mouseover事件中启动它;如果您想在文本字段上使用默认水印,则必须使用水印插件...
我意识到这会导致很多重复的代码;所以我在qTip上编写了一个插件,可以很容易地将信息弹出窗口附加到表单字段中。您可以在此处查看:https://bitbucket.org/gautamtandon/jquery.attachinfo
希望这有帮助。