简单的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 相关文章推荐
Js 随机数产生6位数字
May 13 Javascript
javascript使用定时函数实现跳转到某个页面
Dec 25 Javascript
Jquery操作radio的简单实例
Jan 06 Javascript
浅谈js中变量初始化
Feb 03 Javascript
JQuery.Ajax()的data参数类型实例详解
Nov 20 Javascript
第三章之Bootstrap 表格与按钮功能
Apr 25 Javascript
再谈Javascript中的基本类型和引用类型(推荐)
Jul 01 Javascript
微信小程序 实战小程序实例
Oct 08 Javascript
easyui-edatagrid.js实现回车键结束编辑功能的实例
Apr 12 Javascript
vue改变对象或数组时的刷新机制的方法总结
Apr 24 Javascript
基于JavaScript实现十五拼图代码实例
Apr 26 Javascript
antd中table展开行默认展示,且不需要前边的加号操作
Nov 02 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
php5.3提示Function ereg() is deprecated Error问题解决方法
2014/11/12 PHP
php使用自带dom扩展进行元素匹配的原理解析
2020/05/29 PHP
javascript 函数使用说明
2010/04/07 Javascript
javascript的创建多行字符串的7种方法
2014/04/29 Javascript
Lab.js初次使用笔记
2015/02/28 Javascript
JQuery boxy插件在IE中边角图片不显示问题的解决
2015/05/20 Javascript
JS+CSS实现电子商务网站导航模板效果代码
2015/09/10 Javascript
javascript html实现网页版日历代码
2016/03/08 Javascript
详解VueJs异步动态加载块
2017/03/09 Javascript
详解Vue方法与事件
2017/03/09 Javascript
Java与JavaScript中判断两字符串是否相等的区别
2017/03/13 Javascript
详解JavaScript事件循环机制
2018/09/07 Javascript
Nodejs在局域网配置https访问的实现方法
2020/10/17 NodeJs
采用python实现简单QQ单用户机器人的方法
2014/07/03 Python
利用Python实现命令行版的火车票查看器
2016/08/05 Python
对python实时得到鼠标位置的示例讲解
2018/10/14 Python
python,Django实现的淘宝客登录功能示例
2019/06/12 Python
python实现五子棋小程序
2019/06/18 Python
pyqt5 使用cv2 显示图片,摄像头的实例
2019/06/27 Python
Python 操作 PostgreSQL 数据库示例【连接、增删改查等】
2020/04/21 Python
python新手学习可变和不可变对象
2020/06/11 Python
Python 添加文件注释和函数注释操作
2020/08/09 Python
Python加载数据的5种不同方式(收藏)
2020/11/13 Python
CSS3+DIV实现漂亮的动画彩色标签
2016/06/16 HTML / CSS
解析HTML5中的新功能本地存储localStorage
2016/03/01 HTML / CSS
同步和异步有何异同,在什么情况下分别使用他们?举例说明
2014/02/27 面试题
材料专业毕业生求职信
2014/02/26 职场文书
大学班级计划书
2014/04/29 职场文书
化工操作工岗位职责
2014/04/29 职场文书
我的小天地教学反思
2014/04/30 职场文书
如何签定毕业生就业协议书
2014/09/28 职场文书
2015年挂职锻炼工作总结
2014/12/12 职场文书
公诉意见书范文
2015/06/05 职场文书
竞聘演讲报告:基本写作有哪些?附开头范文
2019/10/16 职场文书
创业计划书之都市休闲农庄
2019/12/28 职场文书
Java异常体系非正常停止和分类
2022/06/14 Java/Android