Jquery 弹出层插件实现代码


Posted in Javascript onOctober 24, 2009

直接看代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Layer.aspx.cs" Inherits="Layer" %> <!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 runat="server"> 
<title></title> 
<script src="jquery-1.3.2.js" type="text/javascript"></script> 
<script src="jquery.layer.js" type="text/javascript"></script> 
<script type="text/javascript"> 
$(document).ready(function() { 
$("#button").click(function() { 
var layer = $('none').layer({ content: '这里是层内容,默认焦点可以用none对象来代替' }); 
layer.open(); 
}); 
}); 
</script> 
</head> 
<body> 
<form id="form1" runat="server"> 
<input id="button" type="button" value="第一个层" /> 
<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /> 
<input type="button" onclick="$(this).layer({ content: $('#content') }).open();" value="第二个层" /> 
<div id="content" style="display:none;"> 
我是Dom对象内的内容 
<input id="aaa" type="text" value="我是表单" /> 
</div> 
</form> 
</body> 
</html>

/* 
* 作者:彭白洋 2009.10.24
* 功能:可弹出自定义字符串、Dom对象,根据事件焦点弹出、关闭动画
* 调用方法:
* 1、初始化直接打开:$("#buttonID").layer().open();
* 2、初始化:var layer=$("#buttonID").layer();打开:layer.open();关闭:layer.close();
* 3、初始化:var layer=$("#buttonID").layer({自定义配置});打开:layer.open();关闭:layer.close();
*样式: 
* .layer-box{background-color:#fff;width: 692px;border: 1px solid #ccc;position:absolute;} 
* .layer-box div.layer-bar{background: #f4f4f4;padding: 5px;margin:0px;text-align:left;height:18px;position:relative;} 
* .layer-box div.layer-bar span.layer-close{position:absolute;width:18px;height:18px;top:0px;right:0px;cursor:pointer;} 
* .layer-box div.layer-content{margin:0px;padding:5px 0px 0px 0px;text-align:center;}
*/ 
/// <reference path="jquery-1.3.2-vsdoc.js" /> 
(function($) { 
$.layer = function(element, options) { 
var base = this; 
base.$el = $(element); 
base.tagHide = true; 
//初始化层 
base.init = function() { base.options = $.extend({}, $.layer.defaults, options); 
base.$layerBox = $(base.options.template); 
base.posX = base.posY = 0; 
base.moveing = false; 
//加载样式 
if (!$.layer.hasCss && base.options.cssurl != "") { 
$("head", base.options.target).append("<link href=\"" + base.options.cssurl + "\" rel=\"stylesheet\" type=\"text/css\" />"); 
$.layer.hasCss = true; 
} 
//加载层对象 
$.layer.maskLayerIndex += 20; //调高层位置 
base.$layerBox.appendTo("body", base.options.target).css({ "z-index": $.layer.maskLayerIndex }).hide(); 
base.$layerBox.find("div[class='layer-title']").append(base.options.title); 
//判断内容是字符串还是Jquery对象 
if (typeof (base.options.content) == "object") { 
base.$tempContentParent = base.options.content.parent(); 
base.tagHide = base.options.content.is(":hidden"); 
base.$tempContent = base.options.content.clone(); 
base.options.content.appendTo(base.$layerBox.find("div[class='layer-content']")).show(); 
} 
else { 
base.$layerBox.find("div[class='layer-content']").append(base.options.content); 
} 
//绑定关闭按钮事件 
base.$layerBox.find("span[class='layer-close']").mousedown(function(event) { 
//阻止事件冒泡 
if (event && event.stopPropagation) { 
event.stopPropagation(); 
} else { 
window.event.cancelBubble = true; 
} 
base.close(); 
return false; 
}); 
base.$layerBox.find("div[class='layer-bar']").mousedown(function(event) { 
base.moveStart(event); 
}); 
//base.$layerBox.show(); 

} 
//打开层 
base.open = function() { 
//层显示动画 
//alert($("html", base.options.target).height()); 
var mtop = ($("html", base.options.target).height() - base.options.height) / 2 + $(document, base.options.target).scrollTop(); // 
var mleft = $("html", base.options.target).width() / 2 - base.options.width / 2; // 
base.$layerBox.css({ top: base.$el.offset().top, left: base.$el.offset().left, width: 0, height: 0 }).animate({ 
left: mleft, 
top: mtop, 
width: base.options.width, 
height: base.options.height, 
opacity: "show" 
}, "slow", function() { 
//加载遮罩层 
if (base.options.masklayer.show) { 
$.layer.maskLayerIndex -= 10; //降低层位置 
base.$masklayer = $("<div style=\"display:none; z-index:" + $.layer.maskLayerIndex + "; filter: alpha(opacity:" + base.options.masklayer.alpha + "); left: 0px; width: 100%; position: absolute; top: 0px; height: " + $(document, base.options.target).height() + "px; background-color:" + base.options.masklayer.bgcolor + "\"></div>"); 
base.$masklayer.appendTo("body", base.options.target).animate({ 
opacity: 'toggle' 
}, 500); 
} 
}); 
} 
//开始移动 
base.moveStart = function(event) { 
base.moveing = true; 
base.bgColor = base.$layerBox.css("background-color"); 
base.$layerBox.css("background-color", "Transparent").children().hide(); 
base.posX = event.pageX - base.$layerBox.offset().left; 
base.posY = event.pageY - base.$layerBox.offset().top; ; 
$(document).mousemove(function(event) { 
base.moveOn(event); 
}).mouseup(function() { 
base.moveStop(); 
}); 
if ($.browser.msie) { 
base.$layerBox.get(0).setCapture(); 
} else { 
document.addEventListener("mousemove", base.moveOn, true); 
} 
} 
//移动中 
base.moveOn = function(event) { 
if (base.moveing) { 
window.getSelection && window.getSelection().removeAllRanges(); 
base.$layerBox.css({ top: Math.max(event.pageY - base.posY, 0), left: Math.max(event.pageX - base.posX, 0) }); 
return false; 
} 
} 
//移动停止 
base.moveStop = function() { 
base.$layerBox.css("background-color", base.bgColor).children().show(); 
base.moveing = false; 
$(document, base.options.target).unbind("mousemove"); 
if ($.browser.msie) { 
base.$layerBox.get(0).releaseCapture(); 
} else { 
document.removeEventListener("mousemove", base.moveOn, true); 
} 
} 
//关闭层 
base.close = function() { 
if (base.$tempContent) { 
base.$tempContent.appendTo(base.$tempContentParent); 
if(base.tagHide){ 
base.$tempContent.hide(); 
} 
} 
if (base.options.masklayer.show) { 
base.$masklayer.animate({ 
opacity: 'toggle' 
}, 500, function() { 
$(this).remove(); 
base.$layerBox.animate({ 
left: base.$el.offset().left, 
top: base.$el.offset().top, 
width: 0, 
height: 0, 
opacity: "hide" 
}, "hide", function() { 
$(this).remove(); 
}); 
}); 
} 
else { 
base.$layerBox.animate({ 
left: base.$el.offset().left, 
top: base.$el.offset().top, 
width: 0, 
height: 0, 
opacity: "hide" 
}, "hide", function() { 
$(this).remove(); 
}); 
} 
} 
base.init(); 
} 
$.layer.hasCss = false; 
$.layer.maskLayerIndex = 1000; 
//默认配置 
$.layer.defaults = { 
masklayer: { show: true, bgcolor: '#eee', alpha: 50 }, //是否显示覆盖层 
target: window.self.document, 
cssurl: "layer.css", 
title: "层标题", 
content: "层内容", 
width: 500, 
height: 300, 
template: "<div class=\"layer-box\"><div class=\"layer-bar\"><div class=\"layer-title\"></div><span class=\"layer-close\">×</span></div><div class=\"layer-content\"></div></div>" 
} 
$.fn.layer = function(options) { 
return new $.layer(this, options); 
} 
})(jQuery);

