开发kendo-ui弹窗组件

简介: 摘要:   kendo-ui中只是提供了windwo插件,并没有提供页内弹窗插件。现在分享项目中自己定制的基于window组件的弹窗插件,如果你的项目也是用的kendo-ui,只需要将组件代码引到项目中即可。

摘要:

  kendo-ui中只是提供了windwo插件,并没有提供页内弹窗插件。现在分享项目中自己定制的基于window组件的弹窗插件,如果你的项目也是用的kendo-ui,只需要将组件代码引到项目中即可。

特点:

  • 支持定时自动关闭弹窗
  • 按钮自定义
  • 支持最大化最小化

代码:

dialog.js

  1 var dialog = kendo.ui.Window.extend({
  2     // set options
  3     options: {
  4         name              : 'GDialog',    // widget name
  5         onOk              : $.noop,
  6         okText            : '确定',
  7         cancelText        : '取消',
  8         defaultButtons    : 'OK_CANCEL',  //'OK' || 'OK_CANCEL' || 'CANCEL' || 'NULL'
  9         extraButtons      : [],           //[ { text:'ok', className: '', click:function(){} }]
 10         appendTo  : 'body',
 11         minWidth  : 400,
 12         minHeight : 100,
 13         resizable : false,
 14         actions   : ['Close'],            // ['Minimize', 'Maximize', 'Close']
 15         autohide  : false,
 16         time      : 1000
 17     },
 18     // Init method
 19     init: function(element, options){
 20         var me = this;
 21         // Call super.init
 22         kendo.ui.Window.fn.init.call(this, element, options);
 23 
 24         // Add buttons
 25         var $buttonsArea = this._addButtons(element, options);
 26 
 27         // Set styles
 28         this.wrapper.addClass('k-dialog');
 29         $buttonsArea.addClass('k-button-area');
 30 
 31         // Set the dialog's position by default
 32         if (!options || !options.position){ this.center(); }
 33 
 34         // if the autohide is setted true that aftering a time auto hide the dialog. default is 1s.
 35         if(this.options.autohide) {
 36             setTimeout(function() {
 37                 kendo.ui.Window.fn.close.call(me);
 38             },this.options.time);
 39         }
 40     },
 41     open: function(){
 42         // Call super.open
 43         kendo.ui.Window.fn.open.call(this);
 44     },
 45     minimize: function(){
 46         // Call super.minimize
 47         kendo.ui.Window.fn.minimize.call(this);
 48 
 49         $(this.buttonsArea).hide();
 50         this.wrapper.css('padding-bottom', '0');
 51     },
 52     restore: function(){
 53         // Call super.restore
 54         kendo.ui.Window.fn.restore.call(this);
 55 
 56         $(this.buttonsArea).show();
 57         this.wrapper.css('padding-bottom', '51px');
 58     },
 59     center: function(){
 60 
 61         if (this.options.isMaximized){ return this; }
 62 
 63         // Call super.center
 64         kendo.ui.Window.fn.center.call(this);
 65 
 66         var that           = this,
 67             position       = that.options.position,
 68             wrapper        = that.wrapper,
 69             documentWindow = $(window),
 70             scrollTop      = 0,
 71             newTop;
 72 
 73         if (!that.options.pinned){ scrollTop = documentWindow.scrollTop(); }
 74 
 75         newTop = scrollTop + Math.max(0,
 76                 (documentWindow.height() - wrapper.height() - 50 - parseInt(wrapper.css("paddingTop"), 10)) / 2);
 77 
 78         wrapper.css({ top: newTop });
 79 
 80         position.top = newTop;
 81 
 82         return that;
 83     },
 84     _onDocumentResize: function(){
 85         if (!this.options.isMaximized){ return; }
 86 
 87         // Call super._onDocumentResize
 88         kendo.ui.Window.fn._onDocumentResize.call(this);
 89 
 90         this._fixWrapperHeight();
 91     },
 92     _fixWrapperHeight: function(){
 93         var height = (this.wrapper.height() - 51).toString() + 'px';
 94         this.wrapper.css('height', height);
 95     },
 96     // Add buttons to the dialog
 97     _addButtons: function(element, options){
 98 
 99         var that    = this,
100             buttons = this.options.extraButtons.slice(0);
101 
102         var nullPattern    = /NULL/gi, okPattern = /OK/gi, cancelPattern = /CANCEL/gi,
103             defaultButtons = {
104                 buttonOk     : {text: that.options.okText,     className:'ok-btn'   , click:function(e){
105                     that.options.onOk.call(that, e);
106                     return false;
107                 }},
108                 buttonCancel : {text: that.options.cancelText, className:'close-btn', click:function(e){
109                     e.preventDefault(); that.close();
110                 }}
111             };
112 
113         // Append default buttons
114         if (!nullPattern.test(this.options.defaultButtons)){
115             okPattern.test(this.options.defaultButtons) &&
116                buttons.unshift(defaultButtons.buttonOk);
117             cancelPattern.test(this.options.defaultButtons) &&
118                buttons.unshift(defaultButtons.buttonCancel);
119         }
120 
121         // Make button area
122         var buttonsArea  = document.createElement('div'),
123             $buttonsArea = $(buttonsArea);
124         this.buttonsArea = buttonsArea;
125 
126         // Make buttons and set buttons' attributes
127         for (var i = buttons.length - 1; i >= 0; --i){
128             var $aEl = $(document.createElement('a'));
129             /*eslint no-script-url: 0*/
130             $aEl.html(buttons[i].text)
131                 .addClass('k-dialog-button')
132                 .addClass(buttons[i].className)
133                 .attr({href:'javascript:;'})
134                 .on('click', buttons[i].click)
135                 .kendoButton();
136             $buttonsArea.append($aEl);
137         }
138 
139         this.wrapper.append($buttonsArea);
140 
141         return $buttonsArea;
142     }
143 });
144 
145 kendo.ui.plugin(dialog);

 

