JS控制弹出悬浮窗口(一览画面)的实例代码


Posted in Javascript onMay 30, 2016

在web项目开发中经常遇到在一览画面中用户需要查看某一条记录的详细信息。如果用迁移画面的方式处理,速度会比较慢,而且用户体验不是太好。如果采用点击该条记录的详细链接时弹出一个层显示在当前画面的话,处理速度很快,而且用户感觉也比较新颖。下面我以某个对日电子商务网站为实例说明下它的实现方式。

1、jsp页面上弹出层的代码

<!-- 物流详情弹出页面 start --> 
<s:iterator value="lrVo" var="lrVo" id="lrVo" status="st"> 
<div class="logisticscenter_xq" style="display: none;" id='<s:property value="#lrVo.logisticNO"/>'> 
<dl> 
<dt><strong><s:text name="struts.webui.logistics.label.logisticsDetails"/>:</strong></dt> 
<dd><strong class="close_wind">X</strong></dd> 
</dl> 
<div class="information logistics_win"> 
<table width="" border="0" cellspacing="0" cellpadding="0"> 
<tr> 
<td class="r_text"><span class="icon9">*</span><s:text name="struts.webui.logistics.label.logisticsNumber"/>:</td> 
<td></td> 
<td colspan="3" id="logisticNo"><s:property value="#lrVo.logisticNO"/></td> 
</tr> 
<tr> 
<td valign="top" class="r_text"><span class="icon9">*</span><s:text name="struts.webui.logistics.label.distribution"/>:</td> 
<td></td> 
<td colspan="3" style="text-align:left" id="content"><s:property value="#lrVo.content" escape="false"/></td> 
</tr> 
</table> 
</div> 
</div> 
</s:iterator> 
<!--物流详情弹出窗口 end-->

层样式代码:

.logisticscenter_xq{ 
position: absolute; 
width:710px; 
border:solid 2px #787878; 
background: #edfcfe; 
z-index: 2; 
}

我的处理时将弹出层放置到整个网站页面的layout.jsp,网站中所有页面的布局都继承它。该网站采用tiles框架统一对页面布局。

2、计算对象居中要设置的left值和top值

我把这一步要完成的功能写成一个js文件,主要是根据用户在一览页面上鼠标点击的坐标位置,动态地显示该条记录的层窗口。主要代码如下:

// 计算对象居中需要设置的left和top值 
// 参数: 
// _w - 对象的宽度 
// _h - 对象的高度 
function getLT(_w,_h) 
{ 
var de = document.documentElement; 
// 获取当前浏览器窗口的宽度和高度 
// 兼容写法,可兼容ie,ff 
var w = self.innerWidth || (de&&de.clientWidth) || document.body.clientWidth; 
var h = (de&&de.clientHeight) || document.body.clientHeight; 
// 获取当前滚动条的位置 
// 兼容写法,可兼容ie,ff 
var st= (de&&de.scrollTop) || document.body.scrollTop; 
var topp=0; 
if(h>_h) 
topp=(st+(h - _h)/2); 
else 
topp=st; 
var leftp = 0; 
if(w>_w) 
leftp = ((w - _w)/2); 
// 左侧距,顶部距 
return [leftp,topp]; 
} 
//获取鼠标位置GetPostion 
function GetPostion(e) { 
var x = getX(e); 
var y = getY(e); 
} 
function getX(e) { 
e = e || window.event; 
return e.pageX || e.clientX + document.body.scrollLeft - document.body.clientLeft 
} 
function getY(e) { 
e = e|| window.event; 
return e.pageY || e.clientY + document.body.scrollTop - document.body.clientTop 
} 
//判断浏览器类型 
function getOs() 
{ 
var OsObject = ""; 
if(navigator.userAgent.indexOf("MSIE")>0) { 
return "MSIE"; 
} 
if(isFirefox=navigator.userAgent.indexOf("Firefox")>0){ 
return "Firefox"; 
} 
if(isSafari=navigator.userAgent.indexOf("Safari")>0) { 
return "Safari"; 
} 
if(isCamino=navigator.userAgent.indexOf("Camino")>0){ 
return "Camino"; 
} 
if(isMozilla=navigator.userAgent.indexOf("Gecko/")>0){ 
return "Gecko"; 
} 
}

将该js包含到主调用的一览jsp文件中。

<script language="javascript" type="text/javascript" src="<s:url value="/js/aligncenter.js"/>"></script>

3、一览jsp中的调用方法

<a class="view_button" onclick="viewLogistics(event,'<s:property value="#lrVo.logisticNO"/>')" href="####"><s:text name="struts.webui.logistics.label.view"/></a>

用户点击该行记录的详情链接时调用显示层的方法,同时将该记录的id值传给调用方法。其实,每一个层就是用这条记录的一个id属性值进行区分的。

function viewLogistics(event,logisticNO){ 
var os = getOs(); 
var y = getY(event); 
if(os=='MSIE'){ 
y=window.event.y+405; 
} 
$(".logisticscenter_xq").hide(); 
$("#"+logisticNO).show(); 
$("#"+logisticNO).css("top",y+15); 
}

