Web前端设计模式  制作漂亮的弹出层


Posted in Javascript onOctober 29, 2010

Web前端设计模式  制作漂亮的弹出层
现在问题来了,这个版块不大,更新频率却很高,每天都有十数条最新的信息上去,浏览网站的会员对于最新图书的了解和需求越来越大,因此需要对这个板块进行改良,以满足会员的需求,会员的主要要求有以下几个方面:显示该最新上架的图书的封面缩略图,该图书的名称和作者名称,以及该书部分内容的介绍和作者的简介...
这下把Ben给愁坏掉了,首页上根本就没有多余的空间,怎么来呈现封面缩略图甚至是内容简介,如果去掉别的板块空间来实现这一板块的扩张,无异于在一家公司以牺牲一个部门来壮大另外一个部门,这是万万不可取的...
于是Ben想到了以弹出层的方式来显示每条信息的详细内容...
设计目标:
在不改变页面结构的情况下,以弹出层(用Dom重构的方式来实现元素的追加append和移除remove)的方式提高页面信息量...
解决方案:
首先,我们设计一个Div,样式如下:

.TipDiv 
{ 
width:500px; 
height:120px; 
padding:8px; 
border-top:solid 5px #a6c9e2; 
border-bottom:solid 5px #a6c9e2; 
border-left:solid 1px #a6c9e2; 
border-right:solid 1px #a6c9e2; 
background:#ffffff; 
z-index:10;/*z-index很重要,它决定了Div框在页面上的叠加顺序*/ 
position:absolute;/*绝对定位,它决定了该元素可以根据top 和 left 叠在其他元素上*/ 
} 
.TipDiv img 
{ 
width:110px; 
height:110px; 
margin-right:36px; 
margin-left:10px; 
float:left; 
} 
.TipDiv span 
{ 
/*×*/ 
width:340px; 
height:110px; 
float:left; 
word-break:break-all; 
border-top:dashed 1px #3a7ac8; 
margin-top:8px; 
}

下面是脚本,当鼠标经过的时候才响应弹出框事件:
$(document).ready(function(){ 
//标题鼠标经过 
$("ul li a").mousemove(function(e){ 
$(".TipDiv").remove();//若页面上有该元素,则移除该元素...0 
var x=e.clientX + 10;//获取鼠标的x轴坐标 
var y=e.clientY + 10;//获取鼠标的y轴坐标 
var num=$(this).attr("id"); 
var imgs; 
var word; 
var name; 
switch(num) 
{ 
case "1":{ imgs="images/mimi.bmp"; name="秘密 朗达·拜恩 (Rhonda Byrne)..." ; word="这是一个神圣的秘密花园,住着爱丽丝..." ; break; } 
case "2":{ imgs="images/mama.bmp"; name="一位母亲的记忆 爱心团..." ; word="这是一个关于母亲的故事,感染了每个中国人,她是一位暴走族母亲,也是一位为儿子捐献肝的母亲,她更是一位伟大的,典型的中国母亲..." ; break; } 
case "3":{ imgs="images/nikesong.bmp"; name="尼克爷爷讲故事 (巴特沃斯, 漪然)..." ; word="★当今世界最出色的儿童绘本作家、插画家!<br>★获得1992年度英国图书奖(British Book Awards)<br>★全球每15分钟就有一本由他创作的绘本被买走<br>★他的绘本让阅读变得赏心悦目!" ; break; } 
case "4":{ imgs="images/lqz.bmp"; name="李清照:人生不过一场绚烂花(蔚起)..." ; word="《李清照:人生不过一场绚烂花事》精选易安词作50首,从《武陵春(风住尘香花已尽)》始,至《好事近(风定落花深)》结束。通篇以闲话家常、婉约诚挚的笔法评析、阐释,娓娓道来,不生涩,没有说教。" ; break; } 
} 
popDiv(imgs,name,word,x,y); 
}) 
//标题鼠标离开 
$("ul li a").mouseout(function(){ 
$(".TipDiv").remove(); 
}) 
}) //随鼠标移动的信息框 
function popDiv(face,name,info,xx,yy) 
{ 
var str=""; 
str+="<div class='TipDiv'>"; 
str+="<img alt='face' src='"+face+"'/>"; 
str+="<strong><em>"+name+"</em></strong><br />"; 
str+="<span>"+info+"</span>"; 
str+="<div>"; 
$('body').append(str);//在页面上追加该元素,样式如上已经写好 
$(".TipDiv").css({"top":yy+"px","left":xx+"px"});//设置该元素出现的位置(这里是出现在鼠标的右边和下边的偏离10px位置) 
}

