简单的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 相关文章推荐
JavaScript 对话框和状态栏使用说明
Oct 25 Javascript
用Javascript同时提交多个Web表单的方法
Dec 26 Javascript
javascript 图片上一张下一张链接效果代码
Mar 12 Javascript
javascript 通用简单的table选项卡实现
May 07 Javascript
Javascript面向对象编程(三) 非构造函数的继承
Aug 28 Javascript
js获取浏览器的可视区域尺寸的实现代码
Nov 30 Javascript
jquery中邮箱地址 URL网站地址正则验证实例代码
Sep 15 Javascript
jQuery简单实现日历的方法
May 04 Javascript
原生js实现的贪吃蛇网页版游戏完整实例
May 18 Javascript
jquery ajaxfileuplod 上传文件 essyui laoding 效果【防止重复上传文件】
May 26 jQuery
jQuery实现动态加载(按需加载)javascript文件的方法分析
May 31 jQuery
js实现鼠标滑动到某个div禁止滚动
Sep 17 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
如何使用脚本模仿登陆过程
2006/11/22 PHP
php利用header函数实现文件下载时直接提示保存
2009/11/12 PHP
php实现微信企业号支付个人的方法详解
2017/07/26 PHP
人人网javascript面试题 可以提前实现下
2012/01/05 Javascript
两种方法实现文本框输入内容提示消失
2013/03/17 Javascript
JS Pro-深入面向对象的程序设计之继承的详解
2013/05/07 Javascript
js实现禁止中文输入的方法
2015/01/14 Javascript
JavaScript控制table某列不显示的方法
2015/03/16 Javascript
javascript实现动态改变层大小的方法
2015/05/14 Javascript
JavaScript队列、优先队列与循环队列
2016/11/14 Javascript
关于Iframe父页面与子页面之间的相互调用
2016/11/22 Javascript
利用jquery禁止外层滚动条的滚动
2017/01/05 Javascript
Angular在模板驱动表单中自定义校验器的方法
2017/08/09 Javascript
微信小程序动态生成二维码的实现代码
2018/07/25 Javascript
vue中使用protobuf的过程记录
2018/10/26 Javascript
10行代码实现微信小程序滑动tab切换
2018/12/28 Javascript
Vue 解决多级动态面包屑导航的问题
2019/11/04 Javascript
在matplotlib的图中设置中文标签的方法
2018/12/13 Python
python 机器学习之支持向量机非线性回归SVR模型
2019/06/26 Python
Python 堆叠柱状图绘制方法
2019/07/29 Python
关于阿里云oss获取sts凭证 app直传 python的实例
2019/08/20 Python
Python如何读取、写入CSV数据
2020/07/28 Python
Python 中如何写注释
2020/08/28 Python
Python的scikit-image模块实例讲解
2020/12/30 Python
纯CSS3代码实现switch滑动开关按钮效果
2016/08/30 HTML / CSS
CSS3教程(3):border-color网页边框色彩
2009/04/02 HTML / CSS
英国著名的化妆品折扣网站:Allbeauty.com
2016/07/21 全球购物
美国第一个网上卖鞋零售商:OnlineShoes.com
2017/09/24 全球购物
Expedia加拿大官方网站:加拿大最大的在线旅游提供商
2017/12/31 全球购物
Beauty Expert美国/加拿大:购买奢侈美容产品
2018/12/05 全球购物
中国领先的汽车保养服务平台:途虎养车
2019/10/18 全球购物
Puccini乌克兰:购买行李箱、女士手袋网上商店
2020/08/06 全球购物
优秀的应届生自荐信
2014/05/23 职场文书
乡镇三严三实学习心得体会
2014/10/13 职场文书
详解Java分布式事务的 6 种解决方案
2021/06/26 Java/Android
SpringBoot详解执行过程
2022/07/15 Java/Android