jquery气泡提示效果

效果改自:http://inezha.com/p/7797945/item737

代码注释已经尽可能的详细了,也不多说了.

越用jquery就越喜欢用它...

bubble.js:

 

 
  
/*
* @date: 2010-5-30 11:57:22
* @author: 胡灵伟
* Depends:
* jquery.js
*
* function:气泡提示效果
* use:$("selectors").bubble({fn:getdata, width:width, height:height});
* 对所有需要气泡提示效果的对象使用bubble方法,
* fn为气泡中显示内容获得方法,即fn中返回的数据会显示在气泡中
* 以样式指代div则有:
* width\height为contents的width\height属性
* 气泡总width为left.width + contents.width + right.width
* 气泡总height为top.height + contents.height + bottom.height
*/
(
function ($) {
$.fn.bubble
= function (options) {
Bubble
= function (){
this .defaults = {
distance :
10 ,
time :
250 ,
hideDelay :
500 ,
width:
100 ,
height:
100
};
this .options = $.extend( this .defaults, options);
this .hideDelayTimer = new Array();
this .shown = new Array();
this .beingShown = new Array();
this .popup = new Array();
this .trigger = new Array();
this .makebubble = function (w, h){
var tpl = $( ' <div class="bubble-popup"></div> ' ).append( ' <div class="topleft"></div> ' ).append( ' <div class="top"></div> ' )
.append($(
' <div class="topright"></div> ' )).append( ' <div class="left"></div> ' )
.append(
' <div class="contents"></div> ' ).append( ' <div class="right"></div> ' )
.append(
' <div class="bottomleft"></div> ' )
.append($(
' <div class="bottom"></div> ' )
.append($(
' <div class="bottomtail"></div> ' )))
.append(
' <div class="bottomright"></div> ' ).appendTo( ' body ' );
     
tpl.width(w + 38);
tpl.find( ' .left, .right, .contents ' ).each( function (){$( this ).height(h)});
tpl.find(
' .top, .bottom, .contents ' ).each( function (){$( this ).width(w)});
return tpl;
};
this .add = function (triggers, options){
// 此处的options为每次调用add方法传进来的参数,比如指定获取数据的方法fn, 气泡宽width高height
// console.debug("length:"+triggers.length);
var t = this .trigger.length;
// 将新加入的需要气泡提示效果的对象放到trigger数组中
for ( var j = 0 ;j < triggers.length;j ++ )
this .trigger.push(triggers[j]);
// console.debug("trigger.length:" + this.trigger.length);
var hout = this .handleout;
var hover = this .handleover;
var obj = this ;
// 为新加入的对象绑定鼠标监听事件
triggers.each( function (ind){
$(
this ).unbind( ' mouseover ' ).mouseover( function (){
hover(t
+ ind, obj, options);
}).unbind(
' mouseout ' ).mouseout( function (){
hout(t
+ ind, obj, options);
});
});
};
this .handleover = function (i, obj, options){
// console.debug("hideDelayTimer.length:" + obj.hideDelayTimer.length);
// 当新触发冒气泡事件时原先的定时器还没结束则将原来的定时器清除
if (obj.hideDelayTimer[i]) clearTimeout(obj.hideDelayTimer[i]);
if (obj.beingShown[i] || obj.shown[i]) {
// 如果气泡正在冒或已经冒出来了则不再重复冒气泡
return ;
}
else {
var trigger = $(obj.trigger[i]);
// 标记正在冒气泡
obj.beingShown[i] = true ;
// 创建气泡
obj.popup[i] = obj.makebubble(options.width || obj.options.width, options.height || obj.options.height);
// 对于气泡绑定同样的事件以使得鼠标离开触发对象后放到气泡上时气泡不会消失
obj.popup[i].mouseover( function (){obj.handleover(i, obj)}).mouseout( function (){obj.handleout(i, obj)});
// 调用获取数据的方法fn来显示数据
obj.options.fn(obj.trigger[i], function (data){
obj.popup[i].find(
' .contents ' ).text(data);
});
// 设定气泡的位置和显示属性,气泡默认出现在触发对象正上方
obj.popup[i].css({
top: trigger.offset().top
- obj.popup[i].height(),
left: trigger.offset().left
+ trigger.width() / 2 - obj.popup[i].width() / 2 ,
display:
' block '
}).animate(
// 由于万恶的IE不能同时支持PNG半透明和滤镜,所以对于IE不使用滤镜
$.browser.msie ? {
top:
' -= ' + obj.options.distance + ' px '
}:{
top:
' -= ' + obj.options.distance + ' px ' ,
opacity:
1
}, obj.options.time,
' swing ' , function () {
obj.beingShown[i]
= false ;
obj.shown[i]
= true ;
});
}
return false ;
};
this .handleout = function (i, obj, options){
// console.debug("hideDelayTimer["+i+"]:"+obj.hideDelayTimer[i]);
// 处理当因为某些意外操作使得没有触发鼠标进入事件而直接再次触发鼠标离开事件时的情况
if (obj.hideDelayTimer[i]) clearTimeout(obj.hideDelayTimer[i]);
obj.hideDelayTimer[i]
= setTimeout( function () {
obj.hideDelayTimer[i]
= null ;
try{
         obj.popup[i].animate(
$.browser.msie
? {
top:
' -= ' + obj.options.distance + ' px '
}:{
top:
' -= ' + obj.options.distance + ' px ' ,
opacity:
0 // 渐隐效果
}, obj.options.time, ' swing ' , function () {
obj.shown[i]
= false ;
obj.popup[i].css(
' display ' , ' none ' );
obj.popup[i]
= null ;
});}catch(e){};
}, obj.options.hideDelay);
return false ;
};
};
$.bubble
= new Bubble(); // 单例
$.bubble.add( this , options);
};
})(jQuery);

 

 

