简单的jquery拖拽排序效果实现代码


Posted in Javascript onSeptember 20, 2011

步骤:
1.实现随鼠标移动的效果;
2.初始化一个元素及其坐标;
3.拖拽对象的最后坐标,与元素的坐标 进行计算和判断 来确定 要插入的目标元素;
4.用insertBefore 方法 插入到目标元素的前面
具体代码如下:

<!DOCTYPE HTML> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>测试的拖拽功能</title> 
<style type="text/css"> 
body, div { margin: 0; paading: 0; font-size: 12px; } 
body { width: 960px; margin: 0 auto; } 
ul, li { margin: 0; padding: 0; list-style: none; } 
.clear { clear: both; width: 1px; height: 0px; line-height: 0px; font-size: 1px; } 
.box { width: 600px; height: auto; margin: 25px 0 0 0; padding: 5px; border: 1px solid #f00; } 
.main { position: static; width: 600px; height: 80px; margin-bottom: 5px; border: 1px solid blue; background: #ccc; } 
.maindash { position: absolute; width: 600px; height: 80px; margin-bottom: 5px; border: 1px dashed blue; background: #ececec; opacity: 0.7; } 
.hide { width: 600px; height: 80px; margin-bottom: 5px; } 
.dash { position: sta;tic; width: 600px; height: 80px; margin-bottom: 5px; border: 1px dashed #f00; }; 
</style> 
<script type="text/javascript" src="jquery-1.6.1.min.js"></script> 
<script type="text/javascript"> 
$(document).ready( function () { 
var range = { x: 0, y: 0 };//鼠标元素偏移量 
var lastPos = { x: 0, y: 0, x1: 0, y1: 0 }; //拖拽对象的四个坐标 
var tarPos = { x: 0, y: 0, x1: 0, y1: 0 }; //目标元素对象的坐标初始化 
var theDiv = null, move = false;//拖拽对象 拖拽状态 
var theDivId =0, theDivHeight = 0, theDivHalf = 0; tarFirstY = 0; //拖拽对象的索引、高度、的初始化。 
var tarDiv = null, tarFirst, tempDiv; //要插入的目标元素的对象, 临时的虚线对象 
$(".main").each(function(){ 
$(this).mousedown(function (event){ 
//拖拽对象 
theDiv = $(this); 
//鼠标元素相对偏移量 
range.x = event.pageX - theDiv.offset().left; 
range.y = event.pageY - theDiv.offset().top; 
theDivId = theDiv.index(); 
theDivHeight = theDiv.height(); 
theDivHalf = theDivHeight/2; 
move = true; 
theDiv.attr("class","maindash"); 
// 创建新元素 插入拖拽元素之前的位置(虚线框) 
$("<div class='dash'></div>").insertBefore(theDiv); 
}); 
}); 
$(document).mousemove(function(event) { 
if (!move) return false; 
lastPos.x = event.pageX - range.x; 
lastPos.y = event.pageY - range.y; 
lastPos.y1 = lastPos.y + theDivHeight; 
// 拖拽元素随鼠标移动 
theDiv.css({left: lastPos.x + 'px',top: lastPos.y + 'px'}); 
// 拖拽元素随鼠标移动 查找插入目标元素 
var $main = $('.main'); // 局部变量:按照重新排列过的顺序 再次获取 各个元素的坐标, 
tempDiv = $(".dash"); //获得临时 虚线框的对象 
$main.each(function () { 
tarDiv = $(this); 
tarPos.x = tarDiv.offset().left; 
tarPos.y = tarDiv.offset().top; 
tarPos.y1 = tarPos.y + tarDiv.height()/2; 
tarFirst = $main.eq(0); // 获得第一个元素 
tarFirstY = tarFirst.offset().top + theDivHalf ; // 第一个元素对象的中心纵坐标 
//拖拽对象 移动到第一个位置 
if (lastPos.y <= tarFirstY) { 
tempDiv.insertBefore(tarFirst); 
} 
//判断要插入目标元素的 坐标后, 直接插入 
if (lastPos.y >= tarPos.y - theDivHalf && lastPos.y1 >= tarPos.y1 ) { 
tempDiv.insertAfter(tarDiv); 
} 
}); 
}).mouseup(function(event) { 
theDiv.insertBefore(tempDiv); // 拖拽元素插入到 虚线div的位置上 
theDiv.attr("class", "main"); //恢复对象的初始样式 
tempDiv.remove(); // 删除新建的虚线div 
move=false; 
}); 
}); 
</script> 
</head> 
<body> 
<div class="box" id="box"> 
<div class="main" id="main0">div1</div> 
<div class="main" id="main1">div2</div> 
<div class="main" id="main2">div3</div> 
<div class="main" id="main3">div4</div> 
<div class="main" id="main4">div5</div> 
</div> 
</body> 
</html>
Javascript 相关文章推荐
使用jQuery轻松实现Ajax的实例代码
Aug 16 Javascript
Dom与浏览器兼容性说明
Oct 25 Javascript
js 判断checkbox是否选中的实现代码
Nov 23 Javascript
原生js实现日期联动
Jan 12 Javascript
JavaScript中的类与实例实现方法
Jan 23 Javascript
Angular 4环境准备与Angular cli创建项目详解
May 27 Javascript
Angularjs 手写日历的实现代码(不用插件)
Oct 18 Javascript
详解创建自定义的Angular Schematics
Jun 06 Javascript
JQuery判断radio单选框是否选中并获取值的方法
Jan 17 jQuery
浅谈Node框架接入ELK实践总结
Feb 22 Javascript
JavaScript正则表达式验证登录实例
Mar 18 Javascript
AutoJs实现刷宝短视频的思路详解
May 22 Javascript
用jQuery中的ajax分页实现代码
Sep 20 #Javascript
jquery模拟按下回车实现代码
Sep 20 #Javascript
一个分享按钮的插件使用介绍(可扩展,内附开发制作流程)
Sep 19 #Javascript
50个比较实用jQuery代码段
Sep 18 #Javascript
最新的10款jQuery内容滑块插件分享
Sep 18 #Javascript
Jquery 表格合并的问题分享
Sep 17 #Javascript
当jQuery遭遇CoffeeScript的时候 使用分享
Sep 17 #Javascript
You might like
php防注
2007/01/15 PHP
PHP生成带有雪花背景的验证码
2008/09/28 PHP
php文件操作实例代码
2012/05/10 PHP
实例讲解PHP设计模式编程中的简单工厂模式
2016/02/29 PHP
在Mac OS下搭建LNMP开发环境的步骤详解
2017/03/10 PHP
分享5个非常有用的Laravel Blade指令
2018/05/30 PHP
PHP操作redis实现的分页列表,新增,删除功能封装类与用法示例
2018/08/04 PHP
laravel利用中间件防止未登录用户直接访问后台的方法
2019/09/30 PHP
JavaScript-世界上误解最深的语言分析
2007/08/12 Javascript
JS Jquery 遍历,筛选页面元素 自动完成(实现代码)
2013/07/08 Javascript
javascript移动设备Web开发中对touch事件的封装实例
2014/06/05 Javascript
JQuery的Ajax中Post方法传递中文出现乱码的解决方法
2014/10/21 Javascript
jquery操作select方法汇总
2015/02/05 Javascript
javascript生成大小写字母
2015/07/03 Javascript
JavaScript 动态三角函数实例详解
2017/01/08 Javascript
[js高手之路]单例模式实现模态框的示例
2017/09/01 Javascript
vue填坑之webpack run build 静态资源找不到的解决方法
2018/09/03 Javascript
在Python中操作字典之clear()方法的使用
2015/05/21 Python
numpy.ndarray 实现对特定行或列取值
2019/12/05 Python
PyTorch中反卷积的用法详解
2019/12/30 Python
Python实现子类调用父类的初始化实例
2020/03/12 Python
Python Tornado之跨域请求与Options请求方式
2020/03/28 Python
Python使用Opencv实现边缘检测以及轮廓检测的实现
2020/12/31 Python
Python Selenium破解滑块验证码最新版(GEETEST95%以上通过率)
2021/01/29 Python
Python+MySQL随机试卷及答案生成程序的示例代码
2021/02/01 Python
详解淘宝H5 sign加密算法
2020/08/25 HTML / CSS
计算机专业推荐信范文
2013/11/27 职场文书
函授毕业个人自我评价
2014/02/20 职场文书
班级学习计划书
2014/04/27 职场文书
商铺门面租房协议书
2014/10/21 职场文书
上课说话检讨书500字
2014/11/01 职场文书
2014年设备管理工作总结
2014/11/26 职场文书
公司保洁员管理制度
2015/08/04 职场文书
创业计划之特色精品店
2019/08/12 职场文书
教你快速开启Apache SkyWalking的自监控
2021/04/25 Servers
如何理解Vue前后端数据交互与显示
2021/05/10 Vue.js