简单的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 相关文章推荐
飞鱼(shqlsl) javascript作品集
Dec 16 Javascript
IE6-IE9不支持table.innerHTML的解决方法分享
Sep 14 Javascript
.net,js捕捉文本框回车键事件的小例子(兼容多浏览器)
Mar 11 Javascript
子窗体与父窗体传值示例js代码
Aug 01 Javascript
jQuery 无刷新分页实例代码
Nov 12 Javascript
ECMAScript 5严格模式(Strict Mode)介绍
Mar 02 Javascript
非常实用的js验证框架实现源码 附原理方法
Jun 08 Javascript
js实现倒计时及时间对象
Nov 15 Javascript
React Native 自定义下拉刷新上拉加载的列表的示例
Mar 01 Javascript
JS实现显示当前日期的实例代码
Jul 03 Javascript
JavaScript事件发布/订阅模式原理与用法分析
Aug 21 Javascript
JavaScript实现HSL拾色器
May 21 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 HTML代码串 截取实现代码
2009/06/29 PHP
使用jQuery的将桌面应用程序引入浏览器
2010/11/19 Javascript
js控制容器隐藏出现防止样式变化的两种方法
2014/04/25 Javascript
jquery动态分页效果堪比时光网
2014/09/25 Javascript
jQuery中before()方法用法实例
2014/12/25 Javascript
跟我学习javascript的prototype,getPrototypeOf和__proto__
2015/11/17 Javascript
javascript实现动态统计图开发实例
2015/11/21 Javascript
jQuery数据类型小结(14个)
2016/01/08 Javascript
谈一谈javascript中继承的多种方式
2016/02/19 Javascript
关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)
2016/12/14 Javascript
详解Angular 4.x NgIf 的用法
2017/05/22 Javascript
AngularJS 实现点击按钮获取验证码功能实例代码
2017/07/13 Javascript
jQuery中each遍历的三种方法实例分析
2018/09/07 jQuery
解析原来浏览器原生支持JS Base64编码解码
2019/08/12 Javascript
Angular8路由守卫原理和使用方法
2019/08/29 Javascript
JavaScript中条件语句的优化技巧总结
2020/12/04 Javascript
[43:43]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第三场 11.29
2020/12/02 DOTA
Python常见异常分类与处理方法
2017/06/04 Python
详谈python3 numpy-loadtxt的编码问题
2018/04/29 Python
浅谈python中真正关闭socket的方法
2018/12/18 Python
Python3.5字符串常用操作实例详解
2019/05/01 Python
使用python实现ftp的文件读写方法
2019/07/02 Python
Python tkinter和exe打包的方法
2020/02/05 Python
Python爬虫实现百度翻译功能过程详解
2020/05/29 Python
Solid & Striped官网:美国泳装品牌
2019/06/19 全球购物
初中同学聚会感言
2014/02/11 职场文书
水利公司纪检监察自我鉴定
2014/02/25 职场文书
大学竞选班干部演讲稿
2014/08/21 职场文书
二年级语文上册复习计划
2015/01/19 职场文书
协议书范文
2015/01/27 职场文书
在酒桌上的敬酒词
2015/08/12 职场文书
合同补充协议书
2016/03/24 职场文书
文明医院的标语集锦!
2019/07/24 职场文书
Python基础详解之邮件处理
2021/04/28 Python
唤醒紫霞仙子,携手再游三界!大话手游X《大话西游》电影合作专属剧情任务
2022/04/03 其他游戏
JS前端宏任务微任务及Event Loop使用详解
2022/07/23 Javascript