artDialog.js的使用

开发项目中用到了artDialog.js,从而专门学习一下如何配置和使用。

一、artDialog是什么

artDialog是一个精巧的web对话框组件,压缩后只有十多KB,并且不依赖其他框架。

二、artDialog的使用

以下内容引用 http://www.2cto.com/kf/201303/195812.html,artDialog基本使用,详细内容有调整和更改。

在页面head引入artDialog,注意如果文件带有skin参数将会无阻塞的方式自动加载对应的皮肤css文件,当然你仍然可以使用传统方式引用“skins/”目录下的css文件,二者选其一。

<script src="artDialog.js?skin=default"></script>

如果项目采用jQuery作为框架,则引用jQuery artDialog版本:<script src="jquery.artDialog.js?skin=default"></script>

如果需要在iframe应用下提供 更好的支持,需要加上:<script src="artDialog.iframeTools.js"></script>

三、配置参数

 名称类型默认值描述说明
内容titleString'消息'标题内容 
contentStringnull消息内容

1、如果内容类型是Object(JSON)还需要tmpl参数配合;

2、如果传入的是HTMLElement类型,如果是隐藏元素会给其设置display:block以显示该元素,其他属性与绑定的事件都会完整保留,对话框关闭后此元素又将恢复原来的display属性,并且重新插入原文档所在位置;

3、如果没有设定content的值则会有loading的动画。

HTMLElement Object

按钮yesFnFunctionnull确定按钮回调函数

函数如果返回false将阻止对话框关闭;函数this指针指向内部api;如果传入true表示只显示有关闭功能的按钮。

Boolean

noFnFunctionnull取消按钮回调函数

函数如果返回false将阻止对话框关闭;函数this指针指向内部api;如果传入true表示只显示有关闭功能的按钮。

对话框标题栏的关闭按钮其实就是取消按钮,只不过视觉不同罢了,点击同样触发noFn事件。

Boolean

yesTextString'确定'确定按钮文本 
noTextString'取消'取消按钮文字 
buttonArraynull自定义按钮

参数{name:按钮名称,callback:按下后执行的函数,focus:是否聚焦点,disabled:是否标记按钮为不可用状态}(后续可使用控制接口让其恢复可用状态)。

示例:参数如[{name:'登录', callback: function () {}}, {name: '取消'}]。

注意点击按钮默认会触发按钮关闭动作,需要阻止触发关闭请让回调函数返回false。

尺寸widthNumber'auto'设置消息内容宽度

可以带单位。一般不需要设置此,对话框框架会自己适应内容。

如果设置为百分值单位,将会以根据浏览器可视范围作为基准,此时如果浏览器窗口大小被改变其也会进行相应的调整。

String

heightNumber'auto'设置消息内容高度

可以带单位。不建议设置此,而应该让内容自己撑开高度。

如果设置为百分值单位,将会以根据浏览器可视范围作为基准,此时如果浏览器窗口大小被改变其也会进行相应的调整。

String

位置fixedBooleanfalse开启静止定位

静止定位是css2.1的一个属性,它静止在浏览器某个地方不动,也不受滚动条拖动影响(artDialog支持IE6 fixed)。

followHTMLElementnull让对话框依附在指定元素附近

可传入元素ID名称,注意ID名称需要以“#”号作为前缀。

String

leftNumber'50%'X轴的坐标

1、如果开启了fixed参数则以浏览器视口为基准;

2、可以使用'0%'~ '100%'作为相对坐标,如果浏览器窗口大小被改变其也会进行相应的调整。

String

topNumber'goldenRatio'Y轴的坐标

1、如果开启了fixed参数则以浏览器视口为基准;

2、可以使用'0%'~ '100%'、''goldenRatio''作为相对坐标,如果浏览器窗口大小被改变其也会进行相应的调整,其中'goldenRatio'表示为黄金比例垂直居中,绝对居中请使用'50%'。

String

视觉lockBooleanfalse开启锁屏

中断用户对话框之外的交互,用于显示非常重要的操作/消息,所以不建议频繁使用它。

