jquery_dialog实现效果
jquery_dialog实现效果
jquery_dialog.js
<!--
/***************************************************************************** [作者]
吴剑 http://wu-jian.cnblogs.com/ [版本记录]
2009-06-01:版本1.0.1发布。
2009-07-05:版本1.0.2,更新了一些明显的BUG,完全支持了IE系列浏览器。
2009-08-15:版本1.0.3,封装了标准DOM,多浏览器下兼容,样式美化,添加了阴影效果。
2009-11-05:版本2.0.0,基于JQuery全新封装,应用了JS的命名空间,避免了客户端id冲突。
项目正式更名为JQuery Dialog,优化了拖拽的核心实现,完全支持跨浏览器。
2009-12-13:版本2.0.1,优化了核心的拖拽算法,分离出DragAndDrop类。
使用异步的Javascript让拖拽更为流畅。
修复了鼠标拖动过快Dialog停顿的BUG。
对拖拽的位置与滚动条之间进行协调,限制拖拽范围,修复了原有BUG。
修复了当Dialog宽或高大于页面时定位的BUG。
修复了鼠标样式与拖拽控制区不精确的BUG。
至此,完善为一个较为强壮JQuery插件了。
2010-02-03:版本2.0.3,JQuery升级为1.4。
为Open增加了内部扩展接口。
修复IE6下部分显示BUG。 *****************************************************************************/ var JqueryDialog = { //配置项
//模态窗口背景色
"cBackgroundColor" : "#ffffff", //边框尺寸(像素)
"cBorderSize" : 2,
//边框颜色
"cBorderColor" : "#999999", //Header背景色
"cHeaderBackgroundColor" : "#f0f0f0",
//右上角关闭显示文本
"cCloseText" : "X 关闭",
//鼠标移上去时的提示文字
"cCloseTitle" : "关闭", //Bottom背景色
"cBottomBackgroundColor" : "#f0f0f0",
//提交按钮文本
"cSubmitText" : "确 认",
//取消按钮文本
"cCancelText" : "取 消", //拖拽效果
"cDragTime" : "100", /// <summary>创建对话框</summary>
/// <param name="dialogTitle">对话框标题</param>
/// <param name="iframeSrc">iframe嵌入页面地址</param>
/// <param name="iframeWidth">iframe嵌入页面宽</param>
/// <param name="iframeHeight">iframe嵌入页面高</param>
Open:function(dialogTitle, iframeSrc, iframeWidth, iframeHeight){
JqueryDialog.init(dialogTitle, iframeSrc, iframeWidth, iframeHeight, true, true, true);
}, /// <summary>创建对话框</summary>
/// <param name="dialogTitle">对话框标题</param>
/// <param name="iframeSrc">iframe嵌入页面地址</param>
/// <param name="iframeWidth">iframe嵌入页面宽</param>
/// <param name="iframeHeight">iframe嵌入页面高</param>
/// <param name="isSubmitButton">是否呈现“确认”按钮</param>
/// <param name="isCancelButton">是否呈现“取消”按钮</param>
/// <param name="isDrag">是否支持拖拽</param>
Open1:function(dialogTitle, iframeSrc, iframeWidth, iframeHeight, isSubmitButton, isCancelButton, isDrag){
JqueryDialog.init(dialogTitle, iframeSrc, iframeWidth, iframeHeight, isSubmitButton, isCancelButton, isDrag);
}, /// <summary>创建对话框</summary>
/// <param name="dialogTitle">对话框标题</param>
/// <param name="iframeSrc">iframe嵌入页面地址</param>
/// <param name="iframeWidth">iframe嵌入页面宽</param>
/// <param name="iframeHeight">iframe嵌入页面高</param>
/// <param name="isSubmitButton">是否呈现“确认”按钮</param>
/// <param name="isCancelButton">是否呈现“取消”按钮</param>
/// <param name="isDrag">是否支持拖拽</param>
init:function(dialogTitle, iframeSrc, iframeWidth, iframeHeight, isSubmitButton, isCancelButton, isDrag){ //获取客户端页面宽高
var _client_width = document.body.clientWidth;
var _client_height = document.documentElement.scrollHeight; //create shadow
if(typeof($("#jd_shadow")[0]) == "undefined"){
//前置
$("body").prepend("<div id='jd_shadow'> </div>");
var _jd_shadow = $("#jd_shadow");
_jd_shadow.css("width", _client_width + "px");
_jd_shadow.css("height", _client_height + "px");
} //create dialog
if(typeof($("#jd_dialog")[0]) != "undefined"){
$("#jd_dialog").remove();
}
$("body").prepend("<div id='jd_dialog'></div>"); //dialog location
//left 边框*2 阴影5
//top 边框*2 阴影5 header30 bottom50
var _jd_dialog = $("#jd_dialog");
var _left = (_client_width - (iframeWidth + JqueryDialog.cBorderSize * 2 + 5)) / 2;
_jd_dialog.css("left", (_left < 0 ? 0 : _left) + document.documentElement.scrollLeft + "px"); var _top = (document.documentElement.clientHeight - (iframeHeight + JqueryDialog.cBorderSize * 2 + 30 + 50 + 5)) / 2;
_jd_dialog.css("top", (_top < 0 ? 0 : _top) + document.documentElement.scrollTop + "px"); //create dialog shadow
_jd_dialog.append("<div id='jd_dialog_s'> </div>");
var _jd_dialog_s = $("#jd_dialog_s");
//iframeWidth + double border
_jd_dialog_s.css("width", iframeWidth + JqueryDialog.cBorderSize * 2 + "px");
//iframeWidth + double border + header + bottom
_jd_dialog_s.css("height", iframeHeight + JqueryDialog.cBorderSize * 2 + 30 + 50 + "px"); //create dialog main
_jd_dialog.append("<div id='jd_dialog_m'></div>");
var _jd_dialog_m = $("#jd_dialog_m");
_jd_dialog_m.css("border", JqueryDialog.cBorderColor + " " + JqueryDialog.cBorderSize + "px solid");
_jd_dialog_m.css("width", iframeWidth + "px");
_jd_dialog_m.css("background-color", JqueryDialog.cBackgroundColor); //header
_jd_dialog_m.append("<div id='jd_dialog_m_h'></div>");
var _jd_dialog_m_h = $("#jd_dialog_m_h");
_jd_dialog_m_h.css("background-color", JqueryDialog.cHeaderBackgroundColor); //header left
_jd_dialog_m_h.append("<span id='jd_dialog_m_h_l'>" + dialogTitle + "</span>");
_jd_dialog_m_h.append("<span id='jd_dialog_m_h_r' title='" + JqueryDialog.cCloseTitle + "' onclick='JqueryDialog.Close();'>" + JqueryDialog.cCloseText + "</span>"); //body
_jd_dialog_m.append("<div id='jd_dialog_m_b'></div>");
var _jd_dialog_m_b = $("#jd_dialog_m_b");
_jd_dialog_m_b.css("width", iframeWidth + "px");
_jd_dialog_m_b.css("height", iframeHeight + "px"); //iframe 遮罩层
_jd_dialog_m_b.append("<div id='jd_dialog_m_b_1'> </div>");
var _jd_dialog_m_b_1 = $("#jd_dialog_m_b_1");
_jd_dialog_m_b_1.css("top", "30px");
_jd_dialog_m_b_1.css("width", iframeWidth + "px");
_jd_dialog_m_b_1.css("height", iframeHeight + "px");
_jd_dialog_m_b_1.css("display", "none"); //iframe 容器
_jd_dialog_m_b.append("<div id='jd_dialog_m_b_2'></div>");
//iframe
$("#jd_dialog_m_b_2").append("<iframe id='jd_iframe' src='"+iframeSrc+"' scrolling='no' frameborder='0' width='"+iframeWidth+"' height='"+iframeHeight+"' />"); //bottom
_jd_dialog_m.append("<div id='jd_dialog_m_t' style='background-color:"+JqueryDialog.cBottomBackgroundColor+";'></div>");
var _jd_dialog_m_t = $("#jd_dialog_m_t");
if(isSubmitButton){
_jd_dialog_m_t.append("<span><input id='jd_submit' value='"+JqueryDialog.cSubmitText+"' type='button' onclick='JqueryDialog.Ok();' /></span>");
}
if(isCancelButton){
_jd_dialog_m_t.append("<span class='jd_dialog_m_t_s'><input id='jd_cancel' value='"+JqueryDialog.cCancelText+"' type='button' onclick='JqueryDialog.Close();' /></span>");
} //register drag
if(isDrag){
DragAndDrop.Register(_jd_dialog[0], _jd_dialog_m_h[0]);
}
}, /// <summary>关闭模态窗口</summary>
Close:function(){
$("#jd_shadow").remove();
$("#jd_dialog").remove();
}, /// <summary>提交</summary>
/// <remark></remark>
Ok:function(){
var frm = $("#jd_iframe");
if (frm[0].contentWindow.Ok()){
JqueryDialog.Close() ;
}
else{
frm[0].focus() ;
}
}, /// <summary>提交完成</summary>
/// <param name="alertMsg">弹出提示内容,值为空不弹出</param>
/// <param name="isCloseDialog">是否关闭对话框</param>
/// <param name="isRefreshPage">是否刷新页面(关闭对话框为true时有效)</param>
SubmitCompleted:function(alertMsg, isCloseDialog, isRefreshPage){
if($.trim(alertMsg).length > 0 ){
alert(alertMsg);
}
if(isCloseDialog){
JqueryDialog.Close();
if(isRefreshPage){
window.location.href = window.location.href;
}
}
}
}; var DragAndDrop = function(){ //客户端当前屏幕尺寸(忽略滚动条)
var _clientWidth;
var _clientHeight; //拖拽控制区
var _controlObj;
//拖拽对象
var _dragObj;
//拖动状态
var _flag = false; //拖拽对象的当前位置
var _dragObjCurrentLocation; //鼠标最后位置
var _mouseLastLocation; //使用异步的Javascript使拖拽效果更为流畅
//var _timer; //定时移动,由_timer定时调用
//var intervalMove = function(){
// $(_dragObj).css("left", _dragObjCurrentLocation.x + "px");
// $(_dragObj).css("top", _dragObjCurrentLocation.y + "px");
//}; var getElementDocument = function(element){
return element.ownerDocument || element.document;
}; //鼠标按下
var dragMouseDownHandler = function(evt){ if(_dragObj){ evt = evt || window.event; //获取客户端屏幕尺寸
_clientWidth = document.body.clientWidth;
_clientHeight = document.documentElement.scrollHeight; //iframe遮罩
$("#jd_dialog_m_b_1").css("display", ""); //标记
_flag = true; //拖拽对象位置初始化
_dragObjCurrentLocation = {
x : $(_dragObj).offset().left,
y : $(_dragObj).offset().top
}; //鼠标最后位置初始化
_mouseLastLocation = {
x : evt.screenX,
y : evt.screenY
}; //注:mousemove与mouseup下件均针对document注册,以解决鼠标离开_controlObj时事件丢失问题
//注册事件(鼠标移动)
$(document).bind("mousemove", dragMouseMoveHandler);
//注册事件(鼠标松开)
$(document).bind("mouseup", dragMouseUpHandler); //取消事件的默认动作
if(evt.preventDefault)
evt.preventDefault();
else
evt.returnValue = false; //开启异步移动
//_timer = setInterval(intervalMove, 10);
}
}; //鼠标移动
var dragMouseMoveHandler = function(evt){
if(_flag){ evt = evt || window.event; //当前鼠标的x,y座标
var _mouseCurrentLocation = {
x : evt.screenX,
y : evt.screenY
}; //拖拽对象座标更新(变量)
_dragObjCurrentLocation.x = _dragObjCurrentLocation.x + (_mouseCurrentLocation.x - _mouseLastLocation.x);
_dragObjCurrentLocation.y = _dragObjCurrentLocation.y + (_mouseCurrentLocation.y - _mouseLastLocation.y); //将鼠标最后位置赋值为当前位置
_mouseLastLocation = _mouseCurrentLocation; //拖拽对象座标更新(位置)
$(_dragObj).css("left", _dragObjCurrentLocation.x + "px");
$(_dragObj).css("top", _dragObjCurrentLocation.y + "px"); //取消事件的默认动作
if(evt.preventDefault)
evt.preventDefault();
else
evt.returnValue = false;
}
}; //鼠标松开
var dragMouseUpHandler = function(evt){
if(_flag){
evt = evt || window.event; //取消iframe遮罩
$("#jd_dialog_m_b_1").css("display", "none"); //注销鼠标事件(mousemove mouseup)
cleanMouseHandlers(); //标记
_flag = false; //清除异步移动
//if(_timer){
// clearInterval(_timer);
// _timer = null;
//}
}
}; //注销鼠标事件(mousemove mouseup)
var cleanMouseHandlers = function(){
if(_controlObj){
$(_controlObj.document).unbind("mousemove");
$(_controlObj.document).unbind("mouseup");
}
}; return {
//注册拖拽(参数为dom对象)
Register : function(dragObj, controlObj){
//赋值
_dragObj = dragObj;
_controlObj = controlObj;
//注册事件(鼠标按下)
$(_controlObj).bind("mousedown", dragMouseDownHandler);
}
} }(); //-->
jquery_dialog.css
#jd_shadow{z-index:;position:absolute;background-color:#000000;filter:alpha(opacity=25);-moz-opacity:0.25;opacity:0.25;}
#jd_dialog{z-index:;position:absolute;}
#jd_dialog_s{position:absolute;top:5px;left:5px;background-color:#000000;filter:alpha(opacity=40);-moz-opacity:0.4;opacity:0.4;}
#jd_dialog_m{position:absolute;}
#jd_dialog_m_h{float:left;width:100%;height:30px;cursor:move;}
#jd_dialog_m_h_l{float:left;color:black;font-weight:bold;padding-top:7px;padding-left:5px;}
#jd_dialog_m_h_r{float:right;color:black;padding-top:7px;padding-right:5px;cursor:pointer;}
#jd_dialog_m_b{float:left;}
#jd_dialog_m_b_1{position:absolute;alpha(opacity=0);-moz-opacity:0.0;opacity:0.0;z-index:;}
#jd_dialog_m_b_2{position:absolute;z-index:;}
#jd_dialog_m_t{float:left;width:100%;height:40px;padding-top:10px;text-align:center;}
.jd_dialog_m_t_s{padding-left:10px;}
default.html
<!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>Jquery Dialog 2.0 Demo</title>
<link type="text/css" rel="stylesheet" href="jquery_dialog.css" />
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="jquery_dialog.js"></script>
</head>
<body style="margin:0px;padding:0px;">
<form id="form1">
<table width="100%" border="0" cellspacing="0" cellpadding="0" bgcolor="#FFCCFF">
<tr>
<td height="30" align="center"><font style="font-size:16px;font-weight:bold;">JQuery Dialog 2.0.3 Demo</font></td>
</tr>
<tr>
<td height="30" align="center"><a href="http://wu-jian.cnblogs.com/" target="_blank">http://wu-jian.cnblogs.com/</a></td>
</tr>
<tr>
<td> </td>
</tr>
<tr>
<td>
<font style="color:blue;font-weight:bold;">[debug data]</font>
<font>dialog x:</font><font style="color:red;font-weight:bold;" id="_ocl_x"></font>
<font>dialog y:</font><font style="color:red;font-weight:bold;" id="_ocl_y"></font>
<font>moving flag:</font><font style="color:red;font-weight:bold;" id="_flag"></font>
<font>temp 1:</font><font style="color:red;font-weight:bold;" id="_temp1"></font>
<font>temp 2:</font><font style="color:red;font-weight:bold;" id="_temp2"></font>
</td>
</tr>
<tr>
<td> </td>
</tr>
<tr>
<td><table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="20%" height="60" align="center"><input type="button" name="s1" value="弹出1" onclick="JqueryDialog.Open('模态DIV1', 'inner1.html', 300, 1000);" /></td>
<td width="80%"> 弹出inner1.html,宽300PX,高300PX,提交后执行inner1中脚本,关闭Dialog</td>
</tr>
</table></td>
</tr>
<tr>
<td><table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="20%" height="60" align="center"><input type="button" name="s2" value="弹出2" onclick="JqueryDialog.Open('模态DIV2', 'inner2.html', 300, 300);" /></td>
<td width="80%"> 弹出inner2.html,宽300PX,高300PX,提交后执行inner2中脚本,不关闭Dialog</td>
</tr>
</table></td>
</tr>
<tr>
<td><table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="20%" height="60" align="center"><input type="button" name="s3" value="弹出3" onclick="JqueryDialog.Open('模态DIV3', 'inner3.html', 300, 300);" /></td>
<td width="80%"> 弹出inner3.html,宽300PX,高300PX,inner3.html向模拟服务端serverPost.html提交(POST),serverPost中逻辑处理,最后由serverPost回调JQuery Dialog</td>
</tr>
</table></td>
</tr>
<tr>
<td><table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="20%" height="60" align="center"><input type="button" name="s4" value="弹出4" onclick="JqueryDialog.Open('模态DIV4', 'inner4.html', 1600, 1600);" /></td>
<td width="80%"> 弹出inner4.html,宽1600PX,高1600PX,JQuery Dialog回调函数!</td>
</tr>
</table></td>
</tr>
<tr>
<td> </td>
</tr>
<tr>
<td> </td>
</tr>
<tr>
<td> </td>
</tr>
<tr>
<td> </td>
</tr>
<tr>
<td> </td>
</tr>
<tr>
<td> </td>
</tr>
<tr>
<td> </td>
</tr>
<tr>
<td> </td>
</tr>
<tr>
<td> </td>
</tr>
<tr>
<td> </td>
</tr>
<tr>
<td> </td>
</tr>
<tr>
<td> </td>
</tr>
<tr>
<td> </td>
</tr>
<tr>
<td> </td>
</tr>
<tr>
<td> </td>
</tr>
<tr>
<td> </td>
</tr>
</table>
</form>
</body>
</html>
jquery_dialog实现效果的更多相关文章
- 关于Mongodb的全面总结
MongoDB的内部构造<MongoDB The Definitive Guide> MongoDB的官方文档基本是how to do的介绍,而关于how it worked却少之又少,本 ...
- 纯CSS3实现的一些酷炫效果
之前在网上看到一些用纯CSS3实现的酷炫效果,以为实现起来比较困难,于是想看看具体是怎么实现的. 一.笑脸猫动画 实现效果如下: 这个实现起来确实比较麻烦,很多地方需要花时间,有耐心地调整. 1.先看 ...
- Android UI体验之全屏沉浸式透明状态栏效果
前言: Android 4.4之后谷歌提供了沉浸式全屏体验, 在沉浸式全屏模式下, 状态栏. 虚拟按键动态隐藏, 应用可以使用完整的屏幕空间, 按照 Google 的说法, 给用户一种 身临其境 的体 ...
- 哪种缓存效果高?开源一个简单的缓存组件j2cache
背景 现在的web系统已经越来越多的应用缓存技术,而且缓存技术确实是能实足的增强系统性能的.我在项目中也开始接触一些缓存的需求. 开始简单的就用jvm(java托管内存)来做缓存,这样对于单个应用服务 ...
- 简单入门canvas - 通过刮奖效果来学习
一 .前言 一直在做PC端的前端开发,从互联网到行业软件.最近发现移动端已经成为前端必备技能了,真是不能停止学习.HTML5新增的一些东西,canvas是用的比较多也比较复杂的一个,简单的入门了一下, ...
- CSS3 3D立方体效果-transform也不过如此
CSS3系列已经学习了一段时间了,第一篇文章写了一些css3的奇技淫巧,原文戳这里,还获得了较多网友的支持,在此谢过各位,你们的支持是我写文章最大的动力^_^. 那么这一篇文章呢,主要是通过一个3D立 ...
- WPF做12306验证码点击效果
一.效果 和12306是一样的,运行一张图上点击多个位置,横线以上和左边框还有有边框位置不允许点击,点击按钮输出坐标集合,也就是12306登陆的时候,需要向后台传递的参数. 二.实现思路 1.获取验证 ...
- app引导页(背景图片切换加各个页面动画效果)
前言:不知不觉中又加班到了10点半,整个启动页面做了一天多的时间,一共有三个页面,每个页面都有动画效果,动画效果调试起来麻烦,既要跟ios统一,又要匹配各种不同的手机,然后产品经理还有可能在中途改需求 ...
- PhotoView实现图片随手势的放大缩小的效果
项目需求:在listView的条目中如果有图片,点击条目,实现图片的放大,并且图片可以根据手势来控制图片放大缩小的比例.类似于微信朋友圈中查看好友发布的照片所实现的效果. 思路是这样的:当点击条目的时 ...
随机推荐
- Window下memcached安装与测试步骤
如何在Window下memcached安装与测试步骤 工具/原料 电脑 memcached 软件 方法/步骤 软件包下载 下载Memercached For Windows:http://downlo ...
- 在PostgreSQL中使用oracle_fdw访问Oracle
本文讲述如何在PostgreSQL中使用oracle_fdw访问Oracle上的数据. 1. 安装oracle_fdw 可以参照:oracle_fdw in github 编译安装oracle_fdw ...
- hdwiki中模板的使用说明
HDwiki所有模版文件都在根目录view下的default文件里,以admin_开头的是后台的模版文件,其它不是以admin_开头的,就是所有的前台文件.具体列表如下:首页模版文件: index. ...
- northwind数据库介绍
① Categories: 种类表相应字段:CategoryID :类型ID:CategoryName:类型名;Description:类型说明;Picture:产品样本 ② CustomerCust ...
- Cocos2dx中的opengl使用(一)简单介绍
引擎提供了CCGLProgram类来处理着色器相关操作,对当前绘图程序进行了封装,其中使用频率最高的应该是获取着色器程序的接口:const GLuint getProgram(); 该接口返回了当前着 ...
- 使用 Filter 完成一个简单的权限模型
****对访问进行权限控制: 有权限则可以访问, 否则提示: 没有对应的权限, 请 返回其访问者的权限可以在manager那进行设置:
- 移动端web出现的一系列问题
今天做移动端的web,在做后期处理的时候,发现了非常多的问题.下面我分别列举一下吧~~ 1.移动端浏览器众多,各种浏览器之间的显示等都有差异,很多需要单独处理,于是我需要判断分别是什么浏览器.js代码 ...
- 转载-python学习笔记之文件I/O
Python 文件I/O 本章只讲述所有基本的的I/O函数,更多函数请参考Python标准文档. 打印到屏幕 最简单的输出方法是用print语句,你可以给它传递零个或多个用逗号隔开的表达式.此函数把你 ...
- 从客户端中检测到有潜在危险的 Request.Form 值
今天在使用Kindeditor的时候,出现了如题的错误. 错误如图: 百度了下,艰难的找了原来是Framework的问题,原来用的2.0,后面变成了4.0,验证级别也更高了: 解决办法:在config ...
- JavaScript的学习
学习了一段时间了,oop 的JavaScript .但是理解了还不是很深入,所以,决定.通过写博客的方式来,加深JavaScript的程度.2016的目标: 第一阶段:oop的JavaScript 第 ...