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 相关文章推荐
JsDom 编程小结
Aug 09 Javascript
jquery判断浏览器类型的代码
Nov 05 Javascript
jquery实现table鼠标经过变色代码
Sep 25 Javascript
javascript校验价格合法性实例(必须输入2位小数)
May 05 Javascript
JavaScript去除数组里重复值的方法
Jul 13 Javascript
jquery插件EasyUI中form表单提交实例分享
Jan 11 Javascript
ClearTimeout消除闪动实例代码
Feb 29 Javascript
JavaScript将DOM事件处理程序封装为event.js 出现的低级错误问题
Aug 03 Javascript
JavaScript中this函数使用实例解析
Feb 21 Javascript
js实现点击按钮随机生成背景颜色
Sep 05 Javascript
使用vant的地域控件追加全部选项
Nov 03 Javascript
微信小程序实现分页加载效果
Nov 19 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
动漫女神老婆无限好,但日本女生可能就不是这么一回事了!
2020/03/04 日漫
PHP为表单获取的URL 地址预设 http 字符串函数代码
2010/05/26 PHP
ThinkPHP验证码和分页实例教程
2014/08/22 PHP
使用PHP生成PDF方法详解
2015/01/23 PHP
详解PHP实现定时任务的五种方法
2016/07/25 PHP
Laravel框架使用Redis的方法详解
2018/05/30 PHP
用jscript启动sqlserver
2007/06/21 Javascript
简洁实用的BootStrap jQuery手风琴插件
2016/08/31 Javascript
JS实现动态增加和删除li标签行的实例代码
2016/10/16 Javascript
详解vue-cli 快速搭建单页应用之遇到的问题及解决办法
2018/03/01 Javascript
详解从vue-loader源码分析CSS Scoped的实现
2019/09/23 Javascript
微信小程序 自定义弹窗实现过程(附代码)
2019/12/05 Javascript
js数组相减简单示例【删除a数组所有与b数组相同元素】
2020/03/04 Javascript
js根据后缀判断文件文件类型的代码
2020/05/09 Javascript
token 机制和实现方式
2020/12/15 Javascript
vue 实现基础组件的自动化全局注册
2020/12/25 Vue.js
python3实现暴力穷举博客园密码
2016/06/19 Python
PyCharm在win10的64位系统安装实例
2017/11/26 Python
python数据封装json格式数据
2018/03/04 Python
python 利用for循环 保存多个图像或者文件的实例
2018/11/09 Python
python实现Virginia无密钥解密
2019/03/20 Python
[机器视觉]使用python自动识别验证码详解
2019/05/16 Python
使用django和vue进行数据交互的方法步骤
2019/11/11 Python
美国性感内衣店:Yandy
2018/06/12 全球购物
Sandro法国官网:法国成衣品牌
2019/08/28 全球购物
工作中个人的自我评价
2013/12/31 职场文书
医院辞职信范文
2014/01/17 职场文书
新学期校长寄语
2014/01/18 职场文书
文明餐桌行动实施方案
2014/02/19 职场文书
《秋姑娘的信》教学反思
2014/02/28 职场文书
高三毕业寄语
2014/04/10 职场文书
2015年12.4全国法制宣传日活动总结
2015/03/24 职场文书
太空授课观后感
2015/06/17 职场文书
2019年干货:自我鉴定
2019/03/25 职场文书
二手手机买卖合同范本(2019年版)
2019/10/28 职场文书
HTML+CSS制作心跳特效的实现
2021/05/26 HTML / CSS