backgroundString'#000'锁屏遮罩颜色 
opacityNumber0.7锁屏遮罩透明度 
iconStringnull定义消息图标可定义“skins/icons/”目录下的图标名作为参数名(不包含后缀名)
paddingString'20px 25px' 内容与边界填充边距(即css padding)
交互timeNumbernull设置对话框显示时间单位秒
resizeBooleantrue是否允许用户调节尺寸 
dragBooleantrue是否允许用户拖动位置 
escBooleantrue是否允许用户按Esc键关闭对话框 
高级idStringnull设定对话框唯一标识

用途:1、防止重复弹出;2、可后续使用art.dialog.list[youID]获取控制接口。

Number

tmplStringnull启用模板引擎拼接消息内容

还需要与content参数传入字面量对象才能生效,详情见示例。

zIndexNumber1987重置全局zIndex初始值

用来改变对话框叠加高度。比如有时候配合外部浮动层UI组件,但是它们可能默认zIndex没有artDialog高,导致无法浮动到artDialog之上,这个时候你就可以给对话框指定一个较小的zIndex值。

请注意这是一个会影响到全局的配置,后续出现的对话框叠加高度将重新按此累加。

initFnFunctionnull对话框弹出后执行的函数 
closeFnFunctionnull对话框关闭前执行的函数

函数如果返回false将阻止对话框关闭。

请注意这不是关闭按钮的回调函数,无论何种方式关闭对话框,closeFn都将执行。

showBooleantrue是否显示对话框 

配置全局默认设置