至于方法中event参数的作用,还不是太清楚,这点需要再调查一下。最终效果如下图,随着鼠标下移,层能够动态的移动。

JS控制弹出悬浮窗口(一览画面)的实例代码

以上所述是小编给大家介绍的JS控制弹出悬浮窗口(一览画面)的实例代码,希望对大家有所帮助,如果大家想了解更多资讯请关注三水点靠木网站!

Javascript 相关文章推荐
静态图片的十一种滤镜效果--不支持Ie7及非IE浏览器。
Mar 06 Javascript
js从10种颜色中随机取色实现每次取出不同的颜色
Oct 23 Javascript
解决html按钮切换绑定不同函数后点击时执行多次函数问题
May 14 Javascript
学习JavaScript设计模式(多态)
Nov 25 Javascript
原生JS实现平滑回到顶部组件
Mar 16 Javascript
BOM系列第一篇之定时器setTimeout和setInterval
Aug 17 Javascript
深入理解requestAnimationFrame的动画循环
Sep 20 Javascript
jQuery Validate插件自定义验证规则的方法
Dec 27 Javascript
基于jQuery实现弹幕APP
Feb 10 Javascript
JavaScript通过filereader接口读取文件
May 10 Javascript
基于JavaScript实现无限加载瀑布流
Jul 21 Javascript
Vue实现购物小球抛物线的方法实例
Nov 22 Vue.js
限制复选框最多选择项的实现代码
May 30 #Javascript
Javascript实现通过选择周数显示开始日和结束日的实现代码
May 30 #Javascript
JS组件Bootstrap Table使用实例分享
May 30 #Javascript
Bootstrap table分页问题汇总
May 30 #Javascript
浅析Javascript中bind()方法的使用与实现
May 30 #Javascript
Bootstrap Paginator分页插件使用方法详解
May 30 #Javascript
深入理解JavaScript中的call、apply、bind方法的区别
May 30 #Javascript
You might like
PHP面向对象之事务脚本模式(详解)
2017/06/07 PHP
浅谈PHP实现大流量下抢购方案
2017/12/15 PHP
php时间戳转换代码详解
2019/08/04 PHP
提高网站信任度的技巧
2008/10/17 Javascript
js+CSS 图片等比缩小并垂直居中实现代码
2008/12/01 Javascript
一个网马的tips实现分析
2010/11/28 Javascript
输入密码检测大写是否锁定js实现代码
2012/12/03 Javascript
jquery动态改变onclick属性导致失效的问题解决方法
2013/12/04 Javascript
原生js和jquery中有关透明度设置的相关问题
2014/01/08 Javascript
document.compatMode的CSS1compat使用介绍
2014/04/03 Javascript
html的DOM中Event对象onblur事件用法实例
2015/01/21 Javascript
JavaScript计划任务后台运行的方法
2015/12/18 Javascript
Nodejs进阶:基于express+multer的文件上传实例
2016/11/21 NodeJs
jquery.guide.js新版上线操作向导镂空提示jQuery插件(推荐)
2017/05/20 jQuery
JavaScript该如何学习 怎样轻松学习JavaScript
2017/06/12 Javascript
JavaScript上传文件时不用刷新页面方法总结(推荐)
2017/08/15 Javascript
Bootstrap 按钮样式与使用代码详解
2018/12/09 Javascript
浅谈webpack和webpack-cli模块源码分析
2020/01/19 Javascript
Vue使用轮询定时发送请求代码
2020/08/10 Javascript
通过实例解析js可枚举属性与不可枚举属性
2020/12/02 Javascript
Vue如何实现验证码输入交互
2020/12/07 Vue.js
[48:44]2014 DOTA2国际邀请赛中国区预选赛5.21 TongFu VS HGT
2014/05/22 DOTA
[02:16]深扒TI7聊天轮盘语音出处2
2017/05/11 DOTA
Python中实现最小二乘法思路及实现代码
2018/01/04 Python
详解Python判定IP地址合法性的三种方法
2018/03/06 Python
Python加载带有注释的Json文件实例
2018/05/23 Python
Python和Java的语法对比分析语法简洁上python的确完美胜出
2019/05/10 Python
python使用pygame模块实现坦克大战游戏
2020/03/25 Python
将python文件打包成EXE应用程序的方法
2019/05/22 Python
PyQt5 closeEvent关闭事件退出提示框原理解析
2020/01/08 Python
django 实现手动存储文件到model的FileField
2020/03/30 Python
解决运行django程序出错问题 'str'object has no attribute'_meta'
2020/07/15 Python
Python实现网络聊天室的示例代码(支持多人聊天与私聊)
2021/01/27 Python
NFL Game Pass欧洲:在线观看NFL比赛直播和点播,以高清质量播放
2018/08/30 全球购物
世界各地的当地人的食物体验:Eatwith
2019/07/26 全球购物