dialog.html

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4     <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
 5     <link rel="stylesheet" type="text/css" href="kendo/styles/kendo.common.min.css" />
 6     <link rel="stylesheet" type="text/css" href="style/dialog.css" />
 7 </head>
 8 <body>
 9     <script type="text/javascript" charset="utf-8" src="http://cdn.staticfile.org/jquery/2.0.0/jquery.min.js"></script>
10     <script type="text/javascript" charset="utf-8" src="kendo/js/kendo.chopper.min.js"></script>
11     <script type="text/javascript" charset="utf-8" src="kendo/js/kendo.chopper.min.js"></script>
12     <script type="text/javascript" charset="utf-8" src="kendo/js/cultures/kendo.messages.zh-CN.js"></script>
13     <script type="text/javascript" charset="utf-8" src="kendo/js/cultures/kendo.culture.zh-CN.min.js"></script>
14     <div id="dialog"></div>
15     <script src="js/dialog.js"></script>
16     <script>
17         var dialog = $('#dialog').kendoGDialog({title:"弹窗"}).data('kendoGDialog');
18     </script>
19 </body>
20 </html>

 

 

附录:

属性:

  含义 类型 default 例子
content 弹出内容 string,function 宿主元素的内容

$("#dialog").kendoGDialog({

  content: {

    url: "/userDetails",

    dataType: "json",

    template: "User name: #= data.username #"

  }

});

iframe 是否已iframe方式显示弹窗 bool FALSE  
onOk 点击确定执行的事件 function  

var dialog = $('#dialog').kendoGDialog({

            onOk: function() {

                dialog.close();

            }

        }).data('kendoGDialog');

okText 确定按钮文本 string '确定'  
cancelText 取消按钮文本 string '取消'  
defaultButtons 默认显示按钮 string('OK' || 'OK_CANCEL' || 'CANCEL' || 'NULL') 'OK_CANCEL'  
extraButtons 自定义的按钮 array

var dialog = $('#dialog').kendoGDialog({

            extraButtons: [{

                text:'按钮', className: '', click:function(){

                  

                }

            }]

        }).data('kendoGDialog');

appendTo 将弹窗插入到 string 'body'  
height 弹窗高度 number    
width 弹窗宽度 number    
minWidth 弹窗最小宽度 number 500  
maxWidth 弹窗最大宽度 number    
minHeight 弹窗最小高度 number 200  
maxHeight 弹窗最大高度 number    
visible 弹窗是否可见 bool TRUE  
position 弹窗位置 Object  

$("#dialog").kendoGDialog({

  position: {

    top: 100,

    left: 200

  }

})

