JavaScript,封装库--插件

库主要是用来封装一般JavaScript的常规操作代码,而拖拽这种特效代码属于功能性代码,并不是必须的,所以这种类型的代码,我们建议另外封装,在需要的时候作为插件形式引入到库中,作为扩展。

在基础库设置一个extend()方法,来扩展插件

/** 插件入口,简单的理解就是通过extend()方法,向此基础库添加一个原型方法
* 此extend()方法,一般是给插件文件使用的,插件就是通过extend()方法,将插件方法添加到基础库原型的
* 接收两个参数
* 参数1是传入要添加的方法名称
* 参数2是此方法的执行函数(包含代码)
**/
feng_zhuang_ku.prototype.extend = function (name,fn) {
feng_zhuang_ku.prototype[name] = fn;
};

插件扩展方式,如:拖拽为列

/** tuo_zhuai()方法,将一个弹窗元素实现拖拽功能
* 注意:有参设置拖拽点区块,只有弹窗的这个拖拽点区块才能拖拽,无参整个弹窗可以拖拽
* 注意:一般需要在css文件将弹窗元素里的某一个区块光标设置成提示可以拖拽,如:cursor: move; (设置拖拽点)
* 有一个参数,参数是弹窗元素里的拖拽点区块的字符串class值(设置拖拽点的class值)设置后弹窗元素里的这个拖拽点区块才能拖拽
**/
//调用基础库extend()方法,创建基础库原型tuo_zhuai()方法
$().extend('tuo_zhuai', function (tuo_zhuai_dian) {
if (this.jie_dian.length == 1) {
var yan_su = null;
var sum = arguments.length;
for (var i = 0; i < this.jie_dian.length; i++) {
yan_su = this.jie_dian[i];
}
addEvent(yan_su, 'mousedown', function (e) {
if (trim(yan_su.innerHTML).length == 0)e.preventDefault();
var e1 = getEvent(e); //getEvent()函数库函数,跨浏览器获取事件对象,事件event对象,
var diffx = e1.clientX - yan_su.offsetLeft;
var diffy = e1.clientY - yan_su.offsetTop;
if (sum == 1) {
if (e.target.className === tuo_zhuai_dian) {
addEvent(document, 'mousemove', move);
addEvent(document, 'mouseup', up);
}
} else if (sum == 0) {
addEvent(document, 'mousemove', move);
addEvent(document, 'mouseup', up);
}
function move(e) {
var e2 = getEvent(e);
var left = e2.clientX - diffx;
var top = e2.clientY - diffy;
if (left < 0) {
left = 0;
} else if (left > getInner().width - yan_su.offsetWidth) {
left = getInner().width - yan_su.offsetWidth;
}
if (top < 0) {
top = 0;
} else if (top > getInner().height - yan_su.offsetHeight) {
top = getInner().height - yan_su.offsetHeight;
}
yan_su.style.left = left + 'px';
yan_su.style.top = top + 'px';
if (typeof yan_su.setCapture != 'undefined') {
yan_su.setCapture();
}
} function up() {
removeEvent(document, 'mousemove', move);
removeEvent(document, 'mouseup', up);
if (typeof yan_su.releaseCapture != 'undefined') {
yan_su.releaseCapture();
}
}
});
} else {
alert("将一个弹窗元素实现拖拽功能,只能设置一个弹窗元素,目前jie_dian数组里是多个元素请检查!")
}
return this;
});

插件说明

/**------------------------------------------------插件说明--------------------------------------------**/
/** 插件是通过基础库的extend()方法,向基础库原型添加的插件方法
* 前台使用说明:
* 1.获取到目标对象,执行插件方法,如:$().huo_qu_id('login');
* 2.页面引入插件js文件,如:<script type="text/javascript" src="feng_zhuang_ku/cha_jian/tuo_zhuai.js" charset="utf-8"></script>
**/
/**------------------------------------------------插件说明--------------------------------------------**/
tuo_zhuai()方法,将一个弹窗元素实现拖拽功能

最新文章

  1. [转载] linux查找目录下的所有文件中是否含有某个字符串
  2. sql如何做递归层次查询
  3. JQuery在循环中绑定事件的问题详解
  4. html5 canvas 笔记三(绘制文本和图片)
  5. JVM规范小结
  6. Sunday算法(字符串查找、匹配)
  7. 解决windows下eclipse中android项目关联android library project
  8. 【视频】零基础学Android开发:蓝牙聊天室APP(四)
  9. ubuntu安装iscsi
  10. 业务逻辑 : 未完 : easybook.com
  11. 【2017-05-22】WebForm内置对象:Application和ViewState、Repeater的Command用法
  12. css小随笔
  13. 自制ZigBee协议分析仪
  14. 2018年10月OKR初步规划
  15. cocos2dx 编译遇到资源里有.svn文件不能删除报错的问题
  16. MySQL Study之--MySQL普通用户无法本地登陆
  17. simulate mdns message
  18. python之数据类型1
  19. cocos2d-x android 添加新场景报错: undefined reference to `vtable for XXX&#39;
  20. 重新学习MySQL数据库7:详解MyIsam与InnoDB引擎的锁实现

热门文章

  1. Less is better than never
  2. iOS Mapkit 定位REGcode地理位置偏移
  3. 【Firefly API文档】—— Package Distributed
  4. iTunes 无法添加 iPhone 自定义铃声
  5. LaTeX 中换段落
  6. JBoss类加载机制 ClassLoadingConfiguration
  7. golang 的编译安装以及supervisord部署
  8. REMOTE HOST IDENTIFICATION HAS CHANGED问题的解决方式
  9. 如何优雅的使用RabbitMQ(转载)
  10. jquery中ajax的相关事件汇总