简单的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 last-child 列表最后一项的样式
Jan 22 Javascript
JS Replace()的高级使用方法介绍
Jun 29 Javascript
通过JS来判断页面控件是否获取焦点
Jan 03 Javascript
JavaScript框架(iframe)操作总结
Apr 16 Javascript
js检测网络是否具体连接功能的代码
May 23 Javascript
JS模仿编辑器实时改变文本框宽度和高度大小的方法
Aug 17 Javascript
jQuery中trigger()与bind()用法分析
Dec 18 Javascript
Ubuntu 16.04 64位中搭建Node.js开发环境教程
Oct 19 Javascript
vue图片加载与显示默认图片实例代码
Mar 16 Javascript
webpack里使用jquery.mCustomScrollbar插件的方法
May 30 jQuery
JS面向对象编程基础篇(一) 对象和构造函数实例详解
Mar 03 Javascript
ant-design-vue 时间选择器赋值默认时间的操作
Oct 27 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中空字符串介绍0、null、empty和false之间的关系
2012/09/25 PHP
Thinkphp中import的几个用法详细介绍
2014/07/02 PHP
PHP GD库相关图像生成和处理函数小结
2016/09/30 PHP
PHP实现对数组分页处理实例详解
2017/02/07 PHP
PHP iconv()函数字符编码转换的问题讲解
2019/03/22 PHP
jQuery图片轮播滚动切换代码分享
2020/04/20 Javascript
基于JavaScript实现鼠标悬浮弹出跟随鼠标移动的带箭头的信息层
2016/01/18 Javascript
理解javascript封装
2016/02/23 Javascript
使用jQuery.form.js/springmvc框架实现文件上传功能
2016/05/12 Javascript
Angularjs 创建可复用组件实例代码
2016/10/09 Javascript
JavaScript判断浏览器对CSS3属性是否支持的多种方法
2016/11/13 Javascript
jQuery Easyui datagrid行内实现【添加】、【编辑】、【上移】、【下移】
2016/12/19 Javascript
html+javascript+bootstrap实现层级多选框全层全选和多选功能
2017/03/09 Javascript
JavaScript实现短暂提示框功能
2018/04/04 Javascript
JS中的函数与对象的创建方式
2019/05/12 Javascript
inquirer.js一个用户与命令行交互的工具详解
2019/05/18 Javascript
python字典序问题实例
2014/09/26 Python
列举Python中吸引人的一些特性
2015/04/09 Python
基于Python函数的作用域规则和闭包(详解)
2017/11/29 Python
python2.7实现邮件发送功能
2018/12/12 Python
python 计算一个字符串中所有数字的和实例
2019/06/11 Python
Django中自定义查询对象的具体使用
2019/10/13 Python
浅谈tensorflow中Dataset图片的批量读取及维度的操作详解
2020/01/20 Python
Python二元算术运算常用方法解析
2020/09/15 Python
Python 实现劳拉游戏的实例代码(四连环、重力四子棋)
2021/03/03 Python
Html5中的桌面通知Notification的实现
2018/09/25 HTML / CSS
HTML5 通信API 跨域门槛将不再高、数据推送也不再是梦
2013/04/25 HTML / CSS
Dr. Martens马汀博士德国官网:马丁靴鼻祖
2019/12/26 全球购物
工商企业管理应届生求职信
2013/11/03 职场文书
俞敏洪北大演讲稿
2014/05/22 职场文书
张家口市高新区党工委群众路线教育实践活动整改方案
2014/10/25 职场文书
2015年办公室主任工作总结
2015/04/09 职场文书
房产证明范本
2015/06/19 职场文书
2015年入党积极分子培养考察意见
2015/08/12 职场文书
python利用while求100内的整数和方式
2021/11/07 Python
【海涛教你打DOTA】死灵飞龙第一视角解说
2022/04/01 DOTA