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 相关文章推荐
如何确保JavaScript的执行顺序 之实战篇
Mar 03 Javascript
jquery load()在firefox(火狐)下显示不正常的解决方法
Apr 05 Javascript
c#和Javascript操作同一json对象的实现代码
Jan 17 Javascript
jQuery实现公告文字左右滚动的实例代码
Oct 29 Javascript
JS和Jquery获取和修改label的值的示例代码
Jan 15 Javascript
javascript操作excel生成报表全攻略
May 04 Javascript
node.js中的定时器nextTick()和setImmediate()区别分析
Nov 26 Javascript
什么是JavaScript注入攻击?
Sep 14 Javascript
微信小程序 前端源码逻辑和工作流详解
Oct 08 Javascript
Angular8基础应用之表单及其验证
Aug 11 Javascript
js+canvas实现纸牌游戏
Mar 16 Javascript
js实现简单商品筛选功能
Feb 02 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 php_openssl.dll的作用
2013/07/01 PHP
一漂亮的PHP图片验证码实例
2014/03/21 PHP
thinkphp框架下实现登录、注册、找回密码功能
2016/04/06 PHP
php的api数据接口书写实例(推荐)
2016/09/22 PHP
thinkphp5 migrate数据库迁移工具
2018/02/20 PHP
jquery自动完成插件(autocomplete)应用之PHP版
2009/12/15 Javascript
javascript 快速排序函数代码
2012/05/30 Javascript
js 火狐下取本地路径实现思路
2013/04/02 Javascript
jQuery插件EasyUI实现Layout框架页面中弹出窗体到最顶层效果(穿越iframe)
2016/08/05 Javascript
浅析BootStrap Treeview的简单使用
2016/10/12 Javascript
VueJS全面解析
2016/11/10 Javascript
jQuery实现图片滑动效果
2017/03/08 Javascript
利用HBuilder打包前端开发webapp为apk的方法
2017/11/13 Javascript
JQuery+Bootstrap 自定义全屏Loading插件的示例demo
2019/07/03 jQuery
JQuery事件委托(适用于给动态生成的脚本元素添加事件)
2020/02/01 jQuery
Python实现的彩票机选器实例
2015/06/17 Python
Python实现随机选择元素功能
2017/09/14 Python
Vue的el-scrollbar实现自定义滚动
2018/05/29 Python
python 实现交换两个列表元素的位置示例
2019/06/26 Python
使用python实现kNN分类算法
2019/10/16 Python
Python3如何判断三角形的类型
2020/04/12 Python
Python持续监听文件变化代码实例
2020/07/22 Python
简述python&amp;pytorch 随机种子的实现
2020/10/07 Python
Sentry错误日志监控使用方法解析
2020/11/12 Python
matplotlib阶梯图的实现(step())
2021/03/02 Python
美国南部最大的家族百货公司:Belk
2017/01/30 全球购物
自我鉴定书
2014/03/24 职场文书
百货商场楼层班组长竞聘书
2014/03/31 职场文书
校园演讲稿汇总
2014/05/21 职场文书
计算机毕业生求职信
2014/06/10 职场文书
2014年护士个人工作总结
2014/11/11 职场文书
破坏寝室公物检讨书
2014/11/17 职场文书
处级干部考察材料
2014/12/24 职场文书
实战Python爬虫爬取酷我音乐
2022/04/11 Python
mysql性能优化以及配置连接参数设置
2022/05/06 MySQL
Win2008系统搭建DHCP服务器
2022/06/25 Servers