简单的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 事件小结 表格区别
Aug 13 Javascript
非常不错的功能强大代码简单的管理菜单美化版
Jul 09 Javascript
javascript禁用键盘功能键让右击及其他键无效
Oct 09 Javascript
js加减乘除丢失精度问题解决方法
May 16 Javascript
js中this用法实例详解
May 05 Javascript
javascript垃圾收集机制的原理分析
Dec 08 Javascript
jQuery Validate让普通按钮触发表单验证的方法
Dec 15 Javascript
vue动态组件实现选项卡切换效果
Mar 08 Javascript
vuejs实现标签选项卡动态更改css样式的方法
May 31 Javascript
记一次用ts+vuecli4重构项目的实现
May 21 Javascript
解决Vue + Echarts 使用markLine标线(precision精度问题)
Jul 20 Javascript
javascript中导出与导入实现模块化管理教程
Dec 03 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
深入mysql_fetch_row()与mysql_fetch_array()的区别详解
2013/06/05 PHP
php提高网站效率的技巧
2015/09/29 PHP
PHP设计模式概论【概念、分类、原则等】
2020/05/01 PHP
怎样在JavaScript里写一个swing把数据插入数据库
2012/12/10 Javascript
JS修改css样式style浅谈
2013/05/06 Javascript
倒记时60刷新网页的js代码
2014/02/18 Javascript
JavaScript判断用户是否对表单进行了修改的方法
2015/03/18 Javascript
JS特效实现图片自动播放并可控的效果
2015/07/31 Javascript
使用jquery提交form表单并自定义action的实现代码
2016/05/25 Javascript
JavaScript中Object值合并方法详解
2017/12/22 Javascript
Vuex 入门教程
2018/01/10 Javascript
vue-router项目实战总结篇
2018/02/11 Javascript
详释JavaScript执行环境与执行栈
2019/04/02 Javascript
解决vue单页面 回退页面 keeplive 缓存问题
2020/07/22 Javascript
javascript实现支付宝滑块验证码效果
2020/07/24 Javascript
[40:12]Liquid vs Chaos 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
[33:09]完美世界DOTA2联赛循环赛 Forest vs DM BO2第二场 10.29
2020/10/29 DOTA
Python查询Mysql时返回字典结构的代码
2012/06/18 Python
python基础教程之获取本机ip数据包示例
2014/02/10 Python
Python中optionParser模块的使用方法实例教程
2014/08/29 Python
浅谈python中copy和deepcopy中的区别
2017/10/23 Python
Python Socket编程之多线程聊天室
2018/07/28 Python
python监测当前联网状态并连接的实例
2018/12/18 Python
pyenv与virtualenv安装实现python多版本多项目管理
2019/08/17 Python
通过python实现windows桌面截图代码实例
2020/01/17 Python
踩坑:pytorch中eval模式下结果远差于train模式介绍
2020/06/23 Python
Python性能测试工具Locust安装及使用
2020/12/01 Python
python实现跨年表白神器--你值得拥有
2021/01/04 Python
python 利用matplotlib在3D空间中绘制平面的案例
2021/02/06 Python
纯CSS3实现的8种Loading动画效果
2014/07/05 HTML / CSS
美国在线健康和美容市场:Pharmapacks
2018/12/05 全球购物
C语言笔试集
2012/07/24 面试题
领班岗位职责范文
2014/02/06 职场文书
广告学专业求职信
2014/06/19 职场文书
个人剖析材料范文
2014/09/30 职场文书
Pytest实现setup和teardown的详细使用详解
2021/04/17 Python