artDialog demo

# artDialog v 2.1.0, 2010-06-01

#### 项目主页：http://code.google.com/p/artdialog/

##### 基于LGPL协议发行

目前你看到的就是artDialog正式版！更新了什么？

简介

artDialog是一个轻巧且高度兼容的javascript对话框组件，可让你的网页交互拥有桌面软件般的用户体验。

功能： 支持锁定屏幕(遮罩)、模拟alert和confirm、多窗口弹出、静止定位、支持Ese键关闭对话框、定时关闭、自定义位置、菜单模式、拖动、鼠标调节窗口大小...

### 优点

1. 自适应内容: 无需预设高宽, 对话框与按钮自适应消息内容的大小
2. 文本智能对齐: 如果设置了对话框宽度，短文本居中对齐, 而长文本居左对齐
3. 容错能力: 如果定义的宽度高度小于内容大小不会出现错位
4. 界面机制: 九宫格布局, 样式钩子与结构丰富, 可定制自适应皮肤
5. 跨浏览器支持: 支持 Firefox, Chrome, Safari, IE6+, Opera ..
6. 轻巧: 不依赖第三方库, js压缩后10kb左右
7. IE6无抖动静止定位: 在 IE6 下可实现与现代浏览器一样完美无闪动静止定位效果
8. 定位修正: 使用自定义坐标的时候智能修正位置, 不会超出边界
9. 拖动流畅: 不会粘住鼠标也不会拖出浏览器视口导致无法控制
10. IE6遮盖下拉控件支持: 解决了 IE6 的下拉控件无法被层覆盖的问题

接口

### 配置参数

内容
  content: {消息内容,支持HTML}
  title: {标题.默认:'提示'}
  iframe: {嵌入外部页面. 存在content参数时候,此参数无效}
  yesText: {确定按钮文本. 默认:'确定'}
  noText: {取消按钮文本. 默认:'取消'}

尺寸
  width: {宽度,支持em等单位. 默认:'auto'}
  height: {高度,支持em等单位. 默认:'auto'}

定位
  left: {x坐标,可以使用关键字,如:left/right/center. 默认:'center'}
  top: {y坐标,可以使用关键字,如:top/bottom/center. 默认:'center'(注: 小对话框采用黄金比例垂直居中)}
  menuBtn: {让对话框在指定元素附近弹出, 存在menuBtn参数则让left、top参数失效}
  fixed: {是否启用静止定位. 默认:false}

界面
  style: {对话框风格扩展参数,写入自定义className,详情见皮肤css文件的定义,多个用空格隔开}
  lock: {是否锁定屏幕, 中断用户操作页面. 默认:false}

高级
  id: {给对话框定义唯一标识id名称. 可以防止重复弹出对话框}
  time: {多少秒自动关闭}

### 语法风格

art.dialog({ 配置参数 }, function(){ 确定按钮回调函数 }, function(){ 取消按钮回调函数 }) 如:

    art.dialog(
            {
                content:'欢迎你来到对话框世界！',
                lock:true,
                style:'succeed noClose'
            },
            function(){
                alert('你点了确定');
            },
            function(){
                alert('你点了取消');
            }
    );

art.dialog({content:'hello world!'})
你可以修改后运行
展示

风格: aero chrome facebook default

问题

- ### 如何让点击对话框按钮不默认关闭对话框

  让回调函数返回false即可
  示例: art.dialog({content:'hello world!'}, function(){ alert('yes'); return false; })

- ### 如何用外部按钮关闭对话框？

  首先被操作的对话需要定义一个id参数，可以调用artDialog扩展方法关闭它：
  art.dialog({id:'test'}).close()
  更多内置方法拓展请查阅源码

- ### 如何在对话框关闭的时候执行回调函数？

  可以使用扩展方法，如：art.dialog({content:'hello world!'}).close(function(){alert('对话框在关闭！')})
  更多内置方法拓展请查阅源码

- ### 如何取到用iframe创建的内容页元素

  可以使用artDialog扩展'data'接口：
  art.dialog({id:'testDialog'}).data.iframe.document.getElementById('test')
  注意：不能跨域

