最近在写一个CMS内容管理系统,前台基本是用ajax异步请求服务器,通过ashx处理,返回json格式处理。由于需要更加人性化的界面,所以采用到了拖动层的操作。

以下是拖动层的主要核心方法,本来想写成插件的,考虑的没那么多时间,就以方法的方式了。

/*
* Jquery 鼠标左键拖动面板
* coder:新生帝
* obj:jQuery选择器名称
* callback:回调函数(拖动停止要执行的函数),可通过$(this)获取 obj 对象
*/
function movePanel(obj,callback){
var _evenObj=null; // 触发事件的对象
var _move=false; // 移动标识
var _x,_y; //鼠标离控件左上角的相对位置 $(obj).bind({
mousedown:function(e){
_evenObj=e.currentTarget; // 当前触发的作用对象
_move=true;
var cx=$(_evenObj).position().left; // 获取父类的X轴偏移量,如果相对屏幕的偏移量,请把position()改为offset();
var cy=$(_evenObj).position().top; // 获取父类的Y轴偏移量 , 同上
_x=e.pageX-cx;
_y=e.pageY-cy;
},
mouseup:function(){
//判断方法是否存在
if (typeof callback != 'undefined' && callback instanceof Function) {
$ext=$.extend({},$(obj)); // 为obj对象扩展回调方法
$ext.addMethod=callback;
$ext.addMethod();
}
}
});
$(document).bind({
mousemove:function(e){
if(e.which==1){ // 判断是否是左键按下
if(_evenObj!=null){ // 判断触发事件的对象是否为空
if(_move){
var x=e.pageX-_x;
var y=e.pageY-_y;
$(_evenObj).css({
top:y,
left:x
});
}
}
}
},
mouseup:function(){
_evenObj=null;
_move=false;
}
});
}

 上面就是实现鼠标左键拖动的主要方法,下面是调用:

//别忘了引用Jquery库文件。
// 调用=================================================
$(function () {
movePanel(".move",function(){ //有回调函数
alert("哈哈哈,我是执行完后在显示的,我作用的对象是class为:"+$(this).attr("class")+" 的div");
});
movePanel(".move2"); //没有回调函数
});
//=====================================================

 这样就可以通过简单的方法调用实现层的拖动,支持回调函数,如果想拓展的话,可以在 $(obj).bind({})中拓展。

