jQuery实现div横向拖拽排序的简单实例


Posted in Javascript onJuly 13, 2016

实例如下:

<!DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8">
<title>div横向拖拽排序</title>
<script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script>
<style type="text/css">
body,div{
padding: 0px;
margin: 0px;
}

.box {
margin-left: 15px;
padding : 10px;
padding-right: 0px;
width : 810px;
height : 150px;
border : blue solid 1px;
}

.horizontal-div{
float : left;
margin-right: 10px;
border: #000 solid 1px;
text-align: center;
width : 150px;
height : 150px;
}

.horizontal-div-dash { 
position: absolute; 
width: 150px; 
height: 150px; 
margin-right: 10px; 
border: 1px dashed blue; 
background: #ececec; 
opacity: 0.7; 
} 

.dash { 
float : left; 
width: 150px; 
height: 150px; 
margin-right: 10px; 
border: 1px dashed #f00; 
}; 
</style>

<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; choose = false; //拖拽对象 拖拽状态 选中状态
var theDivId =0, theDivHeight = 0, theDivHalf = 0; tarFirstY = 0; //拖拽对象的索引、高度、的初始化。 
var tarDiv = null, tarFirst, tempDiv; //要插入的目标元素的对象, 临时的虚线对象 
var initPos = {x: 0, y: 0};
$(".horizontal-div").each(function(){ 
  $(this).mousedown(function (event){ 
choose = true;
  //拖拽对象 
  theDiv = $(this); 
  //记录拖拽元素初始位置
  initPos.x = theDiv.offset().left;
  initPos.y = theDiv.offset().top;
  //鼠标元素相对偏移量 
  range.x = event.pageX - theDiv.offset().left; 
  range.y = event.pageY - theDiv.offset().top; 
  theDivId = theDiv.index(); 
  theDivWidth = theDiv.width(); 
  theDivHalf = theDivWidth/2; 
  theDiv.attr("class","horizontal-div-dash"); 
  theDiv.css({left: initPos.x + 'px',top: initPos.y + 'px'}); 
   // 创建新元素 插入拖拽元素之前的位置(虚线框) 
  $("<div class='dash'></div>").insertBefore(theDiv); 
  tempDiv = $(".dash");
  });
    });


$(document).mouseup(function(event) { 
if(!choose){return false;}
  if(!move){
  theDiv.attr("class", "horizontal-div");
  tempDiv.remove(); // 删除新建的虚线div
  choose = false;
   return false;
  }
theDiv.insertBefore(tempDiv); // 拖拽元素插入到 虚线div的位置上 
theDiv.attr("class", "horizontal-div"); //恢复对象的初始样式 
tempDiv.remove(); // 删除新建的虚线div 
move = false;
choose = false;
  }).mousemove(function(event) { 
  if(!choose) return false;
  move = true;
lastPos.x = event.pageX - range.x; 
lastPos.y = event.pageY - range.y; 
lastPos.x1 = lastPos.x + theDivWidth; 
// 拖拽元素随鼠标移动 
theDiv.css({left: lastPos.x + 'px',top: lastPos.y + 'px'}); 
// 拖拽元素随鼠标移动 查找插入目标元素 
var $main = $('.horizontal-div'); // 局部变量:按照重新排列过的顺序 再次获取 各个元素的坐标, 
$main.each(function () { 
  tarDiv = $(this); 
  tarPos.x = tarDiv.offset().left; 
  tarPos.y = tarDiv.offset().top; 
  tarPos.x1 = tarPos.x + tarDiv.width()/2; 
  tarFirst = $main.eq(0); // 获得第一个元素 
  tarFirstX = tarFirst.offset().left + theDivHalf ; // 第一个元素对象的中心纵坐标 
  //拖拽对象 移动到第一个位置 
  if (lastPos.x <= tarFirstX) { 
  tempDiv.insertBefore(tarFirst); 
  } 
  //判断要插入目标元素的 坐标后, 直接插入 
  if (lastPos.x >= tarPos.x - theDivHalf && lastPos.x1 >= tarPos.x1 ) { 
  tempDiv.insertAfter(tarDiv); 
  } 
  }); 
  });


  });
</script>
</head>
<body>
<h1>div横向拖拽排序</h1>
<div class="box">
<div class="horizontal-div" id="div1">div1</div>
<div class="horizontal-div" id="div2">div2</div>
<div class="horizontal-div" id="div3">div3</div>
<div class="horizontal-div" id="div4">div4</div>
<div class="horizontal-div" id="div5">div5</div>
 </div>