- ### 为什么IE6下aero皮肤没有背景图了？

  请检查aero皮肤CSS关于ie6 png路径，那些图片的路径它是相对于你HTML，而不是CSS，下载后你需要自己根据你实际路径更改

- ### 为什么artDialog在我页面上不正常？

  只支持DOCTYPE W3C标准声明的页面使用，目前绝大多数网站使用W3C标准

- ### 为什么我引用了artDialog后我页面在IE6下没有那20px的页边距呢？

  artDialog对IE6兼容的时候把body默认的边距设置为0了，因为只有清除后才能在IE6下正常使用。目前还没有更好的办法照顾IE6这个20px，绝大多数网站也会重置浏览器默认边距

- ### 如何做到重复点击只弹出一个对话框，而不会出现多个？

  使用id参数即可，给对话框定义一个唯一ID

建议

- 锁屏功能是用来显示非常重要的操作或者消息，由于其会中断用户操作流程，建议慎用
- 非必要无需开启静止定位，它总是静止在一个位置同样会干预用户操作，建议少用
- 对于类似‘删除确认’的对话框，建议使用menuBtn参数让其在按钮附近弹出，这样可以让交互更顺畅

更新

### 变动的调用方式

1. artDialog 改为 art.dialog
2. url 改为 iframe

（2.1版能兼容旧版本的调用方式。建议使用新的调用方式，下一版不再兼容<1.0.9）

### 新增加的功能

1. 增加menuBtn参数, 支持让对话框在指定元素附近弹出(菜单模式)
2. 增加同域下自适应iframe内容的大小
3. 新增加一个'data'的接口，它保存了每次创建的消息容器对象

### 优化的功能

1. 锁屏的时候改用js屏蔽页面滚动功能，取消原来CSS隐藏滚动条，防止页面偏移
2. 对超过预设面积大小的对话框拖动自动采用替身的方式，以求拖动更流畅
3. 给确定按钮增加Ctrl + Enter快捷键(如果内容有表单)，锁屏的时候支持tab与方向键切换按钮焦点
4. 如果对话框高度超过浏览器视口的一半高度则不使用黄金比例垂直居中
5. 锁屏的时候屏蔽了键盘操作刷新、Tab切换(只在对话框中可用)与全选
6. 如果有取消按钮回调函数，关闭按钮的回调函数也将与其相同
7. 当出现多个对话框时顶层的对话框使用不同的样式
8. 让Esc键关闭最高层对话框
9. 拖动的时候自动清除选中的文本
10. 让IE6支持覆盖下拉控件的同时也支持透明皮肤
11. 支持简写: art.dialog('我是消息')
12. 优化锁屏渐变动画

### 取消的功能

1. 剔除对话框关闭后回调函数，如果需要使用请使用内置扩展方法
2. 剔除鸡肋参数'parent'，框架相互调用请用javascript原生方法
3. 剔除IE6对使用了png皮肤样式自动修复支持

### 修复的错误

1. 修复Chrome特定情况下出现的iframe错位问题
2. 修正2.0.8版本后锁屏不兼容Safari的问题
3. 修复Firefox调大对话框拖帧的现象
4. 修复拖动对话框时候可能因鼠标置入iframe窗口而导致鼠标被粘住的问题
5. 修复了特定情况下导致定义了ID的对话框无法弹出
6. 修复一处隐秘BUG：当使用Ctrl+回车提交表单并弹出对话框时导致弹出新窗口
7. 修复了IE7创建的iframe可能出现边框线的小问题
8. 修复范围限制函数没有生效的错误
9. 修复一处笔误，忘记声明变量导致泄漏出去污染全局

作者

如果发现问题或者建议请给我发电子邮件。如果你对代码进行了优化，那也请您不吝给我一份吧，让它变得更好。

注：artDialog v2在多窗口支持与拖动借鉴了popbox等一些‘前辈’的的优秀思想，在此感谢。

唐斌, 热爱画画与WEB界面和交互设计. 欢迎臭味相投的朋友一起交流: www.planeArt.cn

firebug