`
shuai1234
  • 浏览: 972242 次
  • 性别: Icon_minigender_1
  • 来自: 山西
社区版块
存档分类
最新评论

jQuery Dialog 弹出层对话框插件(可加载url地址)

 
阅读更多

 

网上这种插件很多,但是没一个合适的,大部分都做得很大,功能齐全。于是自己做了这个小插件,顺便学习下jQuery插件的写法。

具体的演示程序在这里:演示程序

 

原理很简单,通过JS动态构建一个div层,将其插入到body中,然后通过调整position的CSS属性为absolutefixed,使其脱离原来的文档流的位置。再通过适当的加工美化就成了。

<!-- 背景遮盖层 --> 
<div class="dialog-overlay"></div> 
 
<!-- 对话框 --> 
<div class="dialog"> 
  <div class="bar"> 
    <span class="title">标题</span> 
    <a class="close">[关闭]</a> 
  </div> 
  <div class="content">内容部分</div> 
</div>

这就是两个div层的结构,第一个背景遮盖层只有在需要的时候才创建。每个div都定义了一个CSS类,这样便于自定义其外观。

 

一些基本功能的实现

移动框体

只要在mousemove事件中,计算两次移动鼠标位置的差值,再加上被移动框的原始的top,left,就是对话框新的位置。mousemove事件只需要在鼠标按下标题栏的时候才需要触发,所以只有在触发标题栏的mousedown事件时才绑定mousemove事件,而鼠标释放时也同时解除mousemove的绑定。

mousemove和解除绑定mousemove事件的mouseup却没有绑定到标题栏上,而是document上,之所以这样,是因为有时鼠标移动过快时,会移出标题栏范围,此时若是绑定到标题栏上的事件就会失效,而绑定到document就不会。

var mouse={x:0,y:0}; 
function moveDialog(event) 
{ 
    var e = window.event || event; 
    var top = parseInt(dialog.css('top')) + (e.clientY - mouse.y); 
    var left = parseInt(dialog.css('left')) + (e.clientX - mouse.x); 
    dialog.css({top:top,left:left}); 
    mouse.x = e.clientX; 
    mouse.y = e.clientY; 
}; 
dialog.find('.bar').mousedown(function(event){ 
    var e = window.event || event; 
    mouse.x = e.clientX; 
    mouse.y = e.clientY; 
    $(document).bind('mousemove',moveDialog); 
}); 
$(document).mouseup(function(event){ 
    $(document).unbind('mousemove', moveDialog); 
});

定位

居中定位很容易实现,IE下的clientWidth, offsetWidth等一系列属性和其它浏览器好像有点不一样,所以不要用这些属性,可以直接用jQuery下的width()函数:

var left = ($(window).width() - dialog.width()) / 2; 
var top = ($(window).height() - dialog.height()) / 2; 
dialog.css({top:top,left:left});

IE6下并没有fixed模式,但是能通过window.onscroll事件模拟实现:

// top 对话框到可视区域顶部位置的距离。 
var top = parseInt(dialog.css('top')) - $(document).scrollTop(); 
var left = parseInt(dialog.css('left')) - $(document).scrollLeft(); 
$(window).scroll(function(){ 
    dialog.css({'top':$(document).scrollTop() + top,'left':$(document).scrollLeft() + left}); 
});

z-index

为了能实现多个对话框并存,采用了一个静态的zIndex变量,每次创建新对话框时,都实现一次自增操作,并将新值赋值给新创建的对话框的z-index,这样就能保证最后创建的对话框总在最前面。

 

对外接口

插件通过以下的方式调用:

var dlg = new Dialog(content, options); 
dlg.show();

当然如果只是一般的使用,可以更简单一些:

new Dialog(content, options).show(); 
// 或是 
dialog(content, options);

还可以通过以下四个函数,对插件进行进一步的控制:

  • show():显示对话框
  • hide():隐藏对话框,但并不删除对话框内的内容。
  • close():关闭对话框,彻底删除其内容。
  • setContent(content):改变对话框内的内容。

构造函数的参数

构造函数有两个参数。content和options。content表示对话框的内容;options表示对话框的各个配置选项。

content可以是一个字符串,表示显示的内容。或是一个Object类型,若是Object类型,则需要包含以下两个属性:type和value。type表示数据类型,而value则是type对应的内容。type接受以下几种类型:

  • id:显示某一ID的内容,但并不包含此ID本身的内容。value对应为某一HTML元素的ID值。
  • img:显示一张图片。value对应为图片的uri。
  • url:通过ajax方式显示某一URL的内容,所以必需要在同一域名下。value为对应的URL地址。
  • iframe:将一URL指定的内容显示到iframe中,它去除了AJAX调用的一些限制(相同域名,返回的HTML代码中不能包含head头等。)。value为对应的URL。

options则是对Dialog行为和外观的具体设置:

名称 描述 默认值 title closeText showTitle draggable modal center fixed time id 名称 描述 返回值类型 beforeShow afterShow beforeHide afterHide beforeClose afterClose
选项
标题栏的文本 标题
关闭按钮文字 [关闭]
是否显示标题栏,若为否,则标题和关闭按钮都将不显示。 true
是否可以拖动框体。 true
模态对话框,若为是,则不可操作背景层。 true
是否居中显示,若为否,则通过CSS中的内容进行定位。 true
对话框是否跟随滚动条移动。 true
自动关闭对话框时间,单位毫秒,若为0,表示不会自动关闭。 0
对话框的ID。若为false,则表示自动产生。 false
回调函数
在显示之前调用,若返回false,则不显示对话框。 bool
显示之后调用。
在隐藏之前调用,若返回false,则不隐藏对话框。 bool
隐藏之后调用。
在关闭之前调用,若返回false,则不关闭对话框。 bool
关闭之后调用。

 

自定义CSS

插件为对话框的每一个部分都提供了一个CSS类名,很容易实现CSS的自定义:

类名 描述 .dialog-overlay .dialog .dialog .bar .dialog .bar .title .dialog .bar .close .dialog .content
模态对话框时,的背景遮盖层。
对话框的CSS。
标题栏的CSS。包含了标题和关闭按钮。
标题栏的标题部分。
标题栏的关闭按钮部分。
内容部分。

你可以直接修改这些CSS类,进行全局的修改,也可以通过id加类名的方式修改某一个对话框。

/* 只修改id为#dialog的对话框。 */ 
#dialog1 .bar 
{ 
  text-transform:lowercase; 
}
// 通过id属性指定对话框的id。 
new Dialog('text',{id:'dialog1'});

 

具体的演示程序在这里:演示程序

 

分享到:
评论
1 楼 lanyunleng727 2012-08-27  
谢谢提供共享啊

相关推荐

    一款jquery Ajax弹出对话框插件SimpleModal

    jQuery SimpleModal是一款轻量级且高度可定制的Ajax弹出对话框插件,它使得在网页中创建各种形式的模态窗口变得非常简单。下面我们将深入探讨这款插件的特性和使用方法。 ### 1. 简介 SimpleModal是由Eric Martin...

    jquery 弹出层,点击链接弹出,不支持框架

    1. **寻找替代品**:有很多现代的jQuery弹出层插件可供选择,如Bootstrap Modal、Magnific Popup、Fancybox等。这些插件提供了更好的性能和更多的自定义选项,且持续维护更新。 2. **自定义实现**:如果你不希望...

    Jquery点击输入框弹出层

    弹出层的实现方式有很多种,可以创建一个隐藏的HTML元素,当点击输入框时显示,或者使用插件如jQuery UI的Dialog。在这里,我们假设你已经有了一个CSS类,用于定义弹出层的样式,例如`.popup`,并将其设置为初始时的...

    Jquery弹出层,并提交数据

    在jQuery中,我们可以利用`$.fn.dialog`插件(来自jQuery UI库)或自定义CSS和JavaScript实现弹出层效果。 一、jQuery UI Dialog 如果你已经包含了jQuery UI库,可以方便地使用`$.fn.dialog`方法创建弹出层。首先...

    layer几十种不同的jQuery弹出层

    首先,"layer"是一个专门用于创建弹出层效果的jQuery插件,它以其灵活性、易用性和高度定制性赢得了广泛的赞誉。通过layer,开发者可以轻松实现多种弹出层效果,包括警告框、对话框、提示信息、加载进度条、图片预览...

    jquery弹出层 的几个例子

    5. **插件使用**:jQuery有许多优秀的弹出层插件,如jQuery UI Dialog、Bootstrap Modal或SweetAlert。这些插件提供了更多功能,如自定义按钮、自动调整大小、拖动和关闭图标等。在jQuery 1.3.2版本下,可能需要查找...

    jQuery 弹出层

    在网上找的比较不错的弹出层。 实例有: 可以打开多个; 自动关闭; 非fixed模式(对话框不随滚动条移动); 显示指定ID的内容; 加载一张图片; 加载一URL地址; 加载一URL到iframe; 回调函数。

    修改jquery里的dialog对话框插件为框架页(iframe) 的方法

    - 示例网址(***)展示了弹出框架页的演示效果,可用于登录、注册等弹出层。 - 该方法可能特别适合于希望用户在独立窗口中处理表单或其他任务的场景。 7. 注意事项: - 开发者在使用iframe时需要注意同源策略,...

    封装的dialog插件 基于bootstrap模态对话框的简单扩展

    Bootstrap模态对话框(Modal)是一种常见的UI组件,用于展示弹出式的窗口,通常用于提示、确认、输入等场景。在原生Bootstrap中,每个模态对话框需要在HTML中单独编写结构,这在需要频繁使用对话框的情况下显得较为...

    jQuery点击弹出大图照片画廊代码

    这可以通过`$.ajax()`或`$.get()`等方法实现异步请求,获取大图URL后替换弹出层内的图片源。 6. **自动播放**:使用`setInterval()`可以设定定时器,每隔一定时间自动切换到下一张图片。结合`setTimeout()`和`...

    HTML制作模式窗体_弹出不确定就不让点后边的窗口.zip

    4. **layer官方演示与讲解(jQuery弹出层插件).url**:这看起来是一个链接,指向一个关于jQuery插件"Layer"的官方演示和说明。Layer是一个流行的jQuery插件,专门用于创建各种弹出层,包括模式对话框。通过这个插件...

    jquery遮罩

    除了BlockUI,还有其他jQuery遮罩插件可供选择,如`jQuery Masked Input Plugin`,主要用于输入框的格式化,不适用于全局遮罩,或者`jQuery UI Dialog`,可以创建弹出对话框并带有遮罩效果。 ### 七、总结 jQuery...

    bootstrap演示20种不同的手机响应式弹出层modal特效

    在“bootstrap演示20种不同的手机响应式弹出层modal特效”这个主题中,我们将深入探讨Bootstrap的Modal组件以及如何利用它来创建多样的手机交互体验。 Modal组件是Bootstrap的核心组件之一,它主要用于创建模态...

    Ajax Model Dialog

    Ajax Model Dialog 提供了一种高效、灵活的方式,用于在网页上弹出含有动态内容的对话框。 ### 1. Ajax 技术 Ajax(Asynchronous JavaScript and XML)是一种在无需刷新整个网页的情况下,能够更新部分网页内容的...

    jQuery权威指南-源代码

    8.3.4 对话框插件/263 8.4 综合案例分析—使用jQuery UI插件以拖动方式管理相册/269 8.4.1 需求分析/269 8.4.2 效果界面/269 8.4.3 功能实现/270 8.4.4 代码分析/274 8.5 本章小结/277 第9章 jQuery实用工具...

    jquery 模式对话框终极版实现代码

    本篇文章将深入探讨如何使用jQuery实现一个功能丰富的模式对话框插件,包括三种不同风格的皮肤——红、绿、蓝,以及根据页面滚动自动保持居中的特性。 首先,为了使用这个插件,我们需要在页面中引入必要的样式文件...

    lhgDialog-4.2.0.zip

    而lhgDialog是一款基于jQuery的弹出对话框插件,它为网页提供了丰富的对话框效果,使得用户交互更加友好。本文将深入探讨lhgDialog-4.2.0版本的特性和应用。 lhgDialog的核心功能在于提供灵活的对话框解决方案,它...

    jQuery插件EasyUI实现Layout框架页面中弹出窗体到最顶层效果(穿越iframe)

    在探讨jQuery插件EasyUI如何实现Layout框架页面中弹出窗体到最顶层效果时,我们首先要了解几个关键的技术点:jQuery,EasyUI插件,Layout框架,以及如何让弹出窗体穿越iframe。 jQuery是一个快速、小巧、功能丰富的...

    js在ie下打开对话窗口的方法小结

    随着IE浏览器逐渐被淘汰,开发者应尽量避免在新项目中使用这些方法,转而使用更跨浏览器的解决方案,如Bootstrap的模态组件或者自定义的弹出层。 在实际应用中,为了兼容更多浏览器,开发者可以使用jQuery插件或...

Global site tag (gtag.js) - Google Analytics