结果如下(当鼠标指向第三条数据时,弹出该框, 并随鼠标移动):

Web前端设计模式  制作漂亮的弹出层
做到这边,会员有了一个新的要求,就是不要弹出框随着鼠标的移动而移动,那样鼠标一旦离开焦点,就会移除该弹出框,操作起来不是很方便。他们要求弹出框固定,假设就在相应的数据行的右侧吧,而且打开和关闭由会员自己控制,于是Ben就进行改良了...
同样的,先设计一个id为tips的Div元素,样式如下:

#tips 
{ 
background-color: white; 
border-left: 1px solid #a6c9e2; 
border-right: 1px solid #a6c9e2; 
border-top:5px solid #a6c9e2; 
border-bottom:5px solid #a6c9e2; 
width:268px; height:60px; 
z-index:9; 
position:absolute; 
-moz-border-radius: 5px; -webkit-border-radius: 5px; 
padding:8px 18px; 
} 
/* 弹出层的指向图标,left:-10 使它出现在整个Div的左侧 */ 
#tips #tipsArrow { position:absolute; top:26px; left: -10px } 
#tips #light 
{ 
width:36px; 
height:36px; 
margin:6px 16px 16px 16px; 
float:left; 
} 
#tips span 
{ 
margin-top:18px; 
} 
#tips #close 
{ 
width:20px; 
height:16px; 
border:none; 
z-index:1; 
left:280px; 
top:6px; 
position:absolute; 
cursor:pointer; 
}

脚本如下:
$(document).ready(function(){ 
//时间鼠标经过 
$("ul li span").mouseover(function(){ 
$("#tips").remove(); 
var elem= $(this).parent(); 
var mTop=elem.offset().top;//获取该元素的top坐标 
var mLeft=elem.offset().left;//获取该元素的left坐标 
var addLeft=elem.width();//获取该元素的宽度 
var finalTop=mTop-30;//获取最终元素出现的Top位置,此时-30个元素是提高这个Div的高度,让箭头指向对应行 
var finalleft=mLeft+addLeft+20; // 获取最终元素出现Left的,对应行的左边加上行宽加上20个空元素 
var num=$("li").index(elem)+1; 
popDiv1(finalTop,finalleft,"提示框提醒你,这是第"+num+"行数据!"); 
}) 
}) 
//固定的信息框 
function popDiv1(tops,lefts,messages) 
{ 
var str=""; 
str="<div id='tips'><img id='tipsArrow' src='images/arrow.png' alt=''/><img id='close' src='images/close.jpg' alt='' onclick='closeUp()'/><img src='images/light.gif' alt='' id='light'/><p>"+messages+"</p></div>"; 
$('body').append(str); 
$("#tips").css({"top":tops+"px","left":lefts+"px"}); 
} 
function closeUp() 
{ 
$("#tips").remove(); 
}

最终显示效果如下:
Web前端设计模式  制作漂亮的弹出层

Web前端设计模式  制作漂亮的弹出层

鼠标移动到相应的数据行上面,显示相应的提示框,右边的打叉小图标用以关闭整个弹出层...
设计小结:

这个设计过程的关键是position:absolute(绝对定位,作用是让层在页面上叠加),z-index(用以显示层的叠加次序),top、left(显示弹出页面坐标),(offset().left,offset().top)在页面上找到某个元素的坐标,位置找到了,就可以随意在它的周边定位弹出层了,其他的样式可以根据自己的美工需求随意调节...

