`
Dev|il
  • 浏览: 125216 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

基于jquery做的一个弹窗效果

 
阅读更多
        初学javascript,就想动手重写下alter和confirm,自带的真的太丑了,刚看了javascript oo写法,就想着模仿一下,直接上代码
//消息对话框
var MessageBox = (function () {
    var 
	Msg = {
	    baseUrl: "",
	    //初始化函数
	    init: function () {
	        this.omask = null;
	        this.messageBox = null;
	        this.callback = null;
			this.frame = null;
	        this.clientWidth = $(window).width();
	        this.clientHeight = $(window).height();
	        this.offsetWidth = $(document).width();
	        this.offsetHeight = $(document).height();
			if($.browser.msie){ //判断ie
			    this.offsetWidth -= 4;
				this.offsetHeight -= 4;
			}
			$("body").append("<div class=\"messageObody\"></div>");
	        this.obody = $(".messageObody");
			this.obody.width(this.offsetWidth);
			this.obody.height(this.offsetHeight);
	    },
	    //创建对话框
	    createMessageBox: function (title, msg, btn, icon) {
	        if (!title) title = "消息";
	        if (!msg) msg = "";
	        var messageBoxDiv = "<div class=\"messageBox\">";
	        messageBoxDiv += "<div class=\"messageBox-top \">";
	        messageBoxDiv += "<div class=\"messageBox-top-title messageBox-bg\">" + title + "</div>"
	        messageBoxDiv += "<div class=\"messageBox-top-close messageBox-bg\" onclick=\"MessageBox.cancle();\"><img src=\"" + this.baseUrl + "img/cancel.png\" /></div>";
	        messageBoxDiv += "</div>";
	        messageBoxDiv += "<div class=\"messageBox-content\">";
	        messageBoxDiv += "<div class=\"messageBox-context-img\">";
	        if (icon) {
	            messageBoxDiv += "<img src=\"" + icon + "\"/>";
	        }
	        messageBoxDiv += "</div>";
	        messageBoxDiv += "<div class=\"messageBox-context-msg\">" + msg + "</div>";
	        messageBoxDiv += "</div>"
	        messageBoxDiv += "<div class=\"messageBox-button\">";
	        messageBoxDiv += "[list]";
	        if (btn == "YESORNO") {
	            messageBoxDiv += "[*]<a href=\"javascript:MessageBox.cancle();\" class=\"button messageBox-bg\"><img src=\"" + this.baseUrl + "img/cancel.png\" />取消</a>
"
	        }
	        messageBoxDiv += "[*]<a href=\"javascript:MessageBox.deter();\" class=\"button messageBox-bg\"><img src=\"" + this.baseUrl + "img/ok.png\" />确定</a>
"
	        messageBoxDiv += "[/list]";
	        messageBoxDiv += "</div>";
	        this.obody.append(messageBoxDiv);
	        this.messageBox = $(".messageBox");
			this.frame = $(".messageBox-top-title");
			this.messageBox.css("left", Math.ceil((this.clientWidth - this.messageBox.width()) / 2) + "px");
			this.messageBox.css("top", Math.ceil((this.clientHeight - this.messageBox.height()) / 2) + "px");
			//鼠标按下事件
			this.frame.bind("mousedown", function(){
	             var point = { x: event.clientX, y: event.clientY };
				 if (Msg.frame.setCapture) { //防止ie下拖动过快丢失对象
					Msg.frame.setCapture();
				 } else if (window.captureEvents) {
					window.captureEvents(event.MOUSEMOVE | event.MOUSEUP);
				 }
				 $(document).bind("mousemove", function(){
					var 
					left = Msg.messageBox.css("left"),
				    top = Msg.messageBox.css("top"),
					width = $(document).width(),
					height = $(document).height();
					left = left.substring(0, left.length - 2);
					top = top.substring(0, top.length - 2);
					left = event.clientX - point.x + parseInt(left);
					top = event.clientY - point.y + parseInt(top);
					//超出窗口边界
					if(left < 0) left = 0;
					else if(left + Msg.messageBox.width() > width)left = width - Msg.messageBox.width() - 1;
					if(top < 0) top = 0;
					else if(top + Msg.messageBox.height() > height) top = height - Msg.messageBox.height() - 1;
					Msg.messageBox.css("left",  left + "px");
					Msg.messageBox.css("top",  top + "px");
					point = { x: event.clientX, y: event.clientY }; 
					window.getSelection ? window.getSelection().removeAllRanges() : document.selection.empty(); //取消选择文本,好像没什么用
				});
				return false; //返回flase就可以使chorme下 鼠标:move样式丢失
			});
			//鼠标弹出
			$(document).bind("mouseup", function(){
			     if (Msg.frame.releaseCapture) {
					Msg.frame.releaseCapture();
				} else if (window.captureEvents) {
					window.captureEvents(event.MOUSEMOVE | event.MOUSEUP);
				}
				$(document).unbind("mousemove");
			});
			//绑定窗口大小改变事件
			$(window).bind("resize", function(){
			     //没跟新函数里面的值
				 var 
				 width = $(document).width(),
				 height = $(window).height();
				 Msg.omask.width(width);
				 Msg.omask.height($(document).height());
				 Msg.messageBox.css("left", Math.ceil((width - Msg.messageBox.width()) / 2) + "px");
				 Msg.messageBox.css("top", Math.ceil((height - Msg.messageBox.height()) / 2) + "px");
			 });
	    },
	    //带确认按钮的对话框
	    //title: 标题
	    //msg: 正文消息
	    //callback: 关闭文本框后的回调函数
	    //isModel: 是否有遮罩层 true非模态
	    alert: function (title, msg, callback, icon, isModel) {
	        if (!isModel) {
	            this.mask(); //弹出遮罩
	        }
	        this.createMessageBox(title, msg, "YES", icon);
	        this.callback = callback;
	    },
	    //带是和否的对话框
	    confirm: function (title, msg, callback, icon, isModel) {
	        if (!isModel) {
	            this.mask();
	        }
	        this.createMessageBox(title, msg, "YESORNO", icon);
	        this.callback = callback;
	    },
	    //隐藏对话框
	    hide: function () {
	        if (this.mask) {
	            this.omask.hide();
	        }
	        this.messageBox.hide();
	    },
	    //显示隐藏对话框
	    show: function () {
	        if (this.omask) {
	            this.omask.show();
	        }
	        this.messageBox.show();
	    },
	    //销毁对话框
	    destory: function (callback) {
			$(window).unbind("resize"); //取消窗口大小改变事件
			this.obody.remove();
			/*this.messageBox.unbind();
	        if (this.omask) {
	            this.omask.remove();
	        }
			this.messageBox.remove();*/
	    },
	    deter: function () {
	        this.destory();
	        if (this.callback) {
	            this.callback(true);
	        }
	    },
	    cancle: function () {
	        this.destory();
	        if (this.callback) {
	            this.callback(false);
	        }
	    },
	    //遮罩
	    mask: function () {
	        var maskDiv = "<div class=\"maskDiv\"></div>";
	        this.obody.append(maskDiv);
	        this.omask = $(".maskDiv");
			this.omask.width(this.offsetWidth);
			this.omask.height(this.offsetHeight);
	    }
	};
    return {
        //错误图标
        ERROR: Msg.baseUrl + "img/icon-error.gif",

        //信息图标
        INFO: Msg.baseUrl + "img/icon-info.gif",
        //疑问图标
        QUESTION: Msg.baseUrl + "img/icon-question.gif",

        //提醒图标
        WARNING: Msg.baseUrl + "img/icon-warning.gif",

        alert: function (title, msg, callback, icon, isModel) {
            Msg.init();
            Msg.alert(title, msg, callback, icon);
        },
        confirm: function (title, msg, callback, icon, isModel) {
            Msg.init();
            Msg.confirm(title, msg, callback, icon, isModel);
        },
        deter: function () {
            Msg.deter();
        },
        //取消按钮
        cancle: function () {
            Msg.cancle();
        }
    }
})();


用法:
<!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=gb2312" />
<title>无标题文档</title>
<script type="text/javascript" src="jquery-1.4.3.min.js"></script>
<script type="text/javascript" src="MessageBox.js"></script>
<link href="MessageBox.css" type="text/css" rel="stylesheet" />
</head>
<body >

[url=javascript:test()]confirm[/url]
[url=javascript:MessageBox.alert('提示', 'aa',null, MessageBox.WARNING)]alert[/url]
<script type="text/javascript">
  function test(){
    MessageBox.confirm('消息', "提示,请登录后在操作!", function(btn){
	   if(btn){
	   //    alert('你点了是');
	   }else{
	   //   alert('你点了否');
	   }
	}, MessageBox.ERROR);
  }
</script>
</body>
</html>

效果图:
  • 大小: 12 KB
0
0
分享到:
评论

相关推荐

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

    Fancybox正是利用jQuery的强大功能,实现了图片预览的弹窗效果。 **二、jQuery Fancybox介绍** jQuery Fancybox是一个轻量级的插件,其主要功能是创建一个美观的、具有多种自定义选项的弹出窗口,用于展示图片、...

    基于JQuery开发的弹窗插件

    【标题】基于JQuery开发的弹窗插件 在Web开发中,弹窗是一种常见的交互方式,用于显示警告、确认信息或提供用户输入等。JQuery是一个轻量级的JavaScript库,它简化了HTML文档遍历、事件处理、动画以及Ajax交互等...

    基于jquery的提示弹窗

    本文将深入探讨如何使用jQuery实现一个功能丰富的提示弹窗,包括正确、错误和警告三种类型。 首先,jQuery是一个强大的JavaScript库,它简化了DOM操作、事件处理、动画效果以及Ajax交互。在实现提示弹窗时,jQuery...

    jquery封装的漂亮弹窗confirm

    在"jquery-confirm-master"这个压缩包中,包含了这个jQuery弹窗组件的所有源码和资源。通常,它会包含以下内容: 1. **CSS文件**:这些文件(如`jquery-confirm.css`)包含了弹窗的样式定义,确保弹窗在各种浏览器...

    基于jquery 可高度自定义的弹窗组件

    "基于jQuery可高度自定义的弹窗组件"就是这样一个解决方案,它旨在为开发者提供灵活、强大的功能,以满足不同场景下的弹窗需求。这个组件能够运行在多种浏览器上,包括IE、Safari和Firefox,确保了跨平台兼容性。 ...

    基于jQuery的轻量级js弹窗插件

    总结起来,这个基于jQuery的轻量级js弹窗插件是一个基础但具有潜力的项目,它的目标是提供一个简单易用的弹窗解决方案。虽然目前功能有限,但通过进一步开发和完善,有望成为一个功能全面、高度定制化的弹窗工具,...

    jQuery右下角弹窗插件

    本篇文章将深入探讨一个基于jQuery的右下角弹窗插件,分析其核心概念、使用方法以及如何进行功能扩展。 **一、插件核心概念** 1. **jQuery选择器与DOM操作**:jQuery插件通常是围绕选择器和DOM操作构建的。该右下...

    jquery弹窗插件 好用又好看

    以压缩包中的“jquery-tcc-150408232329”为例,这是一个可能的jQuery弹窗插件。首先,需要引入jQuery库和该插件的脚本文件。接着,可以使用以下代码来创建并显示一个弹窗: ```html &lt;!DOCTYPE html&gt; &lt;title&gt;...

    jQuery Alert弹窗插件点击弹出对话框代码

    jQuery Alert是一款基于jQuery库的弹窗插件,用于在网页中实现更为美观和功能丰富的对话框效果。这个插件能够帮助开发者轻松创建各种类型的提示、警告、确认和自定义消息框,而不再局限于浏览器自带的alert函数。在...

    Jquery 自定义可移动的插件弹窗

    jQuery 是一个轻量级的 JavaScript 库,它简化了 DOM 操作、事件处理和动画等功能,使得创建自定义弹窗插件变得相对容易。本插件即为基于 jQuery 的可移动弹窗实现,旨在提供一种简单易用、功能实用的解决方案。 ...

    jquery点击弹窗2种写法

    这两种方法都基于jQuery的事件处理和DOM操作功能,下面将详细介绍这两种实现方式。 ### 1. 使用jQuery UI Modal Dialog jQuery UI库提供了一种简单易用的模态对话框功能。首先,你需要在项目中引入jQuery和jQuery ...

    基于Jquery的弹窗提示插件

    本教程将深入探讨如何基于jQuery构建一个弹窗提示插件,并探讨相关技术细节。 ### 1. jQuery基础知识 在讨论插件之前,我们需要了解jQuery的基础。jQuery提供了一种简洁的方式来选择DOM元素、操作它们、添加事件...

    Msbox(基于Jquery的弹窗提示插件)

    * Msbox是一个超轻量级的弹出提示窗口Jquery插件,基于jquery-1.8.3开发 * 主要实现自定义弹窗提示效果:成功提示、警告提示、错误提示、询问提示、消息提示五种提示效果 * @name Msbox * @author ChenZhen || ...

    基于jquery的图片弹窗预览插件

    **基于jQuery的图片弹窗预览插件:fancyPic** 在Web开发中,图片预览功能是一项常用且重要的需求,特别是在用户需要查看大图或者多图时。jQuery作为一个轻量级、高性能的JavaScript库,提供了丰富的插件来简化此类...

    jquery轻量级顶部下滑弹窗效果

    jquery.messagebox.js插件,一个基于jquery的弹窗插件,ui效果设计不错 典型的轻量级的,附件提供了四种常用的弹窗效果 每次弹出或者收回的效果均是从顶部下拉或者反弹回去 使用方法: 1、将head中的样式...

    基于jquery的气泡弹窗下拉提示插件样式自定义

    首先,jQuery是一个强大的JavaScript库,它简化了JavaScript代码的编写,使得DOM操作、事件处理、动画设计变得更加容易。使用jQuery创建气泡弹窗下拉提示,可以减少开发时间和提高效率。 在"基于jquery的气泡弹窗,...

    jquery弹窗

    jQuery弹窗通常基于JavaScript的DOM操作和事件处理功能,通过创建或修改DOM元素来实现弹出效果。jQuery提供了`.show()`, `.hide()` 和 `.toggle()`等方法来控制元素的可见性,配合CSS样式,可以轻松创建动态显示和...

    jQuery任务栏 弹窗

    3. **定义弹窗CSS**:为了实现弹窗效果,我们需要创建一个CSS类来定义弹窗的样式。弹窗通常是绝对定位,以覆盖页面其他元素,并具有透明度控制。 ```css .popup { position: fixed; top: 50%; left: 50%; ...

    jquery基于SimplePop.js插件实现的兼容性较好的弹窗效果源码.zip

    《基于jQuery和SimplePop.js实现弹窗效果的详解》 在网页开发中,弹窗效果是一种常见的用户交互设计,用于提示信息、展示内容或者进行确认操作等。jQuery库以其简洁的API和良好的浏览器兼容性,成为了JavaScript...

Global site tag (gtag.js) - Google Analytics