用到的样式:

 
  
<style type="text/css" media="screen">
<!--
*
{
margin
: 0 ;
padding
: 0 ;
}

body
{
padding
: 10px ;
}

h1
{
margin
: 14px 0 ;
font-family
: 'Trebuchet MS', Helvetica ;
}

.bubbletrigger
{
}

/* Bubble pop-up */
.bubble-popup
{
position
: absolute ;
display
: none ;
z-index
: 50 ;
border-collapse
: collapse ;
}
.bubble-popup .topleft
{
width
: 19px ;
height
: 15px ;
float
: left ;
background-image
: url(../images/bubble/bubble-1.png) ;
/* 解决ie6PNG背景透明bug */
_background-image
: none ; /* IE6 */
_filter
: progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=noscale, src='images/bubble/bubble-1.png') ; /* IE6 */
}



.bubble-popup .top
{
width
: 100px ;
height
: 15px ;
float
: left ;
background-image
: url(../images/bubble/bubble-2.png) ;
/* 解决ie6PNG背景透明bug */
_background-image
: none ; /* IE6 */
_filter
: progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=scale, src='images/bubble/bubble-2.png') ; /* IE6 */
}

.bubble-popup .topright
{
width
: 19px ;
height
: 15px ;
float
: left ;
background-image
: url(../images/bubble/bubble-3.png) ;
/* 解决ie6PNG背景透明bug */
_background-image
: none ; /* IE6 */
_filter
: progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=noscale, src='images/bubble/bubble-3.png') ; /* IE6 */
}

.bubble-popup .left
{
clear
: left ;
width
: 19px ;
height
: 30px ;
float
: left ;
background-image
: url(../images/bubble/bubble-4.png) ;
/* 解决ie6PNG背景透明bug */
_background-image
: none ; /* IE6 */
_filter
: progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=scale, src='images/bubble/bubble-4.png') ; /* IE6 */
}

.bubble-popup .contents
{
white-space
: normal ;
word-break
: break-all ;
float
: left ;
font-size
: 12px ;
line-height
: 1.2em ;
background-color
: #fff ;
color
: #66BDED ;
font-family
: "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans",
sans-serif
;
}