</body>
</html>

以上这篇jQuery实现div横向拖拽排序的简单实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript add event remove event
Apr 07 Javascript
niceTitle 基于jquery的超链接提示插件
May 31 Javascript
动态标签 悬停效果 延迟加载示例代码
Nov 21 Javascript
Ext4.2的Ext.grid.plugin.RowExpander无法触发事件解决办法
Aug 15 Javascript
JavaScript错误处理
Feb 03 Javascript
xtemplate node.js 的使用方法实例解析
Aug 22 Javascript
jQuery实现字符串全部替换的方法
Dec 12 Javascript
jQuery实现弹窗下底部页面禁止滑动效果
Dec 19 jQuery
30分钟快速入门掌握ES6/ES2015的核心内容(上)
Apr 18 Javascript
vue 内联样式style中的background用法说明
Aug 05 Javascript
Vue的Options用法说明
Aug 14 Javascript
vue使用keep-alive实现组件切换时保存原组件数据方法
Oct 30 Javascript
用jQuery向div中添加Html文本内容的简单实现
Jul 13 #Javascript
使用jQuery加载html页面到指定的div实现方法
Jul 13 #Javascript
用原生JS对AJAX做简单封装的实例代码
Jul 13 #Javascript
javascript类型系统——undefined和null全面了解
Jul 13 #Javascript
javascript类型系统——日期Date对象全面了解
Jul 13 #Javascript
浅谈javascript中关于日期和时间的基础知识
Jul 13 #Javascript
jQuery EasyUI菜单与按钮详解
Jul 13 #Javascript
You might like
多数据表共用一个页的新闻发布
2006/10/09 PHP
站长助手-网站web在线管理程序 v1.0 下载
2007/05/12 PHP
php表单提交实例讲解
2015/11/12 PHP
javascript Demo模态窗口
2009/12/06 Javascript
jquery实现图片灯箱明暗的遮罩效果
2013/11/15 Javascript
JavaScript事件委托用法分析
2015/01/24 Javascript
在Node.js中使用HTTP上传文件的方法
2015/06/23 Javascript
JS实现鼠标框选效果完整实例
2016/06/20 Javascript
js获取当前时间(昨天、今天、明天)
2016/11/23 Javascript
获取当前月(季度/年)的最后一天(set相关操作及应用)
2016/12/27 Javascript
Angular在模板驱动表单中自定义校验器的方法
2017/08/09 Javascript
gulp教程_从入门到项目中快速上手使用方法
2017/09/14 Javascript
微信小程序自定义toast实现方法详解【附demo源码下载】
2017/11/28 Javascript
使用nodejs+express实现简单的文件上传功能
2017/12/27 NodeJs
详解微信小程序-获取用户session_key,openid,unionid - 后端为nodejs
2019/04/29 NodeJs
解决vue中使用less/sass及使用中遇到无效的问题
2020/10/24 Javascript
Python中的Numpy入门教程
2014/04/26 Python
python实现查询苹果手机维修进度
2015/03/16 Python
Python基于回溯法子集树模板解决0-1背包问题实例
2017/09/02 Python
Python实现端口检测的方法
2018/07/24 Python
python3+openCV 获取图片中文本区域的最小外接矩形实例
2020/06/02 Python
django有哪些好处和优点
2020/09/01 Python
浅析python连接数据库的重要事项
2021/02/22 Python
CSS3正方体旋转示例代码
2013/08/08 HTML / CSS
html5使用canvas画一条线
2014/12/15 HTML / CSS
Html5新增标签有哪些
2017/04/13 HTML / CSS
法国春天百货官网:Printemps.com
2020/06/29 全球购物
高中毕业生生活的自我评价
2013/12/08 职场文书
自强之星事迹材料
2014/05/12 职场文书
2014年大学生预备党员思想汇报1000字
2014/09/13 职场文书
民主评议党员个人自我评价
2015/03/03 职场文书
2015年志愿者服务工作总结
2015/04/20 职场文书
同意落户证明
2015/06/19 职场文书
如何撰写促销方案?
2019/07/05 职场文书
我的收音机情缘
2022/04/05 无线电
MySQL远程无法连接的一些常见原因总结
2022/09/23 MySQL