`
TiFa.L.Hart
  • 浏览: 16709 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

jquery自定义插件 -- 弹出窗

 
阅读更多
<!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>
<script src="jquery-2.0.3.min.js" type="text/javascript"></script>

<script>

//Figure out what browser is being used (Fixed the issue jquery version after 1.9)
$.browser = {
mozilla : /firefox/.test(navigator.userAgent.toLowerCase()),
webkit : /webkit/.test(navigator.userAgent.toLowerCase()),
opera : /opera/.test(navigator.userAgent.toLowerCase()),
msie : /msie/.test(navigator.userAgent.toLowerCase()),
};
</script>


<script>
/**
 * 自定义插件:实现在浏览器中定位窗口的位置 这里根据用户传过来的参数进行设置窗口的位置(上下左右4个角落以及中间)
 *
 * @param height
 *            窗体高度,如400(建议不带单位,默认为px) 
 * @param width
 *            窗体宽度,如600(建议不带单位,默认为px)
 * @param title
 *            窗体顶端的标题
 * @param message
 *            窗体显示的内容
 * @param left
 *            表示窗口水平位置-->可选值:"center"、"left"、"right"、具体的数值,如:200
 * @param top
 *            表示窗口垂直位置-->可选值:"center"、"top"、"bottom"、具体的数值,如:300
 * @param type
 *            表示类型
 *            可选值:"default"、"rollup"。default--->表示默认的,没有动画。rollup--->表示在右下角滑上来(像QQ消息提示框一样)
 *
 */
$.fn.popUpWin = function(args) {
	var currentWin = this; // 将当前对象设置成currentWin,以方便使用
	var windowObj = $(window); // 转化window为JQuery对象

	var winWidth = 600; //windos's width
	var winWidthUnit = '600px'; //width with unit
	var winHeight = 400; //windows's height
	var winHeightUnit = '400px'; //width with unit
	var browserWidth = windowObj.width(); // 浏览器的宽
	var browserHeight = windowObj.height(); // 浏览器的高
	var scrollLeft = windowObj.scrollLeft(); // 获取滚动条的左边距(滚动条里最左端的差距)
	var scrollTop = windowObj.scrollTop(); // 获取滚动条的上边距
	var winLeft; // 窗口的左边距
	var winTop; // 窗口的上边距
	
	var positionLeft;
	var positionTop;
	var title = 'Message Dialog';
	var message = 'No message show up!';
	var type; //窗口类型
	
	//check if it is a number
	function isNumber(tester){
		var re = /\D+/;
		return !re.test(tester);
	}
	//get number from strig such as 600px will return 600
	function getNumber(str) {
		var re = /^\d+/;
		return str.match(re);
	}
	
	function getUnion(str) {
		var re = /\D+/;
		return str.match(re);
	}
	
	
	// init params
	if (args && args instanceof Object) {
		
		if(args.height && args.height!=''){
			if(isNumber(args.height)){
				winWidth = args.height;
				winWidthUnit = args.height + 'px';
			} else {
				winWidth = getNumber(args.height);
				winWidthUnit = args.height;
			}
		}
		
		if(args.width && args.width!=''){
			if(isNumber(args.width)){
				winWidth = args.width;
				winWidthUnit = args.width + 'px';
			} else {
				winWidth = getNumber(args.width);
				winWidthUnit = args.width;
			}
		}
		
		if(args.title && args.title!='') {
			title = args.title;
		}
		if(args.message && args.message!=''){
			message = args.message;
		}
		
		if(args.type && args.type!='') {
			type = args.type;
		}
		
		if(args.left && args.left!='') {
			positionLeft = args.left;
		}
		
		if(args.left && args.top!='') {
			positionTop = args.top;
		}
	}
	
	
	/*
	* init component
	*/
	function initComponent(){
		
		var appendStr = "<div class='pop_up_title'><span class='pop_up_cls'><input type='button' value='Close'/></span><span class='pop_up_txt'>" 
		+ title
		+ "</span></div><hr color='#0099FF'/><div class='pop_up_content'><span class='pop_up_content_txt' style='" 
		+ (winHeight-50)
		+ getUnion(winHeightUnit) + ";'>"
		+ message
		+ "</span></div>";

		currentWin.addClass("pop_up_window");
		
		currentWin.css( {
				"width" : winWidthUnit,
				"height" : winHeightUnit
		});
			
		currentWin.append(appendStr);

	}
	// init component
	initComponent();

	// 处理水平位置的参数
	function calLeft(positionLeft, scrollLeft, browserWidth, winWidth) {
		if (positionLeft && typeof positionLeft == "string") { // 判断参数为字符串
			if (positionLeft == "center") { // left参数为center,则水平居中
				winLeft = (browserWidth - winWidth) / 2 + scrollLeft;
			} else if (positionLeft == "left") { // left参数为left,则水平居左
				winLeft = scrollLeft;
			} else if (positionLeft == "right") { // left参数为right,则水平居右
				winLeft = scrollLeft + browserWidth - winWidth;
			} else { // 用户输入了其他字符串,则改为默认居中
				winLeft = (browserWidth - winWidth) / 2 + scrollLeft - 30;
			}
		} else if (positionLeft && typeof positionLeft == "number") { // 判断参数为数值,则根据数值直接设置
			winLeft = positionLeft;
		} else {  //其他情况,默认居中。如:没有输入该参数或非法字符
			winLeft = (browserWidth - winWidth) / 2 + scrollLeft;
			positionLeft = "cneter";
		}
	}

	// 处理垂直位置的参数
	function calTop(positionTop, scrollTop, browserHeight, winHeight) {
		if (positionTop && typeof positionTop == "string") {
			if (positionTop == "top") {
				winTop = scrollTop;
			} else if (positionTop == "center") {
				winTop = (browserHeight - winHeight) / 2 + scrollTop;
			} else if (positionTop == "bottom") {
				winTop = scrollTop + browserHeight - winHeight;
			} else {
				winTop = (browserHeight - winHeight) / 2 + scrollTop;
			}
		} else if (positionTop && typeof positionTop == "number") { // 判断参数为数值,则根据数值直接设置
			winTop = positionTop;
		} else {
			winTop = (browserHeight - winHeight) / 2 + scrollTop;
			positionTop = "center";
		}
	}
	
	// *******这里很重要,将传过来的参数缓存在data.positionLeft中,这样做是为了在后面滚动条滚动或浏览器大小改变时使用,这里有点像java中的hashMap
	currentWin.data("positionLeft", positionLeft); // 缓存数据
	currentWin.data("positionTop", positionTop); // 缓存数据

	// 移动窗口,此方法仅供滚动条滚动以及窗口大小时使用,不适合初始化(就是在加载页面时,调用了该插件)时使用,因为一开始不存在currentWin.data("positionLeft")和currentWin.data("positionTop")的值
	function moveWin() {
		// 重新获取一些值并调用响应的内部函数进行设置
		var browserWidth = windowObj.width(); // 浏览器的宽
		var browserHeight = windowObj.height(); // 浏览器的高
		var scrollLeft = windowObj.scrollLeft(); // 获取滚动条的左边距(滚动条里最左端的差距)
		var scrollTop = windowObj.scrollTop(); // 获取滚动条的上边距

		// 调用方法重新计算左边距和上边距
		calLeft(currentWin.data("positionLeft"), scrollLeft, browserWidth,
				winWidth);
		calTop(currentWin.data("positionTop"), scrollTop, browserHeight,
				winHeight);

		// 设置窗口位置
		currentWin.animate( {
			"left" : winLeft,
			"top" : winTop
		}, 200); // 注意:currentWin在css定义中一定要注明position:absolute;
	}
	
	
	//窗口类型
	if(type && type == "rollup"){  //这里实现像QQ消息框效果,在右下角滑上来,并慢慢淡出
			//如果窗口可见,将其设置成隐藏
			if(currentWin.is(":visible")){
				currentWin.hide();
			}
			calLeft(positionLeft, scrollLeft, browserWidth, winWidth);
			calTop(positionTop, scrollTop, browserHeight, winHeight);
			var left = winLeft;
			if($.browser.mozilla){  //修正firefox左边距
				left =  winLeft-10;
			}
			currentWin.css( {
				"left" : left,
				"top" : winTop + winHeight
			});
			
			currentWin.show(500).animate( {
				"top" : winTop
			}, 500)
			var fadeOutTimeOut;
			clearTimeout(fadeOutTimeOut); // 先清除所有延时,以免重复叠加
			fadeOutTimeOut = setTimeout(function() {
				currentWin.fadeOut(25000).dequeue();//15秒淡出   《dequeue():去除动画队列中第一个动画,但该动画仍会继续执行,这样能保证后面的动画不需要等到第一个动画执行完才执行,这样可以防止在滚动条滚动时能在淡出的同时也能移动位置》
			}, 3000); // 3秒后开始淡出
			
			//鼠标悬停在窗口上,取消隐藏
			currentWin.mouseover(function(){
				if(!currentWin.is(":visible")){ //若窗口本身为不可见时不执行后面两句语句
					return;
				}
				currentWin.stop(true,true);
				currentWin.fadeIn(0);
			});
			
			//鼠标移开,3秒后再次隐藏
			currentWin.mouseout(function(){
				if(!currentWin.is(":visible")){
					return;
				}
				clearTimeout(fadeOutTimeOut); // 先清除所有延时,以免重复叠加
				fadeOutTimeOut = setTimeout(function() {
					currentWin.fadeOut(25000).dequeue();
				}, 3000);
			});
			
			
			
			
			
		} else {  //普通情况
			calLeft(positionLeft, scrollLeft, browserWidth, winWidth);
			calTop(positionTop, scrollTop, browserHeight, winHeight);
			
			currentWin.css( {
				"left" : winLeft,
				"top" : winTop
			});
			
			currentWin.show("slow"); //显示窗口
		}



	// 为当前窗口注册滚动条滚动事件,在滚动条滚动时能够动态改变窗口的位置
	windowObj.scroll(function() {
		if (!currentWin.is(":visible")) {
			return;
		}
		var scrollTimeOut; // 延时处理,由于拉动滚动条时不断改变窗口位置会导致浏览器会一闪一闪,所以通过延时修改
		clearTimeout(scrollTimeOut); // 先清除所有延时,以免重复叠加
		scrollTimeOut = setTimeout(function() {
			moveWin();
		}, 300); // 延时300毫秒
		});

	// 为当前窗口注册浏览器大小改变事件
	windowObj.resize(function() {
		if (!currentWin.is(":visible")) { // 判断若当前窗口为不可见则不进行该事件的处理
				return;
			}
			moveWin();
		});


	// 注册关闭窗口事件
	$(currentWin).find("span[class='pop_up_cls']").click(function() {
		$(currentWin).fadeOut(0);
	});
	
	return currentWin;
}
</script>


<script>
function load(){
	$("#test").popUpWin({
		title: "testing",
		message: "testing message!",
		width:'600px',
		height: '400px',
		left:'center',
		top:'center'
	});
}
</script>




<style>
/*整个窗体的样式*/
.pop_up_window{
	/*background-color:#D0DEF0;*/
	/*width:600px;
	height:400px;*/
	border:5px solid #B3D9FF;
	margin:0px;
	display:none;
	position: absolute;
	z-index:999;
}

/*窗体内容区的样式*/
.pop_up_content{
	background-color:#FFF;
	width:100%;
	height:350px;

/*	position:relative;*/
}

/*窗体标题栏的样式*/
.pop_up_title{
	marging:0;
	padding:0;
	border:0;
	width:100%;
	height:25px;
	background:#FFF;
	font-size:14px;
	font-weight:bold;

}
/*窗体标题右侧图片的样式*/
.pop_up_title .pop_up_cls{
	padding:0;
	margin-top:3px;
	width:65px;
	height:25px;
	overflow:hidden;
	display:block;  /*一定要设置成block不然不会显示*/
	float:right;

}
/*窗体标题文字的样式*/
.pop_up_title .pop_up_txt{
	display:block;
	height:25px;
	line-height:25px;
	margin-left:5px;
}

/*内容区文本(主体文本)*/
.pop_up_content_txt{
	marging:0;
	padding:0 5px;
	display:block;
	/*height:350px;*/
	background:#CBE7FC;
	overflow:auto; /*这里设置的auto是为了当要显示的内容过多时,会自动出现滚动条*/

}


</style>
</head>

<body onload="load()">

<div id="test">

</div>
 
</body>
</html>
分享到:
评论

相关推荐

    jquery插件库-jquery弹出层 三种弹出效果.zip

    本资源"jquery插件库-jquery弹出层 三种弹出效果.zip"聚焦于jQuery的一个特定应用:弹出层效果。下面我们将详细探讨jQuery弹出层的原理、实现方式以及三种不同的弹出效果。 1. jQuery弹出层基础 jQuery弹出层,通常...

    17、Jquery支持自定义弹出窗口插件

    通过以上步骤,我们可以创建一个功能齐全、易于扩展的jQuery自定义弹出窗口插件。这不仅提高了代码的复用性,也使得开发者能够根据项目需求轻松定制弹出窗口的行为和样式。在实际开发中,结合CSS和可能存在的其他...

    基于jQuery的图片点击弹窗预览大图插件,jquery.fancybox-1.3.4

    jQuery Fancybox是一个轻量级的插件,其主要功能是创建一个美观的、具有多种自定义选项的弹出窗口,用于展示图片、HTML内容甚至是YouTube视频。Fancybox 1.3.4是该插件的一个经典版本,虽然现在已经有更新的版本,但...

    jQuery学习记录----弹出窗口(四)

    综上所述,jQuery提供了多种弹出窗口的实现方式,包括使用jQuery UI Dialog、自定义HTML/CSS/JavaScript以及使用插件。开发者可以根据项目需求选择合适的方法来创建弹出窗口,提升用户体验。通过不断学习和实践,您...

    jquery-ui-1.8.6 js库

    1. **对话框(Dialog)**:Dialog 组件允许将任何 HTML 元素转化为弹出式窗口,常用于提示、确认或展示详细信息。1.8.6 版本中的 Dialog 支持多种配置选项,如自动关闭、拖动、大小调整等。 2. **日历(Datepicker...

    jquery-ui-1.8.18.custom,jquery-ui-1.8.18.custom.min,jquery-1.7.1.min

    3. **对话框 (Dialog)**:提供模态和非模态的弹出窗口,用于显示信息、确认操作或进行更复杂的交互。 4. **日期选择器 (Datepicker)**:为输入字段添加日期选择功能,支持多种格式和选项。 5. **滑块 (Slider)**:...

    jquery插件库-jquery导航,缓慢弹出下拉效果.zip

    "jquery插件库-jquery导航,缓慢弹出下拉效果.zip"这个压缩包文件显然包含了一个专门针对导航菜单的jQuery插件,该插件实现了优雅的、缓慢弹出的下拉效果。 jQuery插件是扩展jQuery功能的小型代码模块,它们通常由...

    jquery自定义滚动条插件

    **jQuery自定义滚动条插件**是一种用于增强网页滚动体验的工具,尤其在现代Web设计中,为了提供更美观和个性化的界面,自定义滚动条变得越来越重要。本插件适用于IE8及以上的浏览器,允许开发者对滚动条的外观和行为...

    jQuery-plugin-layer弹出层插件

    与同类弹出层组件相比,layer的优势明显,她尽可能地在以更少的代码展现出更强健的功能。layer格外注重性能的提升,采用面向对象的思想实现,在多层模式的回调处理中,具备其它多数层组件所没有的“独立不冲突”(已...

    jquery.jqGrid-4.3.0+jquery-ui-1.8.16.custom所有包

    例如,jqGrid的搜索功能可以利用jQuery UI的对话框组件,以弹出窗口的形式展示搜索条件。此外,使用jQuery UI的拖放功能,可以实现列的动态调整,让用户自由定制显示的列。 压缩包中的“jquery-1.7.1.min.js”是...

    jquery grid插件 -- 编辑表格

    **jQuery Grid 插件详解——打造可编辑表格** 在网页开发中,展示和管理大量数据时,表格(Table)是一个常见的元素。jQuery Grid 插件为网页开发者提供了一个强大而灵活的工具,用于创建功能丰富的表格,特别是...

    jquery-ui-dialog-demo

    `jquery-ui-dialog-demo` 是一个基于 jQuery UI 库的弹出窗口插件示例,它提供了丰富的交互式对话框功能,包括模拟原生 JavaScript 的 `alert` 和 `confirm` 对话框以及自定义的打开(open)模式。这个插件使得在...

    Javascripters大作--jQuery弹出层插件

    2. **样式管理**:弹出层的外观和布局可以通过CSS进行定制,插件通常会提供一些预设样式或允许自定义CSS类。 3. **事件处理**:插件会监听用户与弹出层的交互,例如关闭按钮的点击事件,以及可能的拖动或缩放行为。...

    jquery-ui-1.7.1.zip

    Dialog 是一个弹出式窗口,可以用于显示警告、确认信息,或者创建模态对话框,让用户输入数据或进行其他操作。在 jQuery UI 1.7.1 中,Dialog 提供了丰富的定制选项,如可调整大小、可拖动、可设置关闭按钮等,使得...

    jquery-Modal-Plug(jQuery模态框插件)

    模态框在网页设计中被广泛应用,用于显示弹出式窗口,如警告、确认对话框或者展示详细信息,而不会离开当前页面。jQuery-Modal-Plug插件使得在网页上实现这种功能变得更为简单。 **模态框(Modal Box)**是用户界面...

    jquery-ui-1.10.3.custom

    例如,如果你的项目只需要使用弹出对话框(Dialog)和日期选择器(Datepicker),则可以仅包含这两个组件,去除其他不必要的代码,降低页面的体积。同时,jQuery UI 还提供了多种预设主题,如 "smoothness"、...

    jquery插件大全--打包下载

    jQuery插件是jQuery库的扩展,它们为开发者提供了现成的功能模块,覆盖了诸如表单验证、图片轮播、菜单导航、日期时间选择器、滑块、弹出窗口、滚动效果等众多领域。这些插件通常由社区开发并维护,它们遵循jQuery的...

    20种弹出层,弹窗 jQuery+CSS3 多功能弹出层插件v2.0.1

    《jQuery+CSS3多功能弹出层插件v2.0.1详解》 在Web开发中,弹出层(也称为对话框或模态窗口)是不可或缺的元素,它们用于显示重要的信息、提示用户确认操作或者提供交互式内容。本文将深入探讨一款名为“20种弹出层...

    jquery-ui-1.8.18.custom.rar

    例如,Datepicker 组件可以方便地添加日期选择功能,而 Dialog 可以创建模态或非模态窗口,提供弹出信息或确认操作。 在1.8.18.custom 版本中,"custom" 关键字意味着这是一个根据特定需求定制的版本,可能包含了...

Global site tag (gtag.js) - Google Analytics