简单的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 相关文章推荐
取得传值的函数
Oct 27 Javascript
JavaScript 命名空间 使用介绍
Aug 29 Javascript
再探JavaScript作用域
Sep 24 Javascript
让浏览器崩溃的12行JS代码(DoS攻击分析及防御)
Oct 10 Javascript
JavaScript中三种常见的排序方法
Feb 24 Javascript
AngularJs实现聊天列表实时刷新功能
Jun 15 Javascript
VSCode 配置React Native开发环境的方法
Dec 27 Javascript
AngularJs用户输入动态模板XSS攻击示例详解
Apr 21 Javascript
详解在Node.js中发起HTTP请求的5种方法
Jan 10 Javascript
d3.js 地铁轨道交通项目实战
Nov 27 Javascript
微信小程序实现单个卡片左滑显示按钮并防止上下滑动干扰功能
Dec 06 Javascript
Ajax实现页面无刷新留言效果
Mar 24 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模块 Memcached功能多于Memcache
2011/06/14 PHP
PHP5中GD库生成图形验证码(有汉字)
2013/07/28 PHP
jQuery+PHP+ajax实现微博加载更多内容列表功能
2014/06/27 PHP
ThinkPHP中处理表单中的注意事项
2014/11/22 PHP
php抽象类用法实例分析
2015/07/07 PHP
php workerman定时任务的实现代码
2018/12/23 PHP
从父页面读取和操作iframe中内容方法
2009/07/25 Javascript
JQuery浮动DIV提示信息并自动隐藏的代码
2010/08/29 Javascript
JavaScript实现两个Table固定表头根据页面大小自行调整
2014/01/03 Javascript
jquery实现省市select下拉框的替换(示例代码)
2014/02/22 Javascript
JavaScript组件焦点与页内锚点间传值的方法
2015/02/02 Javascript
jquery仿百度经验滑动切换浏览效果
2015/04/14 Javascript
JavaScript编程中的Promise使用大全
2015/07/28 Javascript
js实现仿qq消息的弹出窗效果
2016/01/06 Javascript
使用pcs api往免费的百度网盘上传下载文件的方法
2016/03/17 Javascript
推荐三款日期选择插件(My97DatePicker、jquery.datepicker、Mobiscroll)
2017/04/21 jQuery
在Vue中使用echarts的方法
2018/02/05 Javascript
详解如何在Vue里建立长按指令
2018/08/20 Javascript
详解Node.js读写中文内容文件操作
2018/10/10 Javascript
vue开发环境配置跨域的方法步骤
2019/01/16 Javascript
express框架中使用jwt实现验证的方法
2019/08/25 Javascript
nodejs环境使用Typeorm连接查询Oracle数据
2019/12/05 NodeJs
JS操作Fckeditor的一些常用方法(获取、插入等)
2020/02/19 Javascript
[50:28]LGD女子学院第三期 DOTA2复仇之魂教学
2013/12/24 DOTA
Python实现批量下载文件
2015/05/17 Python
tensorflow训练中出现nan问题的解决
2018/02/10 Python
在pycharm中配置Anaconda以及pip源配置详解
2019/09/09 Python
Python基于yaml文件配置logging日志过程解析
2020/06/23 Python
python中使用asyncio实现异步IO实例分析
2021/02/26 Python
幼儿园教师请假制度
2014/01/16 职场文书
教师个人师德总结
2015/02/06 职场文书
学校教师师德师风承诺书
2015/04/28 职场文书
领导干部失职检讨书
2015/05/05 职场文书
婚宴新娘致辞
2015/07/28 职场文书
Python的flask接收前台的ajax的post数据和get数据的方法
2021/04/12 Python
一文搞懂php的垃圾回收机制
2021/06/18 PHP