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 相关文章推荐
node.js中的fs.renameSync方法使用说明
Dec 16 Javascript
jquery实现点击label的同时触发文本框点击事件的方法
Jun 05 Javascript
Bootstrap创建可折叠的组件
Feb 23 Javascript
JS实时弹出新消息提示框并有提示音响起的实现代码
Apr 20 Javascript
JS实现拖动滚动条评分的效果代码分享
Sep 29 Javascript
jQuery checkbox选中问题之prop与attr注意点分析
Nov 15 Javascript
AngularJS自定义指令详解(有分页插件代码)
Jun 12 Javascript
详解Vue如何支持JSX语法
Nov 10 Javascript
JavaScript实现京东购物放大镜和选项卡效果的方法分析
Jul 05 Javascript
关于js陀螺仪的理解分析
Apr 11 Javascript
javascript json对象小技巧之键名作为变量用法分析
Nov 11 Javascript
nuxt.js写项目时增加错误提示页面操作
Nov 05 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
PHP获取用户客户端真实IP的解决方案
2016/10/10 PHP
php使用ftp实现文件上传与下载功能
2017/07/21 PHP
php封装单文件上传到数据库(路径)
2017/10/15 PHP
JavaScript 异步调用框架 (Part 2 - 用例设计)
2009/08/03 Javascript
Jquery 弹出层插件实现代码
2009/10/24 Javascript
JavaScript 空位补零实现代码
2010/02/26 Javascript
浏览器常用高宽的jquery插件
2011/02/24 Javascript
Javascript面向对象扩展库代码分享
2012/03/27 Javascript
jQuery:节点(插入,复制,替换,删除)操作
2013/03/04 Javascript
Javascript 创建类并动态添加属性及方法的简单实现
2016/10/20 Javascript
微信小程序之购物车功能
2020/09/23 Javascript
Vue2.0+ElementUI实现表格翻页的实例
2017/10/23 Javascript
nodejs async异步常用函数总结(推荐)
2017/11/17 NodeJs
Vue.js结合bootstrap前端实现分页和排序效果
2018/12/29 Javascript
ES6基础之展开语法(Spread syntax)
2019/02/21 Javascript
[01:06:18]DOTA2-DPC中国联赛 正赛 Phoenix vs Dynasty BO3 第二场 1月26日
2021/03/11 DOTA
简单讲解Python中的字符串与字符串的输入输出
2016/03/13 Python
用Python实现斐波那契(Fibonacci)函数
2016/03/25 Python
python 简单的多线程链接实现代码
2016/08/28 Python
用Python下载一个网页保存为本地的HTML文件实例
2018/05/21 Python
解决Python找不到ssl模块问题 No module named _ssl的方法
2019/04/29 Python
java中的控制结构(if,循环)详解
2019/06/26 Python
解决python flask中config配置管理的问题
2019/07/26 Python
python 爬取学信网登录页面的例子
2019/08/13 Python
python中scrapy处理项目数据的实例分析
2020/11/22 Python
HTML5操作WebSQL数据库的实例代码
2017/08/26 HTML / CSS
BCBG官网:BCBGMAXAZRIA
2017/12/29 全球购物
土耳其玩具商店:Toyzz Shop
2019/08/02 全球购物
存储过程和函数的区别
2013/05/28 面试题
校园标语大全
2014/06/19 职场文书
未受刑事制裁公证证明
2014/09/20 职场文书
安全月宣传标语
2014/10/07 职场文书
机关干部四风问题自查报告及整改措施
2014/10/26 职场文书
美德少年主要事迹材料
2015/11/04 职场文书
《确定位置》教学反思
2016/02/18 职场文书
PhpSpreadsheet中文文档 | Spreadsheet操作教程实例
2021/04/01 PHP