源码下载 http://xiazai.3water.com/201010/yuanma/popDiv.rar

Javascript 相关文章推荐
jquery URL参数判断,确定菜单样式
May 31 Javascript
JavaScript 用Node.js写Shell脚本[译]
Sep 20 Javascript
JavaScript对内存分配及管理机制详细解析
Nov 11 Javascript
JS小游戏之象棋暗棋源码详解
Sep 25 Javascript
jquery动态遍历Json对象的属性和值的方法
Jul 27 Javascript
很酷的星级评分系统原生JS实现
Aug 25 Javascript
vue.js指令v-model使用方法
Mar 20 Javascript
vue+web端仿微信网页版聊天室功能
Apr 30 Javascript
vue+express+jwt持久化登录的方法
Jun 14 Javascript
浅谈Vue2.4.0 $attrs与inheritAttrs的具体使用
Mar 08 Javascript
javascript实现的图片预览和上传功能示例【兼容IE 9】
May 01 Javascript
vue实践---根据不同环境,自动转换请求的url地址操作
Sep 21 Javascript
10个基于Jquery的幻灯片插件教程
Oct 29 #Javascript
jQuery.ajax 用户登录验证代码
Oct 29 #Javascript
Jquery Autocomplete 结合asp.net使用要点
Oct 29 #Javascript
JavaScript 小型打飞机游戏实现原理说明
Oct 28 #Javascript
基于jquery的网页SELECT下拉框美化代码
Oct 28 #Javascript
jQuery编写widget的一些技巧分享
Oct 28 #Javascript
jQuery timers计时器简单应用说明
Oct 28 #Javascript
You might like
DSP接收机前端设想
2021/03/02 无线电
php防止网站被刷新的方法汇总
2014/12/01 PHP
jQuery 技巧小结
2010/04/02 Javascript
JavaScript Distilled 基础知识与函数
2010/04/07 Javascript
基于jQuery的一个扩展form序列化到json对象
2010/12/09 Javascript
JavaScript动态创建div属性和样式示例代码
2013/10/09 Javascript
新手快速学习JavaScript免费教程资源汇总
2015/06/25 Javascript
Nodejs的express使用教程
2015/11/23 NodeJs
babel的使用及安装配置教程
2018/02/22 Javascript
js实现鼠标单击Tab表单切换效果
2018/05/16 Javascript
layer弹出层自适应高度,垂直水平居中的实现
2019/09/16 Javascript
解决VUE-Router 同一页面第二次进入不刷新的问题
2020/07/22 Javascript
Python写的英文字符大小写转换代码示例
2015/03/06 Python
Django自定义插件实现网站登录验证码功能
2017/04/19 Python
python实现分页效果
2017/10/25 Python
Python解决八皇后问题示例
2018/04/22 Python
python与字符编码问题
2019/05/24 Python
Python 实现集合Set的示例
2020/12/21 Python
简单聊聊H5的pushState与replaceState的用法
2018/04/03 HTML / CSS
html5在移动端的屏幕适应问题示例探讨
2014/06/15 HTML / CSS
介绍一下Make? 为什么使用make
2013/12/08 面试题
轻金属冶金专业毕业生自荐信
2013/11/02 职场文书
函授毕业生的自我鉴定
2013/11/26 职场文书
师范生的个人求职信范文
2014/01/04 职场文书
学生自我评价范文
2014/02/02 职场文书
挂牌仪式主持词
2014/03/20 职场文书
文明单位申报材料
2014/12/23 职场文书
2015大学自主招生自荐信范文
2015/03/04 职场文书
工程质检员岗位职责
2015/04/08 职场文书
专职安全员岗位职责
2015/04/11 职场文书
2015年个人招商工作总结
2015/04/25 职场文书
钢琴师观后感
2015/06/12 职场文书
增值税发票丢失证明
2015/06/19 职场文书
2016年艾滋病宣传活动总结
2016/04/01 职场文书
JavaGUI模仿QQ聊天功能完整版
2021/07/04 Java/Android
Android中View.post和Handler.post的关系
2022/06/05 Java/Android