插件下载地址:jquery.layer.js
Javascript 相关文章推荐
javascript+dom树型菜单类,希望朋友们一起进步
May 03 Javascript
javascript 动态添加事件代码
Nov 30 Javascript
Flex通过JS获取客户端IP和计算机名的实例代码
Nov 21 Javascript
JS,Jquery获取select,dropdownlist,checkbox下拉列表框的值(示例代码)
Jan 11 Javascript
js面向对象编程之如何实现方法重载
Jul 02 Javascript
深入理解事件冒泡(Bubble)和事件捕捉(capture)
May 28 Javascript
vue2 如何实现div contenteditable=“true”(类似于v-model)的效果
Feb 08 Javascript
JS操作xml对象转换为Json对象示例
Mar 25 Javascript
详解原生JS动态添加和删除类
Mar 26 Javascript
详解微信小程序工程化探索之webpack实战
Apr 20 Javascript
JS制作简易计算器的实例代码
Jul 04 Javascript
JavaScript中的Proxy对象
Nov 27 Javascript
js 操作符实例代码
Oct 24 #Javascript
利用JQuery+EasyDrag 实现弹出可拖动的Div,同时向Div传值,然后返回Div选中的值
Oct 24 #Javascript
JS window.opener返回父页面的应用
Oct 24 #Javascript
JavaScript 动态添加表格行 使用模板、标记
Oct 24 #Javascript
javascript Keycode对照表
Oct 24 #Javascript
LazyForm jQuery plugin 定制您的CheckBox Radio和Select
Oct 24 #Javascript
写入cookie的JavaScript代码库 cookieLibrary.js
Oct 24 #Javascript
You might like
PHP生成自定义长度随机字符串的函数分享
2014/05/04 PHP
PHP return语句另类用法不止是在函数中
2014/09/17 PHP
php限制上传文件类型并保存上传文件的方法
2015/03/13 PHP
php实现的验证码文件类实例
2015/06/18 PHP
JavaScript与C# Windows应用程序交互方法
2007/06/29 Javascript
Jquery中获取iframe的代码
2011/01/11 Javascript
禁止你的左键复制实用技巧
2013/01/04 Javascript
jquery得到font-size属性值实现代码
2013/09/30 Javascript
玩转方法:call和apply
2014/05/08 Javascript
解释&amp;&amp;和||在javascript中的另类用法
2014/07/28 Javascript
javascript搜索框点击文字消失失焦时文本出现
2014/09/18 Javascript
JavaScript中的立即执行函数表达式介绍
2015/03/15 Javascript
JS+CSS实现精美的二级导航效果代码
2015/09/17 Javascript
通过Tabs方法基于easyUI+bootstrap制作工作站
2016/03/28 Javascript
JS代码防止SQL注入的方法(超简单)
2016/04/12 Javascript
js实现可输入可选择的select下拉框
2016/12/21 Javascript
Jquery鼠标放上去显示全名的实现方法
2017/02/06 Javascript
基于vue1和vue2获取dom元素的方法
2018/03/17 Javascript
react中使用swiper的具体方法
2018/05/15 Javascript
JavaScript设计模式之建造者模式实例教程
2018/07/02 Javascript
Vue中的验证登录状态的实现方法
2019/03/09 Javascript
20道JS原理题助你面试一臂之力(必看)
2019/07/22 Javascript
微信内置浏览器图片查看器的代码实例
2019/10/08 Javascript
微信小程序实现多选框全选与反全选及购物车中删除选中的商品功能
2019/12/17 Javascript
详解ES6新增字符串扩张方法includes()、startsWith()、endsWith()
2020/05/12 Javascript
Python实现并行抓取整站40万条房价数据(可更换抓取城市)
2016/12/14 Python
Python简单的制作图片验证码实例
2017/05/31 Python
python try except 捕获所有异常的实例
2018/10/18 Python
Django添加KindEditor富文本编辑器的使用
2018/10/24 Python
Python 用matplotlib画以时间日期为x轴的图像
2019/08/06 Python
Python OrderedDict的使用案例解析
2019/10/25 Python
Python读取实时数据流示例
2019/12/02 Python
次世代生活态度:Hypebeast
2018/07/05 全球购物
美国现代家具购物网站:LexMod
2019/01/09 全球购物
教师自我鉴定范文
2013/11/10 职场文书
SQL Server中交叉联接的用法详解
2021/04/22 SQL Server