简单的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的拖动布局插件
Nov 25 Javascript
jQuery动画效果animate和scrollTop结合使用实例
Apr 02 Javascript
JS基于面向对象实现的放烟花效果
May 07 Javascript
AngularJs 弹出模态框(model)
Apr 07 Javascript
jquery使用on绑定a标签无效 只能用live解决
Jun 02 Javascript
javascript 小数乘法结果错误的处理方法
Jul 28 Javascript
vue.js中过滤器的使用教程
Jun 08 Javascript
详解用Node.js实现Restful风格webservice
Sep 29 Javascript
vue.js-div滚动条隐藏但有滚动效果的实现方法
Mar 03 Javascript
深入理解Puppeteer的入门教程和实践
Mar 05 Javascript
微信小程序开发之点击按钮退出小程序的实现方法
Apr 26 Javascript
js函数和this用法实例分析
Mar 13 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 while循环得到循环次数
2013/10/26 PHP
大家都应该掌握的PHP关联数组使用技巧
2015/12/25 PHP
thinkPHP自动验证机制详解
2016/12/05 PHP
PHP PDO和消息队列的个人理解与应用实例分析
2019/11/25 PHP
nginx 设置多个站跨域
2021/03/09 Servers
JavaScript学习笔记记录我的旅程
2012/05/23 Javascript
输入自动提示搜索提示功能的javascript:sugggestion.js
2013/09/02 Javascript
javascript原生和jquery库实现iframe自适应高度和宽度
2014/07/18 Javascript
JavaScript设计模式之外观模式实例
2014/10/10 Javascript
Javascript 运动中Offset的bug解决方案
2014/12/24 Javascript
触屏中的JavaScript事件分析
2015/02/06 Javascript
JavaScript生成指定范围的时间列表
2018/03/19 Javascript
详解vue-router 命名路由和命名视图
2018/06/01 Javascript
Angular5集成eventbus的示例代码
2018/07/19 Javascript
JS中验证整数和小数的正则表达式
2018/10/08 Javascript
JavaScript变量作用域及内存问题实例分析
2019/06/10 Javascript
vue中使用 pako.js 解密 gzip加密字符串的方法
2019/06/10 Javascript
JavaScript oncopy事件用法实例解析
2020/05/13 Javascript
vue实现按钮切换图片
2021/01/20 Vue.js
[00:34]DOTA2上海特级锦标赛 Spirit战队宣传片
2016/03/04 DOTA
Python图算法实例分析
2016/08/13 Python
对python条件表达式的四种实现方法小结
2019/01/30 Python
python GUI库图形界面开发之PyQt5线程类QThread详细使用方法
2020/02/26 Python
Python如何使用OS模块调用cmd
2020/02/27 Python
python 写一个水果忍者游戏
2021/01/13 Python
html5使用canvas画三角形
2014/12/15 HTML / CSS
html5使用Drag事件编辑器拖拽上传图片的示例代码
2017/08/22 HTML / CSS
个人银行贷款担保书
2014/04/01 职场文书
我的梦想演讲稿1000字
2014/08/21 职场文书
十一国庆节“向国旗敬礼”主题班会活动方案
2014/09/27 职场文书
2014年光棍节活动策划方案(创意集锦)
2014/09/29 职场文书
五年级学生评语大全
2014/12/26 职场文书
因身体原因离职的辞职信范文
2015/05/12 职场文书
SpringBoot整合Mybatis Generator自动生成代码
2021/08/23 Java/Android
日本动漫十大公认神作:第五现已全网禁播,《死亡笔记》在榜
2022/03/18 日漫
win10系统xps文件怎么打开?win10打开xps文件的两种操作方法
2022/07/23 数码科技