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 相关文章推荐
创建一个复制UBB软件信息的链接或按钮的js代码
Jan 06 Javascript
返回上一页并自动刷新的JavaScript代码
Feb 19 Javascript
深入浅出理解javaScript原型链
May 09 Javascript
基于MVC5和Bootstrap的jQuery TreeView树形控件(一)之数据支持json字符串、list集合
Aug 11 Javascript
BootstrapTable refresh 方法使用实例简单介绍
Feb 20 Javascript
AngularJS中的promise用法分析
May 19 Javascript
js CSS3实现卡牌旋转切换效果
Jul 04 Javascript
基于JSON数据格式详解
Aug 31 Javascript
浅谈vue中使用图片懒加载vue-lazyload插件详细指南
Oct 23 Javascript
Node.Js中实现端口重用原理详解
May 03 Javascript
解决removeEventListener 无法清除监听的问题
Oct 30 Javascript
JS实现简单控制视频播放倍速的实例代码
Apr 18 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
PHP中使用crypt()实现用户身份验证的代码
2012/09/05 PHP
PHP入门经历和学习过程分享
2014/04/11 PHP
ThinkPHP快速入门实例教程之数据分页
2014/07/01 PHP
PHP实现简单搜歌的方法
2015/07/28 PHP
ThinkPHP2.x防范XSS跨站攻击的方法
2015/09/25 PHP
学习php设计模式 php实现状态模式
2015/12/07 PHP
yii2框架中使用下拉菜单的自动搜索yii-widget-select2实例分析
2016/01/09 PHP
PHP6连接SQLServer2005的三部曲
2016/04/15 PHP
浅谈php(codeigniter)安全性注意事项
2017/04/06 PHP
PHP 7.1中AES加解密方法mcrypt_module_open()的替换方案
2017/10/17 PHP
用JS提交参数创建form表单在FireFox中遇到的问题
2013/01/16 Javascript
分享一则javascript 调试技巧
2015/01/02 Javascript
JavaScript判断FileUpload控件上传文件类型
2015/09/28 Javascript
微信小程序 定位到当前城市实现实例代码
2017/02/23 Javascript
footer定位页面底部(代码分享)
2017/03/07 Javascript
关于Vue.nextTick()的正确使用方法浅析
2017/08/25 Javascript
微信小程序网络封装(简单高效)
2018/08/06 Javascript
jQuery+css last-child实现选择最后一个子元素操作示例
2018/12/10 jQuery
Vue中全局变量的定义和使用
2019/06/05 Javascript
基于JavaScript实现十五拼图代码实例
2020/04/26 Javascript
[44:15]DOTA2上海特级锦标赛主赛事日 - 5 败者组决赛Liquid VS EG第二局
2016/03/06 DOTA
Python中的元组介绍
2019/01/28 Python
python将字符串转变成dict格式的实现
2019/11/18 Python
简单了解python元组tuple相关原理
2019/12/02 Python
Python hashlib模块实例使用详解
2019/12/24 Python
pytorch中tensor张量数据类型的转化方式
2019/12/31 Python
解决pycharm不能自动保存在远程linux中的问题
2021/02/06 Python
Nike加拿大官网:Nike.com (CA)
2019/04/09 全球购物
求两个数的乘积和商数,该作用由宏定义来实现
2013/03/13 面试题
法律专业推荐信范文
2013/11/29 职场文书
售后专员岗位职责
2013/12/08 职场文书
应届生简历中的自我评价
2014/01/13 职场文书
高等教育专业自荐信范文
2014/03/26 职场文书
大学生工作求职信
2014/06/23 职场文书
西部计划志愿者工作总结
2015/08/11 职场文书
小学生组织委员竞选稿
2015/11/21 职场文书