开发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就不需要这个了。同一个弹窗不能多次创建,可以先销毁在创建。

 

下载代码

 

相关文章
|
17天前
「Mac畅玩鸿蒙与硬件46」UI互动应用篇23 - 自定义天气预报组件
本篇将带你实现一个自定义天气预报组件。用户可以通过选择不同城市来获取相应的天气信息,页面会显示当前城市的天气图标、温度及天气描述。这一功能适合用于动态展示天气信息的小型应用。
122 38
|
8天前
|
人工智能 开发框架 JavaScript
LowCodeEngine:阿里开源的企业级低代码开发平台,提供预制的 UI 组件和模板,覆盖完整的研发周期
LowCodeEngine 是阿里巴巴开源的低代码开发框架,旨在通过拖拽、配置等简单操作,帮助开发者快速构建复杂的系统页面,提升开发效率和质量。
46 4
LowCodeEngine:阿里开源的企业级低代码开发平台,提供预制的 UI 组件和模板,覆盖完整的研发周期
|
13天前
|
移动开发 前端开发 Java
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
JavaFX是Java的下一代图形用户界面工具包。JavaFX是一组图形和媒体API,我们可以用它们来创建和部署富客户端应用程序。 JavaFX允许开发人员快速构建丰富的跨平台应用程序,允许开发人员在单个编程接口中组合图形,动画和UI控件。本文详细介绍了JavaFx的常见用法,相信读完本教程你一定有所收获!
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
|
2月前
|
前端开发 搜索推荐 开发者
「Mac畅玩鸿蒙与硬件20」鸿蒙UI组件篇10 - Canvas组件自定义绘图
Canvas 组件在鸿蒙应用中用于绘制自定义图形,提供丰富的绘制功能和灵活的定制能力。通过 Canvas,可以创建矩形、圆形、路径、文本等基础图形,为鸿蒙应用增添个性化的视觉效果。本篇将介绍 Canvas 组件的基础操作,涵盖绘制矩形、圆形、路径和文本的实例。
89 12
「Mac畅玩鸿蒙与硬件20」鸿蒙UI组件篇10 - Canvas组件自定义绘图
|
2月前
|
搜索推荐 前端开发 开发者
「Mac畅玩鸿蒙与硬件19」鸿蒙UI组件篇9 - 自定义动画实现
自定义动画让开发者可以设计更加个性化和复杂的动画效果,适合表现独特的界面元素。鸿蒙提供了丰富的工具,支持通过自定义路径和时间控制来创建复杂的动画运动。本篇将带你学习如何通过自定义动画实现更多样化的效果。
88 11
|
2月前
|
UED 开发者
「Mac畅玩鸿蒙与硬件18」鸿蒙UI组件篇8 - 高级动画效果与缓动控制
高级动画可以显著提升用户体验,为应用界面带来更流畅的视觉效果。本篇将深入介绍鸿蒙框架的高级动画,包括弹性动画、透明度渐变和旋转缩放组合动画等示例。
89 12
「Mac畅玩鸿蒙与硬件18」鸿蒙UI组件篇8 - 高级动画效果与缓动控制
|
2月前
|
UED
「Mac畅玩鸿蒙与硬件31」UI互动应用篇8 - 自定义评分星级组件
本篇将带你实现一个自定义评分星级组件,用户可以通过点击星星进行评分,并实时显示评分结果。为了让界面更具吸引力,我们还将添加一只小猫图片作为评分的背景装饰。
80 6
|
2月前
|
UED
「Mac畅玩鸿蒙与硬件17」鸿蒙UI组件篇7 - Animation组件基础
在应用开发中,动画效果可以增强用户体验。鸿蒙框架提供了 translate、scale 和 rotate 等动画功能,允许对组件进行平移、缩放和旋转等操作。本篇将介绍 Animation 组件的基础知识和示例代码。
104 10
|
2月前
|
前端开发 开发者
「Mac畅玩鸿蒙与硬件21」鸿蒙UI组件篇11 - Canvas 组件的静态进阶应用
在鸿蒙应用开发中,Canvas 组件不仅用于基础绘图,还提供了处理复杂路径和渐变效果的多种手段,帮助开发者实现精美的静态图形。本篇将介绍如何在 Canvas 中绘制复杂路径、创建渐变填充效果。
64 7
「Mac畅玩鸿蒙与硬件21」鸿蒙UI组件篇11 - Canvas 组件的静态进阶应用
|
2月前
|
大数据 UED
「Mac畅玩鸿蒙与硬件16」鸿蒙UI组件篇6 - List和Grid组件展示数据列表
List 和 Grid 是鸿蒙开发中的核心组件,用于展示动态数据。List 适合展示垂直或水平排列的数据列表,而 Grid 则适用于展示商品或图片的网格布局。本篇将展示如何封装组件,并通过按钮实现布局切换,提升界面的灵活性和用户体验。
91 9