以下是拖动层网站的HTML代码。

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
/*
* Jquery 鼠标左键拖动面板
* coder:新生帝
* obj:jQuery选择器名称
* callback:回调函数(拖动停止要执行的函数),可通过$(this)获取 obj 对象
*/
function movePanel(obj,callback){
var _evenObj=null; // 触发事件的对象
var _move=false; // 移动标识
var _x,_y; //鼠标离控件左上角的相对位置 $(obj).bind({
mousedown:function(e){
_evenObj=e.currentTarget; // 当前触发的作用对象
_move=true;
var cx=$(_evenObj).position().left; // 获取父类的X轴偏移量,如果相对屏幕的偏移量,请把position()改为offset();
var cy=$(_evenObj).position().top; // 获取父类的Y轴偏移量 , 同上
_x=e.pageX-cx;
_y=e.pageY-cy;
},
mouseup:function(){
//判断方法是否存在
if (typeof callback != 'undefined' && callback instanceof Function) {
$ext=$.extend({},$(obj)); // 为obj对象扩展回调方法
$ext.addMethod=callback;
$ext.addMethod();
}
}
});
$(document).bind({
mousemove:function(e){
if(e.which==1){ // 判断是否是左键按下
if(_evenObj!=null){ // 判断触发事件的对象是否为空
if(_move){
var x=e.pageX-_x;
var y=e.pageY-_y;
$(_evenObj).css({
top:y,
left:x
});
}
}
}
},
mouseup:function(){
_evenObj=null;
_move=false;
}
});
} // 调用=================================================
$(function () {
movePanel(".move",function(){ //有回调函数
alert("哈哈哈,我是执行完后在显示的,我作用的对象是class为:"+$(this).attr("class")+" 的div");
});
movePanel(".move2"); //没有回调函数
});
//=====================================================
</script>
<style type="text/css">
*{margin:0;padding:0;}
.move{width:500px; height:300px; position:absolute; left:0; top:0; border:1px solid #ccc; background:#e5e5e5;cursor: move; /* */}
.move2{width:200px; height:300px; position:absolute; right:0; top:0; border:1px solid #ccc; background:#e5e5e5;cursor: move;}
</style>
</head>
<body>
<div class="move">
</div>
<div class="move2">
</div>
</body>
</html>

  如果哪里写的不好,欢迎指出。

Jquery 实现层的拖动,支持回调函数的更多相关文章

  1. jQuery中ajax方法无法执行回调函数问题

    最近遇到一个问题,发现使用jquery的ajax方法时,回调方法无法执行,而使用$.load()方法时却能正确返回数据.经过长时间调试最终发现是自己粗心大意,原来后台返回的是json数据,而返回的数据 ...

  2. jQuery使用():Callbacks回调函数列表之异步编程(含源码分析)

    Callbacks的基本功能回调函数缓存与调用 特定需求模式的Callbacks Callbacks的模拟源码 一.Callbacks的基本功能回调函数缓存与调用 Callbacks即回调函数集合,在 ...

  3. jQuery基础的动画里面的回调函数

    <style> *{margin:0; padding:0;} #target{ border-radius:10px; background:#eee; } .fade{/*动画起始状态 ...

  4. 小兔JS教程(三)-- 彻底攻略JS回调函数

    这一讲来谈谈回调函数. 其实一句话就能概括这个东西: 回调函数就是把一个函数当做参数,传入另一个函数中.传进去的目的仅仅是为了在某个时刻去执行它. 如果不执行,那么你传一个函数进去干嘛呢? 就比如说对 ...

  5. js中replace的回调函数使用。

    这只是一个小问题,但是之前并没有发现.这个问题就是replace的第二个函数是支持回调函数的. var ext = new RegExp('f','g'); 1.str.replace(ext ,1) ...

  6. node基础06:回调函数

    1.Node异步编程 Node.js 异步编程的直接体现就是回调. 异步编程依托于回调来实现,但不能说使用了回调后程序就异步化了. 回调函数在完成任务后就会被调用,Node 使用了大量的回调函数,No ...

  7. Node.js 学习(四)Node.js 回调函数

    Node.js 异步编程的直接体现就是回调. 异步编程依托于回调来实现,但不能说使用了回调后程序就异步化了. 回调函数在完成任务后就会被调用,Node 使用了大量的回调函数,Node 所有 API 都 ...

  8. c++回调函数

    dcc组件支持回调函数接口,当连接/断开连接对端时,调用传入的函数指针. A库和B库想做到不耦合,但是A库需要用到B库的某些函数,A库提供回调函数接口,在初始化的时候指定回调函数,降低耦合程度,每一个 ...

  9. Node.js 回调函数

    Node.js 回调函数 Node.js 异步编程的直接体现就是回调. 异步编程依托于回调来实现,但不能说使用了回调后程序就异步化了. 回调函数在完成任务后就会被调用,Node 使用了大量的回调函数, ...

随机推荐

  1. Oracle Hyperion Planning 11.1 .1:创建与管理应用程序 第1课:Planning概述

    第1课:Planning概述 1.说明 Oracle Enterprise Performance Management system Oracle Enterprise Performance Ma ...

  2. Centos内核调优参考

    net.ipv4.tcp_syn_retries = 1 net.ipv4.tcp_synack_retries = 1 net.ipv4.tcp_keepalive_time = 600 net.i ...

  3. 杭电acm刷题顺序

    最近兴趣来了,闲暇之余,回顾大学期间刷过的杭电acm那些入门级别的题,以此巩固基础知识! 以下参考刷题顺序,避免入坑 原文传送门:https://blog.csdn.net/liuqiyao_01/a ...

  4. 域名设置A记录或CNAME记录,但无法被解析,可能是因为状态为:clientHold

    解决方案: 访问https://whois.aliyun.com/查询域名状态是否为“注册商禁止解析”: 若是,联系注册商根据对方要求进行操作以便解除. https://icann.org/epp#c ...

  5. JAVA入门2019-JAVA配置(windows7和10通用)IDE推荐和相关软件

    如何安装JDK 首先,略过"什么是JDK",非要问,这就是编译环境,JRE是运行环境.一个写程序,一个部署运行. 下载的方法:百度 java se 或者openJDK(两个差不多, ...

  6. hdu-1179 Ollivanders: Makers of Fine Wands since 382 BC.---二分图匹配模板

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1179 题目大意: 有n个人要去买魔杖,有m根魔杖(和哈利波特去买魔杖的时候一样,是由魔杖选人).接下 ...

  7. phalcon中find 最常用

    1 官网:http://docs.iphalcon.cn/reference/models.html#finding-records 2 具体操作实例 数据: mysql> select * f ...

  8. Redis学习记录(三)

    1.Redis集群的搭建 1.1redis-cluster架构图 架构细节: (1)所有的redis节点批次互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽. (2)节点的fail ...

  9. js表单序列化时,非空判断

    在项目中,对于数据的传输一般需要非空的判断,而数据字段较多时一般直接将表单序列化,此时如何判断非空,如下 因为将表单序列化时,数据格式为 trainKind=1&trainKindCode=1 ...

  10. 操作AD时出现 Access denied error

    CommitChanges General Access denied error in Active Directory 1.首先检查AD账户是否具有操作AD的访问权限 2.若用C#类操作AD,还要 ...