Js插件开发
简易JS插件开发,本文效果是一个简单的弹出层,意在记录插件的封装Demo。
完整源码压缩包:demo.rar
效果图(如下):

插件脚本:
/**
* 节点配置属性方式配置参数:专业的做法是配置到,每一个需要初始化为插件的那个html标签的属性上面(这个属性的value必须是标准的json字符串),
* 这样做的好处是,当存在多个需要初始化为插件的标签时,可以配置各自想要的参数
* 例如:<div data-setting="{'param1':1,'param2':2}"></div>
* Created by TonyZeng on 2016/7/6.
*/
/**前面的这个分号,用于避免其他插件没有分号闭合导致在压缩代码后导致语法的错误。*/
;(function ($) {
/**这里相当于一个构造函数,当new Demo(demo)时,就会传递参数过来
* 不过,我们没有采用new的方式来初始化插件,我们定义了一个init方法来初始化,在init方法中,我们用的其实也就是这个
* 构造函数来初始化,init里面用each来循环初始化,将div节点对象(this)指针作为参数传入构造函数的参数列表
*/
var Demo = function (demo) {
var self = this;
//保存节点对象,(获取自定义配置)getSetting方法会用它来获取节点里面的属性,比如自定义配置属性
this.demo = demo;
//默认配置
this.setting = {"maskDivId": "xxx", "showDivId": "xxx", "closeButtonId": "xxx"};
//用自定义配置merge默认配置
$.extend(this.setting, this.getSetting());
//事件绑定
$(".demo").bind("click", function (e) {
self.showdiv();
//阻止事件冒泡出现(冒泡事件)
e.stopPropagation();
});
$("#" + this.setting.closeButtonId).bind("click", function (e) {
self.hidediv();
//阻止事件冒泡出现(冒泡事件)
e.stopPropagation();
}
);
};
Demo.prototype = {
//获取自定义配置
getSetting: function () {
var setting = this.demo.attr("data-setting");
//如果这个节点属性存在,并且不为空的话就转成json对象传出去
if (setting && setting != null) {
return $.parseJSON(setting);
} else {
return {};
}
},
showdiv: function () {
document.getElementById(this.setting.showDivId).style.display = "block";
document.getElementById(this.setting.maskDivId).style.display = "block";
},
hidediv: function () {
document.getElementById(this.setting.showDivId).style.display = 'none';
document.getElementById(this.setting.maskDivId).style.display = 'none';
}
};
//(当页面有多个地方需要初始化成插件时)为了避免用new的方式来初始化插件的繁琐,我们用一个init方法来专门处理初始化
Demo.init = function (list) {
//这个this指向Demo插件对象
var _this_ = this;
//用each循环初始化传入的元素为插件
list.each(function () {
//这个this指向each循环里面的元素对象
new _this_($(this));
});
};
//全局注册
window["Demo"] = Demo;
})(jQuery);
$(function () {
Demo.init($(".demo"));
});
HTML:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>DIV CSS遮罩层</title>
<link type="text/css" rel="stylesheet" href="demo.css"/>
</head>
<body>
<input id="btnshow" class="demo" type="button" value="Show"
data-setting='{"maskDivId":"mask","showDivId":"show","closeButtonId":"btnclose"}'/>
<div id="mask">遮罩层</div>
<div id="show">
<input id="btnclose" type="button" value="Close"/>
</div>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="demo.js"></script>
</body>
</html>
Css:
#mask {
display: none;
position: absolute;
top: 0%;
left: 0%;
width: 100%;
height: 100%;
background-color: black;
z-index:;
-moz-opacity: 0.7;
opacity: .70;
filter: alpha(opacity=70);
}
#show {
display: none;
position: absolute;
top: 25%;
left: 22%;
width: 53%;
height: 49%;
padding: 8px;
border: 8px solid #E8E9F7;
background-color: white;
z-index:;
overflow: auto;
}
Js插件开发的更多相关文章
- [js插件开发教程]一步步开发一个可以定制配置的隔行变色小插件
隔行变色功能,不用js,直接用css伪类就可以做,这个实例可以作为js插件开发很好的入门级实例.本文实现的隔行变色包括以下功能: 1,支持2种常用结构共存( div元素 和 表格类型 ) 2,一个页面 ...
- [js插件开发教程]实现一个比较完整的开源级选项卡插件
在这篇文章中,我实现了一个基本的选项卡功能:请猛击后面的链接>> [js插件开发教程]原生js仿jquery架构扩展开发选项卡插件. 还缺少两个常用的切换(自动切换与透明度渐变),当然 ...
- react.js插件开发,x-dailog弹窗浮层组件
react.js插件开发,x-dailog弹窗浮层组件 我认为,每一个组件都应该有他自带的样式和属性事件回调配置.所以我会给x-dialog默认一套简单的样式,和各种默认的配置项.所有react插件示 ...
- [js插件开发教程]原生js仿jquery架构扩展开发选项卡插件
jquery插件一般是这么干的: $.fn.插件名称 = function(){}, 把插件的名称加在.fn上,在源码里面实际上是扩展到构造函数的原型对象上,如果你没看过jquery的源代码,或者你曾 ...
- [js插件开发教程]定制一个手风琴插件(accordion)
本文带来一个垂直方向的手风琴插件开发,可以定制的功能如下: contentClass : 'panel', //面板样式navClass : 'nav', //导航样式activeClass : 'a ...
- 分享我对JS插件开发的一些感想和心得
本文阅读目录: •起因•如何开发一个轻量级的适用性强的插件•总结 起因 如果大家平时做过一些前端开发方面的工作,一定会有这样的体会:页面需要某种效果或者插件的时候,我们一般会有两种选择: 1.上网查找 ...
- js插件开发的一些感想和心得
起因 如果大家平时做过一些前端开发方面的工作,一定会有这样的体会:页面需要某种效果或者插件的时候,我们一般会有两种选择:1.上网查找相关的JS插件,学习其用法2.自己造轮子,开发插件. 寻找存在的插件 ...
- Vue.js插件开发
Vue.js插件是为应用添加全局功能的一种强大而且简单的方式.插件的用途很广泛,从全局组件,到为应用添加一些额外的功能.如路由(Vue Router),存储在应用程序里的不可变数据(Vuex). 一般 ...
- Vue.js 插件开发详解
前言 随着 Vue.js 越来越火,Vue.js 的相关插件也在不断的被贡献出来,数不胜数.比如官方推荐的 vue-router.vuex 等,都是非常优秀的插件.但是我们更多的人还只停留在使用的阶段 ...
随机推荐
- LeetCode 笔记总结
前言 之前把一些LeetCode题目的思路写在了本子上,现在把这些全都放到博客上,以后翻阅比较方便. 题目 99.Recover Binary Search Tree 题意 Two elements ...
- 自定义cell设置现价,原价(加横线)
原价,现价分别是连个label.这两个label不能直接限制死他们的宽度,因为他们的宽度不确定,而由于lable的特殊性,不设置它的宽度约束时,宽度取决于文字的内容,所以两个lable的约束设置好一些 ...
- node c++多线程插件 第一天 c++线程相关函数
因为不会c++,今天主要是学习了一下c++的东西,感觉非常麻烦. 目前知道了c++里创建线程createThread,返回一个内核对象(HANDLE),我的理解是,c++中系统层面上的操作(线程,文件 ...
- 1088: [SCOI2005]扫雷Mine
1088: [SCOI2005]扫雷Mine Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1635 Solved: 979[Submit][Sta ...
- 新学期的第一节Android课
老师问,你们认为师生关系是什么样子的? 机智的我很快想到啦:或许是猫和老鼠的关系吧,嘿嘿O(∩_∩)O
- yii 常用一些调用 (增加中)
调用YII框架中 jquery:Yii::app()->clientScript->registerCoreScript('jquery'); framework/web/j ...
- UI自动化测试表单重要代码
public class frame { public static void main(String[] args) { // TODO Auto-generated method stub Sys ...
- 【Unity游戏开发】浅谈 NGUI 中的 UIRoot、UIPanel、UICamera 组件
简介 马三最近换到了一家新的公司撸码,新的公司 UI 部分采用的是 NGUI 插件,而之前的公司用的一直是 Unity 自带的 UGUI,因此马三利用业余时间学习了一下 NGUI 插件的使用,并把知识 ...
- iOS开发之数据存储之SQLite3(包括FMDB)
1.概述 SQLite3是一款开源的嵌入式关系型数据库,可移植性好.易使用.内存开销小. SQLite3是无类型的,意味着你可以保存任何类型的数据到任意表的任意字段中.比如下列的创表语句是合法的: c ...
- 解决mysql启动时报The server quit without updating PID file 的错误(转)
1.一般是权限问题,把用户和组改为mysql就可以了. chown -R mysql:mysql /var/lib/mysql 2.在启动mysql时报下列错误 [root@mysqld2 ~]# ...