编写用户可定制的jQuery插件(一)
2018-02-08 17:38
579 查看
绪论
这几天像找了魔一样,查各种资料,自己编写了一个div弹出框。以前只是在用其它开源的jQuery插件,不是很清楚具体是怎么实现的,所以自己动手,学到了更多的东西 O(∩_∩)O哈哈~。jQuery模板
;(function($){ $.fn.自定义插件名 = function(opt) { var defaults = { // 默认值 }; // 整合用户自定义数据 var options = $.extend({}, defaults, opt); // 处理 this.each(function(){ }); return this; }; })(jQuery);
设计弹框
可自定义,比如:宽度,高度。。。通过特定方法可显示弹出框。
弹框右上角有关闭按钮。
实现遮罩。
弹框右下角有确定和取消按钮,根据自定义时设置方法的返回值,判断窗口能否关闭。
实现 yangDialog.js
;(function($, window, document, undefined){ $.fn.yangDialog = function(opt) { var $element = this; // 初始数据 var defaultY = { 'height': '150px', 'width': '200px', 'title': '演示弹窗', onOpen: function() { }, onClose: function() { } }; // 整合用户自定义数据 var optionsY = $.extend({}, defaultY, opt); // 计算弹出框高度 function A() { var a = Number(optionsY.height.replace('px','')) < 150 ? 150 : ( Number(optionsY.height.replace('px','')) > 500 ? 500 : Number(optionsY.height.replace('px',''))); // console.log('A() -- ' + a); return a; } // 计算弹出框宽度 function B(){ var a = Number(optionsY.width.replace('px','')) < 200 ? 200 : ( Number(optionsY.width.replace('px','')) > 1000 ? 1000 : Number(optionsY.width.replace('px',''))); return a; } // 计算弹框离顶部距离 function C(){ var a = (window.innerHeight - A())/2; return a; } // 计算弹框离左侧距离 function D(){ var a = (window.innerWidth - B())/2; return a; } // 处理div头部内容 function E() { var a = '<div style="height:45px;background:#00B2EE;padding: 8px 15px 8px 10px;">' + '<div style="height:29px;width:100%;margin:0 auto;">' + '<table><tr><td style="width:100%;"><span style="color:#FFFFFF;font-size:18px;"><b>'+K()+'</b></span></td>' + '<td align="right"><span style="color:#FFFFFF;font-size:20px;"><b>' + '<a style="text-decoration:none;cursor: pointer;color:#FFFFFF;" id="aClose">×</a></b></span></td></tr></table>' + '</div></div>'; return a; } // 处理div尾部内容 function F() { var a = '<div style="height:45px;background:#00B2EE;padding: 10px 20px;">' + '<div style="margin:0 auto;" align="right">' + '<table><tr><td><input id="bOK" type="button" value="确认"></td><td> </td>' + '<td><input id="bClose" type="button" value="取消"></td></tr></table>' + '</div></div>'; return a; } // 处理div中间内容 function G(b) { var a = '<div style="overflow:auto;background:#FFFFFF;height:'+(A() - 90)+'px">'+b.html()+'</div>'; return< 4000 /span> a; } // 整合div内容 function H(b) { var a = E() + G(b) + F(); b.empty(); b.append(a); return a; } // 遮罩div function I() { var a = '<div id="zhezhao" style="position:absolute;top:0px;left:0px;width:100%;height:100%;opacity:0.5;z-index:450;background:#000;"></div>'; $("body").append(a); return a; }; // 关闭方法 function J() { $('#zhezhao').hide(); $element.hide(); } // 处理title长度问题 function K() { var a = optionsY.title.replace(/[\u0391-\uFFE5]/g,"aa").length; var b = B()*6/150; if(a > b){ return optionsY.title.substring(0, b); } return optionsY.title; } // 处理 this.each(function(){ // 处理样式 $element.css({ 'width': B() + 'px', 'height': A() + 'px', 'top': C() + 'px', 'left': D() + 'px', 'position': 'absolute', 'z-index': '500' }); // 处理内容 H($element); // 右上角关闭 $('#aClose').bind('click',function(){J();}); // 确定按钮 $('#bOK').bind('click',function(){ if(optionsY.onOpen()){ J(); } }); // 取消按钮 $('#bClose').bind('click',function(){J();}); }); I(); J(); return $element,{ // 可外部访问方法 open: function() { $('#zhezhao').show(); $element.show(); }, close: J }; }; })(jQuery, window, document);
jsp页面调用
<script src="../yangJS/yangDialog.js"></script> <body> <div class="container"> <jsp:include page="../ui_head.jsp" /> <div class="row clearfix"> <div class="col-md-12 column"> <br> <div class="page-header"> <button type="button" class="btn btn-info" onclick="showAlert()">打开弹框</button> <button type="button" class="btn btn-info" onclick="closeAlert()">关闭弹框</button> </div> <br> <br> </div> </div> </div> <div id="myAlert"> <a href="http://www.baidu.com?id=1" class="a1">连接地址1:</a> <br> <br> <br> <br> <br> <br> <br> <br><br><br><br><br><br> <br><br><br><br> <a href="http://www.baidu.com?id=2" class="a1">连接地址2:</a> </div> </body> <script type="text/javascript"> var d; $(document).ready(function(){ d = $("#myAlert").yangDialog({ height: '250px', width: '400px', title: '我的演示弹窗', onOpen: function() { return true; // 可关闭 // return false; //不可关闭 }, onClose: function() { } }); }); function showAlert(){ d.open(); } </script>
效果
总结
通过这几天的努力,扩展了自己的知识板块,美中不足样式做的不是很好,不过基本需要的功能实现了,还有我这里绑定方法部分和遮罩部分使用了固定的ID,这是不对的,容易和其它插件或者自定义的ID冲突,解决方法是使用随机数对这些ID进行命名。这次也对jQuery插件的编写入了门,以后有时间会继续写一些小插件,谢谢大家支持。年末了,能稳住躁动的心,学点技术真不容易。
最后,祝大家新年快乐,万事如意!!!
不墨迹了,溜了溜了。
(若有什么错误,请留言指正,3Q)
相关文章推荐
- jQuery插件编写
- jQuery插件开发的两种方法及$.fn.extend 定制列表
- jQuery插件编写
- jquery插件-表单验证插件-提示信息中文化与定制提示信息
- jQuery插件编写之我见
- 用jQuery插件来提升SharePoint列表表单用户体验
- 提升用户体验的最佳免费 jQuery 表单插件
- 自己编写jQuery动态引入js文件插件 (jquery.import.dynamic.script)
- jquery 插件编写
- 【 Jquery插件】引导用户如何操作网站功能的向导
- jQuery插件编写:Why use the Widget Factory(四)
- 安装aptana插件让myeclise编写css和js,jquery有提示!
- 编写jQuery插件
- jQuery插件编写及链式编程模型小结
- [置顶] 编写自己的JQUERY插件
- 编写jQuery插件来扩展checkbox
- 《锋利的jQuery》读书笔记 -- 编写jQuery插件
- jquery编写插件的方法
- 编写jQuery插件--实现返回顶部插件
- JavaScript代码编写尝试使用Vanilla JS 或者Jquery插件