javascript 实用的文字链提示框效果


Posted in Javascript onJune 30, 2010

效果要基本实现以下功能:
(1)鼠标滑过文章中的链接文字,要在相应位置弹出提示框,提示框的样式由css来控制,高度自适应;鼠标可以点击提示框的中的链接,滑离提示框时,框自动消失;
(2)把提示框的位置控制在文本域范围之内,如果链接文字处在文本域左侧,提示框要居右显示,使其不会出离文本域;反之,如果链接文字处在文本域右侧,提示框要居左显示;
(3)如果文本域内容很多,而链接文字恰巧处于浏览器底部,为了使提示框不出离于浏览器的可视范围,提示框的位置要自动调整到链接文字的上面;

1.css

.main{width:950px; border:#9C3 1px solid; margin:0 auto; padding:15px; background-color:#fff; line-height:25px;font-size:14px; position:relative;} 
span{border:#70bce4 2px solid; display:block; position:absolute; background-color:#FFF; padding:5px 10px; font-size:12px; width:200px; display:none;} 
.cur{color:#900;}

2.js
//获取对象元素的函数; 
function $a(id,tag){var re=(id&&typeof id!="string")?id:document.getElementById(id);if(!tag){return re;}else{return re.getElementsByTagName(tag);}} 
function tips(){ 
//获取文本域中的a元素列表; 
var article=$a("article","a") 
for(i=0;i<article.length;i++){ 
//遍历a元素,不包含类"cur"的a元素将不会执行之后的代码; 
if(article[i].className.indexOf("cur")==-1) continue; 
article[i].onmouseover=function(e){ 
//获取鼠标指针在浏览器可视区域的坐标,不受文档内容影响; 
var e=e||event; 
posX = e.clientX; 
posY = e.clientY; 
//获取浏览器可视区域高度; 
var bodyhe=document.documentElement.clientHeight; 
var parwidth=$a("article").offsetWidth; 
var tipbox=get_nextSibling(this); 
var boxlist=$a("article","span") 
//设置文本区域中的span提示框均为隐藏状态; 
for(j=0;j<boxlist.length;j++){ 
boxlist[j].style.display="none"; 
boxlist[j].innerHTML="调入后台数据" 
} 
//设置当前的提示框显示; 
tipbox.style.display="block"; 
var w=tipbox.offsetWidth-this.offsetWidth; 
/* 
以id为article的div添加了相对定位position:relative,所以它已经是提示框的父级; 
控制弹出框的显示位置; 
*/ 
tipbox.style.left=(this.offsetLeft>parwidth/2?this.offsetLeft-w:this.offsetLeft)+"px"; 
tipbox.style.top=(posY+tipbox.offsetHeight>bodyhe?this.offsetTop-tipbox.offsetHeight:document.all?this.offsetTop+15:this.offsetTop+this.offsetHeight)+"px"; 
tipbox.onmouseover=function(){this.style.display="block";} 
tipbox.onmouseout=this.onmouseout=function(){tipbox.style.display="none";} 
} 
} 
} 
//获取对象元素的下一个标签节点; 
function get_nextSibling(n){ 
var x=n.nextSibling; 
while (x.nodeType!=1){ 
x=x.nextSibling; 
} 
return x; 
}

贴出源文件代码 感兴趣的朋友可以测试一下,有问题可留言 @&@
<!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" /> 
<title>提示框效果</title> 
<style type="text/css"> 
.main{width:950px; border:#9C3 1px solid; margin:0 auto; padding:15px; background-color:#fff; line-height:25px;font-size:14px; position:relative;} 
span{border:#70bce4 2px solid; display:block; position:absolute; background-color:#FFF; padding:5px 10px; font-size:12px; width:200px; display:none;} 
.cur{color:#900;} 
</style> 
</head> 
<body onload="tips();"> 
<br /> 
<br /> 
<br /> 
<br /> 
<div class="main" id="article"> 
早在陈冠希“艳照门”事件爆发之前,陈冠希老爸就曾被传包养内地男星胡兵。所谓无风不起浪,两人曾被媒体拍到一起吃饭逛街的镜头。而<a href="#" class="cur">胡兵</a><span><a href="#">双响炮上海开机</a><br /><a href="#">双响炮上海开机</a><br /><a href="#">双响炮上海开机</a></span>本人的暧昧态度也为此事件更增添了一份迷雾。早在陈冠希“艳照门”事件爆发之前,陈冠希老爸就曾被传包养内地男星胡兵。所谓无风不起浪,两人曾被媒体拍到一起吃饭逛街的镜头。而<a href="#" class="cur">胡兵</a><span><a href="#">双响炮上海开机</a><br /><a href="#">双响炮上海开机</a><br /><a href="#">双响炮上海开机</a></span>本人的暧昧态度也为此事件更增添了一份迷雾。 早在陈冠希“艳照门”事件爆发之前,陈冠希老爸就曾被传包养内地男星胡兵。所谓无风不起浪,两人曾被媒体拍到一起吃饭逛街的镜头。而<a href="#" class="cur">胡兵</a><span><a href="#">双响炮上海开机</a><br /><a href="#">双响炮上海开机</a><br /><a href="#">双响炮上海开机</a></span>本人的暧昧态度也为此事件更增添了一份迷雾。 
</div> 
<script type="text/javascript"> 
function $a(id,tag){var re=(id&&typeof id!="string")?id:document.getElementById(id);if(!tag){return re;}else{return re.getElementsByTagName(tag);}} 
function tips(){ 
var article=$a("article","a") 
for(i=0;i<article.length;i++){ 
if(article[i].className.indexOf("cur")==-1) continue; 
article[i].onmouseover=function(e){ 
var e=e||event; 
posX = e.clientX; 
posY = e.clientY; 
var bodyhe=document.documentElement.clientHeight; 
var parwidth=$a("article").offsetWidth; 
var tipbox=get_nextSibling(this); 
var boxlist=$a("article","span") 
for(j=0;j<boxlist.length;j++){ 
boxlist[j].style.display="none"; 
boxlist[j].innerHTML="调入后台数据" 
} 
tipbox.style.display="block"; 
var w=tipbox.offsetWidth-this.offsetWidth; 
tipbox.style.left=(this.offsetLeft>parwidth/2?this.offsetLeft-w:this.offsetLeft)+"px"; 
tipbox.style.top=(posY+tipbox.offsetHeight>bodyhe?this.offsetTop-tipbox.offsetHeight:document.all?this.offsetTop+15:this.offsetTop+this.offsetHeight)+"px"; 
tipbox.onmouseover=function(){this.style.display="block";} 
tipbox.onmouseout=this.onmouseout=function(){tipbox.style.display="none";} 
} 
} 
} 
function get_nextSibling(n){ 
var x=n.nextSibling; 
while (x.nodeType!=1){ 
x=x.nextSibling; 
} 
return x; 
} 
</script> 
</body> 
</html>
Javascript 相关文章推荐
关于Jqzoom的使用心得 jquery放大镜效果插件
Apr 12 Javascript
JavaScript实现跨浏览器的添加及删除事件绑定函数实例
Aug 04 Javascript
关于获取DIV内部内容报错的原因分析及解决办法
Jan 29 Javascript
js重写方法的简单实现
Jul 10 Javascript
jQuery 选择符详细介绍及整理
Dec 02 Javascript
一篇文章搞定JavaScript类型转换(面试常见)
Jan 21 Javascript
JavaScript中使用webuploader实现上传视频功能(demo)
Apr 10 Javascript
AngularJS+bootstrap实现动态选择商品功能示例
May 17 Javascript
利用Node.js检测端口是否被占用的方法
Dec 07 Javascript
如何开发出更好的JavaScript模块
Dec 22 Javascript
简单了解Javscript中兄弟ifream的方法调用
Jun 17 Javascript
微信小程序按钮点击动画效果的实现
Sep 04 Javascript
一个简单的js鼠标划过切换效果
Jun 30 #Javascript
jQuery 通过事件委派一次绑定多种事件,以减少事件冗余
Jun 30 #Javascript
Jquery AJAX 用于计算点击率(统计)
Jun 30 #Javascript
基于jquery的图片懒加载js
Jun 30 #Javascript
CSS和Javascript简单复习资料
Jun 29 #Javascript
javascript与CSS复习(三)
Jun 29 #Javascript
javascript与CSS复习(二)
Jun 29 #Javascript
You might like
php2html php生成静态页函数
2008/12/08 PHP
TP框架实现上传一张图片和批量上传图片的方法分析
2020/04/23 PHP
javascript 操作文件 实现方法小结
2009/07/02 Javascript
基于jQuery实现左右div自适应高度完全相同的代码
2012/08/09 Javascript
优化Jquery,提升网页加载速度
2013/11/14 Javascript
验证控件与Button的OnClientClick事件详细解析
2013/12/04 Javascript
node+express+ejs制作简单页面上手指南
2014/11/26 Javascript
nw.js实现类似微信的聊天软件
2015/03/16 Javascript
原生JS封装ajax 传json,str,excel文件上传提交表单(推荐)
2016/06/21 Javascript
JavaScript正则表达式实例详解
2016/10/16 Javascript
Javascrip实现文字跳动特效
2016/11/27 Javascript
livereload工具实现前端可视化开发【推荐】
2016/12/23 Javascript
写gulp遇到的ES6问题详解
2018/12/03 Javascript
Electron vue的使用教程图文详解
2019/07/05 Javascript
vue双向绑定数据限制长度的方法
2019/11/04 Javascript
原生JavaScript创建不可变对象的方法简单示例
2020/05/07 Javascript
解决elementUI 切换tab后 el_table 固定列下方多了一条线问题
2020/07/19 Javascript
详解JavaScript中的链式调用
2020/11/27 Javascript
Python实现批量修改文件名实例
2015/07/08 Python
python3+PyQt5泛型委托详解
2018/04/24 Python
详解Django+Uwsgi+Nginx 实现生产环境部署
2018/11/06 Python
对python3标准库httpclient的使用详解
2018/12/18 Python
python多线程http压力测试脚本
2019/06/25 Python
解决pycharm上的jupyter notebook端口被占用问题
2019/12/17 Python
Python中使用socks5设置全局代理的方法示例
2020/04/15 Python
python一些性能分析的技巧
2020/08/30 Python
Django windows使用Apache实现部署流程解析
2020/10/12 Python
Tenstickers法国:墙贴和装饰贴纸
2019/08/26 全球购物
如何打造一封优秀的留学推荐信
2014/01/25 职场文书
销售口号大全
2014/06/11 职场文书
原料仓管员岗位职责
2015/04/01 职场文书
2016护理专业求职自荐书
2016/01/28 职场文书
导游词之青岛太清宫
2019/12/13 职场文书
启迪人心的励志语录:脾气永远不要大于本事
2020/01/02 职场文书
html+css合并表格边框的示例代码
2021/03/31 HTML / CSS
mysql字符串截取函数小结
2021/04/05 MySQL