(function (config) { config['lock'] = true; config['fixed'] = true; config['yesText'] = 'yes'; config['noText'] = 'no'; // [more..] })(art.dialog.defaults);

 View Code

配置参数范例

  • 内容 [content]

    1. 传入字符串

    art.dialog({ content: '我支持HTML' });

    2. 传入HTMLElement

    art.dialog({ content: document.getElementById('demoCode_content_DOM'), id: 'EF893L' });

    备注:1)元素不是复制而是完整移动到对话框中,所以原有的事件与属性都将会保留;2)如果隐藏元素被传入到对话框,会设置display:block属性显示该元素;3)对话框关闭的时候元素将恢复到原来在页面的位置,style display属性也将恢复。

    3. 高级应用:传入Object并使用“tmpl”模板参数生成内容

    备注:拼接字符串是一个比较无趣的活儿,而artDialog内部使用一个微型模板引擎解析自身UI框架,你可以通过tmp参数继续使用它格式化内容。模板支持原生的javascript语法,可进行条件判断。推荐你尝试使用type="text/tmpl"的script标签存放模板,如:

    var tmpl = document.getElementById('tmpl_demoCode_content').innerHTML; art.dialog({ content: { code: 0, users: ['糖饼', '月月鸟', '水水', '丽丽', '花花', '大叔'], me: '糖饼', web: 'http://www.planeart.cn' }, tmpl: tmpl });

  • 标题 [title]

    art.dialog({ title: 'hello world!' });

  • 确定取消按钮 [yesFn & noFn]

    art.dialog({ content: '如果定义了回调函数才会出现相应的按钮', yesFn: function () { this.title('3秒后自动关闭').time(3); return false; }, noText: '关闭', noFn: true //为true等价于function(){} });

    备注:回调函数this指向扩展接口,如果返回false将阻止对话框关闭。

  • 自定义按钮 [button]

    art.dialog({ id: 'testID', content: 'hello world!', button: [ { name: '同意', callback: function () {this.content('你同意了').time(2); return false; }, focus: true }, { name: '不同意', callback: function () {alert('你不同意') } }, { name: '无效按钮', disabled: true }, { name: '关闭我' } ] });

    备注:回调函数this指向扩展接口,如果返回false将阻止对话框关闭;button参数对应的控制接口名称也是"button"。

  • 定时关闭的消息 [time]

    art.dialog({ time: 2, content: '两秒后关闭' });

  • 防止重复弹出 [id]

    art.dialog({ id: 'testID', content: '再次点击运行看看' }); art.dialog({id: 'testID'}).title('3秒后关闭').time(3);

  • 定义消息图标 [icon]

    art.dialog({ icon: 'succeed', content: '我可以定义消息图标哦' });

    内置图标:alert、succeed、error、confirm

  • 内容与边界填充边距 [padding]

    art.dialog({ padding: 0, title: false, content: '<img src="./images/photo.jpg" width="379" height="500" />', lock: true });

    有时候并不需要默认的内容填充边距,如展示图片与视频

  • 锁屏 [lock & background & opacity]

    art.dialog({ lock: true, background: '#600', // 背景色 opacity: 0.7, // 透明度 content: '中断用户在对话框以外的交互,展示重要操作与消息', icon: 'error', yesFn: function () { art.dialog({content: '再来一个锁屏', lock:true}); return false; }, noFn: true });

  • 跟随元素 [follw]

    • 1、标准形式

      art.dialog({ follow: document.getElementById('followTestBtn'), content: '让对话框跟着某个元素,一个元素同时只能出现一个对话框' });

    • 2、使用简写形式 (已经绑定onclick事件,注意此返回值不再是对话框控制接口)

      art('#demoCode_follow_a').dialog({ content: '让对话框跟着某个元素,一个元素同时只能出现一个对话框' });

    • 元素触发???
  • 自定义坐标 [left & top]

    art.dialog({ left: 100, top: '60%', content: '我改变坐标了' });

  • 创建一个右下角浮动的消息窗口

    art.dialog({ id: 'msg', title: '公告', content: 'hello world!', width: 320, height: 240, left: '100%', top:'100%', fixed: true, drag: false, resize: false })

  • 设置大小 [width & height]

    art.dialog({ width: '20em', height: 55, content: '尺寸可以带单位' });

  • 创建一个全屏对话框

    art.dialog({ width: '100%', height: '100%', left: '0%', top: '0%', fixed: true, resize: false, drag: false })

  • 静止定位 [fixed]

    art.dialog({ fixed: true, content: '请拖动滚动条查看' });

  • 不许拖拽 [drag & resize]

    art.dialog({ drag: false, resize: false, content: '禁止拖拽' });

四、控制接口

名称描述说明
close()关闭对话框 
show()显示对话框 
hide()隐藏对话框 
title(value)写入标题无参数则返回标题容器元素
content(value)向消息容器中写入内容参数支持字符串、DOM对象,无参数则返回内容容器元素
button(arguments)插入一个自定义按钮如:button({name:'登录', callback: function () {_form.submit();})。更多用法请见范例文档
follow(element)让对话框吸附到指定元素附近 
position(left,top)重新定位对话框 
size(width,height)重新设定对话框大小 
lock()锁屏 
unlock()解锁 
time(val)定时关闭单位秒

备注:控制接口返回值都是this,因此你可以使用链式编程风格。

控制接口范例

控制接口可以在对话框初始化后控制对话框。

  • 获取控制接口:直接引用控制接口

    var dialog = art.dialog({ title: '我是对话框', content: '我是初始化的内容' }); dialog.content('对话框内容被控制接口改变了').title('提示');

  • 获取控制接口:使用对话框ID

    art.dialog({ id: 'KDf435', title: '警告', content: '我是初始化的内容' }); art.dialog.list['KDf435'].content('对话框内容被控制接口改变了').time(2);

  • 获取控制接口:this引用

    art.dialog({ title: '警告', content: '我是初始化的内容', yesFn: function () { this.content('你点了确定按钮').position('50%', null).lock().time(2); return false; }, initFn: function () { this.content('对话框内容被控制接口改变了'); } });

  • 关闭页面所有对话框

    var list = art.dialog.list; for (var i in list) { list[i].close(); };

  • 按钮接口演示

    备注:回调函数如果返回false将阻止对话框关闭

    var dialog = art.dialog({ title: '警告', content: '点击管理按钮将让删除按钮可用', width: '20em', button: [{ name: '管理', callback: function () { this.content('我更改了删除按钮').button({ name: '删除', disabled:false }); return false; }, focus: true }] }); dialog.button( { name: '删除', callback: function () {alert('remove') }, disabled: true } )

  • 改变关闭方式

    art.dialog({ id: 'show-hide', content: '关闭后阻止对话框被删除,只隐藏对话框', closeFn: function () {this.hide(); return false; } }).show();

  • AJAX高级应用:执行HTML片段中特殊script标签

    HTML片段中的<script type="text/dialog"></script>标签包裹的javascript将会在对话框中执行,其this指向对话框控制接口,代码在闭包内执行,不会影响全局,这样可以进一步实现内容模块化。

    var dialog = art.dialog({id: 'N3690'}); // jQuery ajax $.ajax({ url: './ajaxContent/login.html', success:function (data) { dialog.content(data); }, cache: false });

    (本例子使用了AJAX,需要在服务器上运行。)

五、扩展:iframe应用工具集

 名称描述说明
核心方法art.dialog.parent获取artDialog可用最高层window对象

这与直接使用window.top不同,它能排除artDialog对象不存在已经或者顶层页面为框架集的情况。

这是iframe应用工具集中的核心方法,你可以用它来操作父页面对象(包括上面的对话框)

art.dialog.data(name,value)跨框架数据共享写入接口

框架与框架之间以及与主页面之间进行数据交换是非常头疼的事情,常规情况下你必须知道框架的名称才能进行数据交换,如果是在复杂的多层框架下操作简直就是噩梦。

而data方法就是为了解决这个问题,你完全不用管框架层级问题,它可以写入任何类型的数据,而做到各个页面之间数据共享。

art.dialog.data(name)跨框架数据共享读取接口指定name即返回数据,任何引用了artDialog的页面都有效
art.dialog.removeData(name)跨框架数据共享删除接口删除指定名称的数据,任何引用了artDialog的页面都有效
异步数据对话框art.dialog.open(url,options, cache)创建一个iframe页面参数:地址, 配置参数, 缓存开关(默认true)
art.dialog.open.apiiframe页面获取open方法控制接口注意这个iframe中也必须引用artDialog脚本文件
art.dialog.open.originiframe页面获取open方法触发来源页面window对象注意这个iframe中也必须引用artDialog脚本文件
art.dialog.close()iframe页面关闭open方法创建的对话框的快捷方式

close方法等同于:var api = art.dialog.open.api;api && api.close();

注意这个iframe中也必须引用artDialog脚本文件

art.dialog.load(url,options, cache)Ajax加载内容参数:地址,配置参数, 缓存开关(默认true)
基础交互对话框art.dialog.alert(content)警告消息参数:内容(同时只允许一个alert)
art.dialog.confirm(content,yesFn, noFn)确认参数:内容, 确定按钮回调函数, 取消按钮回调函数(同时只允许一个confirm)
art.dialog.prompt(content,yesFn, value)提问参数:内容, 确定按钮回调函数, 文本框默认值(同时只允许一个prompt)
art.dialog.tips(content,time)短暂提示参数:内容、显示时间(单位秒, 默认1.5)(同时只允许一个tips)
自定义art.dialog.through(options)创建一个普通可穿越框架的对话框

不鼓励直接使用window.top这样的方式穿越,这样可能因为对话框触发页面重置导致其产生所有的对象在内存中被清空,而让对话框无法关闭,所以你应该用这个安全的方法创建自定义对话框。

框架集页面无法覆盖第三方元素,不过可以使用一个iframe套住框架集页面就可以正常使用,见下面演示文档

 

-----------------------分割线-------------------------------------------

感谢作者整理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
[更新列表] ------------------------------------------------------------------------------------------------ v2.1.1 1、修复IE6静止定位的对话框导致页面变长的问题 v2.1.0 1、 增加menuBtn参数, 支持让对话框在指定元素附近弹出(菜单模式) 2、 剔除鸡肋参数'parent',框架相互调用请用javascript原生方法 3、 剔除对话框关闭后回调函数,如果需要使用使用内置扩展方法 4、 如果有取消按钮回调函数,那关闭按钮的回调函数也将与其相同 5、 增加当出现多个对话框时让顶层的与众不同的特性 6、 让Esc键关闭最高层对话框 7、 锁屏的时候改用js屏蔽页面滚动功能,取消原来CSS隐藏滚动条,防止页面偏移 8、 给确定按钮增加Ctrl + Enter快捷键,锁屏的时候支持tab与方向键切换按钮焦点 9、 锁屏的时候屏蔽了键盘操作刷新、Tab切换(只在对话框中可用)与全选 10、修复Chrome特定情况下出现的iframe错位问题 11、修正2.0.8版本后锁屏不兼容Safari的问题 12、修复Firefox调大对话框拖帧的现象 13、修复拖动对话框时候可能因鼠标置入iframe窗口而导致鼠标被粘住的问题 14、修复了内部$.newId方法的一处错误,特定情况下导致定义了ID的对话框无法弹出 15、删除脚本对IE6 png bug内置支持,之前测试版本自动修复ie6 png皮肤是因为作者偷懒 16、修改aero皮肤CSS、针对IE6单独兼容,减少之前脚本修复png占用过多的客户端资源 17、默认皮肤改为前版的mini,没有使用任何背景图片,完全用css表现 18、修复一处隐秘BUG:当使用Ctrl+回车提交表单并弹出对话框时导致弹出新窗口 (因为此时焦点在对话框关闭链接上,这个快捷键让很多浏览器新建窗口) 19、重新绘制'earo'皮肤,修复毛边的问题 20、修复拖动的时候出现选中文本的现象(自动清除选择) 21、如果对话框高度超过浏览器视口的一半高度则不使用黄金比例垂直居中 22、修复了IE7通过url参数创建的iframe可能出现边框线的小问题 23、为了后续版能够提更多接口(小巧而强大的),想了很久狠心改了调用名:art.dialog(); 24、既然连入口都改了,那再改下配置名(为了后续可能的拓展): 'url'参数名改为'iframe' 25、可以自适应iframe内容的大小(不跨域的前提下) 26、对超过预设面积大小的对话框拖动自动采用替身的方式,以求拖动更流畅 27、新增加一个'data'的接口,它保存了你对话框每次创建的消息对象 (操作iframe消息将更加方便,如提交iframe表单。稍后添加更多的例子..) 28、对于简单的消息可以使用简写: artDialog('hello world') 29、让IE6支持覆盖下拉控件的同时也支持透明皮肤 30、优化锁屏渐变动画 31、修复范围限制函数没有生效的错误 32、修复一处笔误,忘记声明变量导致泄漏出去污染全局 v2.0.9 1、 优化代码结构,弹出后仍可访问内部方法(如关闭),大大增强了灵活性 2、 修正IE7锁屏的时候滚动条没有禁止的问题 3、 让焦点自动附加到确定按钮或者关闭按钮 v2.0.8 1、 修正超大对话框并使用定位时候可能被截取的BUG 2、 修复Opera无法正确处理对话框叠加高度(z-index)的BUG 3、 修复Opera设置坐标时候出现的变形BUG v2.0.7 1、 url参数加载外部页面的时候显示loading动画 2、 预加载皮肤背景图片 3、 优化拖动 v2.0.6 1、 解决页面载入即弹出的情况造成水平对齐不正常的BUG(主要是dom ready事件 绑定) 2、 增加parent参数,支持对话框穿越框架在父页面弹出 v2.0.5 1、 剔除yesClose参数,如果要点击确定或者取消按钮不自动关闭对话框,让回调 函数返回false即可 2、 更改x参数名为left,y为top,为后续版本拓展right与bottom参数需要 3、 修改皮肤aero和chrome的图标布局,让回行消息文本留出图标的宽度 v2.0.4 1、 修改一小处兼容框架样式,防止调用页面body设置了文本对齐导致对话框标题文 本也居中 v2.0.3 1、 增加id参数,可以方便外部脚本控制整个对话框,同时可防止对话框重复弹出 2、 增加yesClose参数,用于阻止对话框点击确定后自动关闭 v2.0.0 ...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值