resizable 重置弹窗大小 bool TRUE  
actions 弹窗工具组件 array(

"Close", "Refresh", "Minimize", and "Maximize"

['Close']  
title 弹窗标题 string ""  
autohide 自动关闭 bool FALSE  
time 自动关闭时间 number 1000(ms)  
draggable 是否可以拖动 bool TRUE  
resize 当改变弹窗大小时触发事件 function    
refresh 当内容加载完成或者点击刷新按钮内容加载完成时触发事件 function    
open 打开弹窗触发事件 function    
error 当异步加载内容出错时触发事件 function    
dragstart 开始移动弹窗时触发事件 function    
dragend 结束移动弹窗时触发事件 function    
deactivate 当弹窗关闭结束之后执行事件 function    
close 关闭弹窗时执行事件 function    
activate 当弹窗打开之后执行的事件 function    

 

方法: 

方法 含义

例子dialog = $('#dialog').data('kendoGDialog')

open 打开弹窗 dialog.open();
center 设置弹窗居中 dialog.center();
close 关闭弹窗 dialog.close();
destroy 销毁弹窗 dialog.destroy();
refresh 刷新弹窗内容 dialog.refresh();
setOptions 设置弹窗参数

dialog.setOptions({

            title: '标题'

});

content 设置弹窗内容 dialog.content('弹窗内容');
maximize 最大化 dialog.maximize();
minimize 最小化 dialog.minimize();
title 弹窗标题 dialog.title();

 

注意:

    工具栏的图片是我自己做的,制作了一个关闭按钮,刷新、最大化、最小化没有做。如果项目中引用了kendo-ui就不需要这个了。同一个弹窗不能多次创建,可以先销毁在创建。

 

下载代码

 

相关文章
|
6月前
|
编解码 前端开发 Java
【HarmonyOS Next之旅】基于ArkTS开发(二) -> UI开发三
本文介绍了基于声明式UI范式的图形绘制与动画效果实现方法,涵盖绘制图形、添加动画效果及常见组件说明三部分内容。在绘制图形部分,详细讲解了如何通过Circle组件为食物成分表添加圆形标签,以及使用Path组件结合SVG命令绘制自定义图形(如应用Logo)。动画效果部分则展示了如何利用animateTo实现闪屏动画,包括渐出、放大效果,并设置页面跳转;同时介绍了页面间共享元素转场动画的实现方式。最后,文章列举了声明式开发范式中的各类组件及其功能,帮助开发者快速上手构建复杂交互页面。
248 11
|
5月前
|
开发者 容器
44.[HarmonyOS NEXT RelativeContainer案例一] 掌握组件锚点布局:打造灵活精准的UI定位系统
在HarmonyOS NEXT的UI开发中,精确控制组件位置是构建复杂界面的关键。RelativeContainer作为一种强大的布局容器,通过锚点系统提供了精确定位能力,使开发者能够创建出灵活且精准的UI布局。本教程将详细讲解如何使用RelativeContainer的锚点布局功能,帮助你掌握这一核心技术。
203 4
|
5月前
|
设计模式 缓存 容器
06.HarmonyOS Next UI进阶:Text组件与视觉样式完全指南
在HarmonyOS Next应用开发中,Text组件是最基础也是最常用的UI元素之一。它不仅用于显示文本内容,还可以通过丰富的样式属性实现各种视觉效果。掌握Text组件的样式设置,是构建精美UI界面的基础技能。
298 1
|
2月前
|
存储 开发者 容器
鸿蒙 HarmonyOS NEXT星河版APP应用开发-ArkTS面向对象及组件化UI开发使用实例
本文介绍了ArkTS语言中的Class类、泛型、接口、模块化、自定义组件及状态管理等核心概念,并结合代码示例讲解了对象属性、构造方法、继承、静态成员、访问修饰符等内容,同时涵盖了路由管理、生命周期和Stage模型等应用开发关键知识点。
292 1
鸿蒙 HarmonyOS NEXT星河版APP应用开发-ArkTS面向对象及组件化UI开发使用实例
|
2月前
|
Linux Go iOS开发
IDA 9.2 发布:Golang 改进、新 UI 组件、类型解析等
IDA Pro 9.2 (macOS, Linux, Windows) - 强大的反汇编程序、反编译器和多功能调试器
636 0
|
5月前
|
JavaScript 前端开发 UED
【HarmonyOS Next之旅】基于ArkTS开发(二) -> UI开发四
本文介绍了Web组件开发与性能优化的相关内容。在Web组件开发部分,涵盖创建组件、设置样式与属性、添加事件和方法以及场景示例,如动态播放视频。性能提升方面,推荐使用数据懒加载、条件渲染替代显隐控制、Column/Row替代Flex、设置List组件宽高及调整cachedCount减少滑动白块等方法,以优化应用性能与用户体验。
239 56
|
5月前
|
编解码 UED 开发者
【HarmonyOS Next之旅】基于ArkTS开发(二) -> UI开发之常见布局
本文主要介绍了自适应布局与响应式布局的相关内容。自适应布局部分涵盖线性布局、层叠布局、弹性布局和网格布局,详细说明了各布局的特性及使用方法,例如线性布局中的排列、拉伸与缩放,弹性布局的方向、换行与对齐方式等。响应式布局则重点讲解了栅格系统和媒体查询,阐述如何通过栅格组件和媒体查询条件实现不同设备上的适配效果。这些技术帮助开发者灵活应对多尺寸屏幕的设计需求,提升用户体验。
333 55
|
4月前
|
Web App开发 前端开发 JavaScript
Element UI框架中自定义input组件的placeholder样式。
确保这些样式在你的应用程序CSS文件中定义,且该文件已正确加载到项目中。通过以上方法,可以控制Element UI组件中input的placeholder样式,使其满足特定的设计要求。这些更改都是基于CSS伪元素进行的,因此并不会对DOM结构产生改变,保持了原有结构的简洁和高效。
449 12
|
5月前
|
移动开发 开发者
仓颉开发语言入门教程:常见UI组件介绍和一些问题踩坑
仓颉开发语言即将发布一周年,虽已有知名App应用,但教程稀缺且官网文档不够完善。幽蓝君推出系列教程,从零开始系统讲解移动开发。本期介绍常用UI组件:按钮、文本、图片、输入框与搜索框的使用方法及注意事项,帮助开发者快速上手仓颉语言。
|
5月前
|
JavaScript 前端开发 开发者
09.HarmonyOS Next数据驱动UI开发:ForEach与动态渲染完全指南(上)
在现代前端开发中,数据驱动UI已成为主流开发范式。HarmonyOS Next的ArkTS语言和声明式UI框架完美支持这一理念,使开发者能够以更高效、更直观的方式构建复杂应用。
175 1

热门文章

最新文章

下一篇
oss云网关配置