Javascript原生插件开发
来源:互联网 发布:淘宝网怎么开企业店铺 编辑:程序博客网 时间:2024/06/05 10:53
js原生插件开发基本雏形:
function(window,document){ var MaskShare = function(){ }; MaskShare.prototype = {}; window.MaskShare = MaskShare;}(window,document));
举例:
点击某个元素,弹出一个遮罩层,点击遮罩层将遮罩层去掉。
因此可以分析出,至少需要一个参数,也就是我们需要知道点击谁弹出弹出层,另外我们还需要配置一些默认参数。
(function(window,document){ var MaskShare = function(targetDom,options){ // 判断是用函数创建的还是用new创建的。这样我们就可以通过MaskShare("dom") 或 new MaskShare("dom")来使用这个插件了 if(!(this instanceof MaskShare))return new MaskShare(targetDom,options); // 参数合并 this.options = this.extend({ // 这个参数以后可能会更改所以暴露出去 imgSrc:"../static/img/coupon-mask_1.png" },options); // 判断传进来的是DOM还是字符串 if((typeof targetDom)==="string"){ this.targetDom = document.querySelector(targetDom); }else{ this.targetDom = targetDom; } var boxDom = document.createElement("div"); var imgDom = document.createElement("img"); // 设置默认样式 注意将z-index值设置大一些,防止其他元素层级比遮罩层高 boxDom.style.cssText = "display: none;position: absolute;left: 0;top: 0;width: 100%;height:100%;background-color: rgba(0,0,0,0.8);z-index:9999;"; imgDom.style.cssText = "margin-top:20px;width: 100%;"; // 追加或重设其样式 if(this.options.boxDomStyle){ this.setStyle(boxDom,this.options.boxDomStyle); } if(this.options.imgDomStyle){ this.setStyle(imgDom,this.options.imgDomStyle); } imgDom.src = this.options.imgSrc; boxDom.appendChild(imgDom); this.boxDom = boxDom; // 初始化 this.init(); }; MaskShare.prototype = { init:function(){ this.event(); }, extend:function(obj,obj2){ for(var k in obj2){ obj[k] = obj2[k]; } return obj; }, setStyle:function(dom,objStyle){ for(var k in objStyle){ dom.style[k] = objStyle[k]; } }, event:function(){ var _this = this; this.targetDom.addEventListener("click",function(){ document.body.appendChild(_this.boxDom); _this.boxDom.style.display = "block"; // 打开遮罩层的回调 _this.options.open&&_this.options.open(); },false); this.boxDom.addEventListener("click",function(){ this.style.display = "none"; // 关闭遮罩层的回调 _this.options.close&&_this.options.close(); },false); } }; // 暴露方法 window.MaskShare = MaskShare;}(window,document));
MaskShare(".immediately",{ imgSrc:"../static/img/loading_icon.gif", boxDomStyle:{ opacity:".9" }, imgDomStyle:{ opacity:".8" }, open:function(){ console.log("show"); }, close:function(){ console.log("close"); }});
js原生插件开发几种写法:
1.面向对象方式:调用的时候使用new创建对象
var Auto=Auto||{};(function(){var plugin=function(options){this.options=this.extend({xxxxx},options);//暴露一些apiplugin.prototype={init:function(){},extend:function(){}}Auto.Plu=Plugin;})();var p=new Auto.Plu(xxxx);或
var Auto;(function(Auto){var plugin=(function(){function plugin(options){this.name='xiaosan';this.age=11;};//暴露一些apiplugin.prototype.show=function(str){alert(str);};plugin.prototype.set=function(name){this.name=name;alert(this.name);}rturn plugin;})();Auto.Plu=plugin;})(Auto||(Auto={}));var plugin=new Auto.Plu(xxx);plugin.show('111');如:
var RongIMLib;(function (RongIMLib) { var UserDataProvider = (function () { function UserDataProvider(options) { this.opersistName = 'RongIMLib'; this.keyManager = 'RongUserDataKeyManager'; this._host = ""; this.prefix = "rong_"; this.oPersist = document.createElement("div"); this.oPersist.style.display = "none"; this.oPersist.style.behavior = "url('#default#userData')"; document.body.appendChild(this.oPersist); this.oPersist.load(this.opersistName); } UserDataProvider.prototype.setItem = function (key, value) { key && key.indexOf(this.prefix) == -1 && (key = this.prefix + key); this.oPersist.setAttribute(key, value); var keyNames = this.getItem(this.keyManager); keyNames ? keyNames.indexOf(key) == -1 && (keyNames += ',' + key) : (keyNames = key); this.oPersist.setAttribute(this.prefix + this.keyManager, keyNames); this.oPersist.save(this.opersistName); }; UserDataProvider.prototype.getItem = function (key) { key && key.indexOf(this.prefix) == -1 && (key = this.prefix + key); return key ? this.oPersist.getAttribute(key) : key; }; UserDataProvider.prototype.removeItem = function (key) { key && key.indexOf(this.prefix) == -1 && (key = this.prefix + key); this.oPersist.removeAttribute(key); this.oPersist.save(this.opersistName); var keyNames = this.getItem(this.keyManager), keyNameArray = keyNames && keyNames.split(',') || []; for (var i = 0, len = keyNameArray.length; i < len; i++) { if (keyNameArray[i] == key) { keyNameArray.splice(i, 1); } } this.oPersist.setAttribute(this.prefix + this.keyManager, keyNameArray.join(',')); this.oPersist.save(this.opersistName); }; UserDataProvider.prototype.getItemKey = function (composedStr) { var item = null, keyNames = this.getItem(this.keyManager), keyNameArray = keyNames && keyNames.split(',') || [], me = this; if (keyNameArray.length) { for (var i = 0, len = keyNameArray.length; i < len; i++) { if (keyNameArray[i] && keyNameArray[i].indexOf(composedStr) > -1) { item = keyNameArray[i]; break; } } } return item; }; UserDataProvider.prototype.clearItem = function () { var keyNames = this.getItem(this.keyManager), keyNameArray = [], me = this; keyNames && (keyNameArray = keyNames.split(',')); if (keyNameArray.length) { for (var i = 0, len = keyNameArray.length; i < len; i++) { keyNameArray[i] && me.removeItem(keyNameArray[i]); } me.removeItem(me.keyManager); } }; UserDataProvider.prototype.onOutOfQuota = function () { return 10 * 1024 * 1024; }; return UserDataProvider; }()); RongIMLib.UserDataProvider = UserDataProvider;})(RongIMLib || (RongIMLib = {}));var provider = new RongIMLib.UserDataProvider(optionsxxx);
2.闭包方式:调用是不用使用new
var Auto=Auto||{};(function(){var plugin=(function(){var _options={default_word:'ddd'};function _firstFunc(str){alert(str);};function _secondFunc(str){alert(str);};return {//暴露的一些apifirstFunc:_firstFunc,secondFunc:_secondFunc};})();Auto.Plu=plugin;})();Auto.Plu.firstFunc('xx');变种:
var Auto=Auto||{};(function(){var _options={default_word:'ddd'};function test(){alert(11)};//暴露一些apivar _plugin={firstFunc:function(str=_options.default_word){alert(str);return this;},secondFunc:function(){alert('second');return this;}}Auto.Plu=_plugin;})();Auto.Plu.firstFunc('11').secondFunc();
Demo:
http://www.cnblogs.com/cboyce/p/6056562.html
阅读全文
0 0
- Javascript原生插件开发
- 原生Javascript插件封装开发实践
- 原生javascript 轮播图插件
- 如何开发原生的 JavaScript 插件(知识点+写法)
- 原生js插件开发入门
- 原生javascript实现的分页插件pagenav
- Javascript插件开发导读
- 【学习笔记】在原生javascript中使用ActiveX和插件
- 【学习笔记】在原生javascript中使用ActiveX和插件
- 开源原生JavaScript插件-CJPCD(省市区联动)
- 原生javascript
- 原生javascript
- photoSlider-原生js移动开发轮播图、相册滑动插件
- cordova plugin 安卓原生插件开发笔记(一)
- Unity原生平台插件开发简介(Android/iOS)
- dcloud离线打包内容分享(第三插件开发、h5到原生,原生到h5)
- [原生js] 前端开发必须掌握的七个JavaScript技巧
- 你可能不需要 jQuery!使用原生 JavaScript 进行开发
- 自学编程需要注意那几点
- (Hadoop学习笔记-3) HDFS工作原理
- jetty-maven插件启动失败解决方法,java.util.zip.ZipException: error in opening zip file
- 潜伏期
- 各类排序算法的理解
- Javascript原生插件开发
- 创建GitHub技术博客
- mnist_autoencoders
- centos下安装pip时失败
- ecilpse配置jvm内存大小
- [随手写一个] 字符串实现
- IDEA注册
- 记一次RegionServer节点的宕机事故[hbase1.1.2]
- 如何刷爆wordpress的数据库