.bubble-popup .right
{
width
: 19px ;
height
: 30px ;
float
: left ;
background-image
: url(../images/bubble/bubble-5.png) ;
/* 解决ie6PNG背景透明bug */
_background-image
: none ; /* IE6 */
_filter
: progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=scale, src='images/bubble/bubble-5.png') ; /* IE6 */
}

.bubble-popup .bottomleft
{
clear
: left ;
width
: 19px ;
height
: 15px ;
float
: left ;
background-image
: url(../images/bubble/bubble-6.png) ;
/* 解决ie6PNG背景透明bug */
_background-image
: none ; /* IE6 */
_filter
: progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=noscale, src='images/bubble/bubble-6.png') ; /* IE6 */
}

.bubble-popup .bottom
{
width
: 100px ;
height
: 15px ;
float
: left ;
background-image
: url(../images/bubble/bubble-7.png) ;
/* 解决ie6PNG背景透明bug */
_background-image
: none ; /* IE6 */
_filter
: progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=scale, src='images/bubble/bubble-7.png') ; /* IE6 */
text-align
: center ;
}

.bubble-popup .bottomtail
{
width
: 30px ;
height
: 29px ;
margin
: 0 auto ;
display
: block ;
background-image
: url(../images/bubble/bubble-tail2.png) ;
/* 解决ie6PNG背景透明bug */
_background-image
: none ; /* IE6 */
_filter
: progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=noscale, src='images/bubble/bubble-tail2.png') ; /* IE6 */
}

.bubble-popup .bottomright
{
width
: 19px ;
height
: 15px ;
float
: left ;
background-image
: url(../images/bubble/bubble-8.png) ;
/* 解决ie6PNG背景透明bug */
_background-image
: none ; /* IE6 */
_filter
: progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=noscale, src='images/bubble/bubble-8.png') ; /* IE6 */
}

-->
</style>

 

 

使用方法:(用到的图片样式img.zip,注意路径,没图片是很难看的...)

 

 
  
< script src ="../js/jquery-1.4.2.min.js" type ="text/javascript" ></ script >
< script src ="../js/bubble-1.0.js" type ="text/javascript" ></ script >
< script type ="text/javascript" > <!--
aa
= function (obj, callback){
$.ajax({
type :
' POST ' ,
data : {word:$(obj).attr(
' alt ' ),rand:Math.random()},
url :
' http://localhost/xun/ajax.svl?method=getdetailinfo ' ,
dataType :
' text ' ,
timeout :
1000 ,
success :
function (data){
callback(data);
}
});
};
bb
= function (obj, callback){
$.ajax({
type :
' POST ' ,
data : {word:$(obj).attr(
' alt ' ),rand:Math.random()},
url :
' http://localhost/xun/ajax.svl?method=getdetailinfo ' ,
dataType :
' text ' ,
timeout :
1000 ,
success :
function (data){
callback(data
+ " aaaa " );
}
});
};
$(
function (){
$(
' .bubbletrigger ' ).bubble({width: 150 , height: 100 , fn:aa});
$(
' #a ' ).bubble({fn:bb});
});
//
--> </ script >
</ head >
< body id ="page" >



< h1 > jQuery Bubble Example </ h1 >
< div >
< br /> aaaaaaaaaa
< br /> aaaaaaaaaaaaaaaaaaaa
< br /> aaaaaaaaaaaaaaaaaaaaaaaaaaaa
< br /> aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
< br /> aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
< br /> aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
</ div >
< div style ="padding-left:100px;" >
< img class ="bubbletrigger" alt ="a" src ="../images/bubble/starburst.gif" />

< img class ="bubbletrigger" alt ="b" src ="../images/bubble/starburst.gif" />

< img class ="bubbletrigger" alt ="c" src ="../images/bubble/starburst.gif" />

< img class ="bubbletrigger" alt ="d" src ="../images/bubble/starburst.gif" />

< img id ="a" alt ="e" src ="../images/bubble/starburst.gif" />
</ div >

</ body >

 

servlet只要返回一段字符串就可以了,就不贴了.

转载于:https://www.cnblogs.com/adaikiss/archive/2010/05/30/1747428.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值