简单的jQuery拖拽排序效果的实现(增强动态)


Posted in Javascript onFebruary 09, 2017

增强动态增加Div效果

简单的jQuery拖拽排序效果的实现(增强动态)

原来没有新建动作,分析代码后发现很容易增强~~

<!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:100%; 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; } 
 .drag_module_box { width: 600px; height: auto; margin: 25px 0 0 0; padding: 5px; border: 1px solid #f00; } 
 .drag_module_box1 { width: 600px; height: auto; margin: 25px 0 0 0; padding: 5px; border: 1px solid #f00; } 
 .drag_module_main { position: static; width: 600px; height: 80px; margin-bottom: 5px; border: 1px solid blue; background: #ccc; } 
 .drag_module_maindash { position: absolute; width: 600px; height: 80px; margin-bottom: 5px; border: 1px dashed blue; background: #ececec; opacity: 0.7; } 
 .drag_module_hide { width: 600px; height: 80px; margin-bottom: 5px; } 
 .drag_module_dash { position: sta;tic; width: 600px; height: 80px; margin-bottom: 5px; border: 1px dashed #f00; }; 
 </style> 
 <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script> 
 <script type="text/javascript"> 
 $(document).ready( function () { 
  //来源:http://www.cnblogs.com/web-ed2/archive/2011/09/19/2181819.html 
   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; //要插入的目标元素的对象, 临时的虚线对象 
  function loopbox(){ //循环初始化 
     $(".drag_module_box").find(".drag_module_main").each(function(){ 
      console.log( 'find' ); 
       $(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","drag_module_maindash"); 
         // 创建新元素 插入拖拽元素之前的位置(虚线框) 
         $("<div class='drag_module_dash'></div>").insertBefore(theDiv); 
       }); 
     }); 
  } 
  loopbox(); 
   $(".drag_module_box").mousemove(function(event) { 
    console.log( 'mousemove' ); 
     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 = $('.drag_module_main'); // 局部变量:按照重新排列过的顺序 再次获取 各个元素的坐标, 
     tempDiv = $(".drag_module_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) { 
    console.log( 'mouseup' ); 
    if(theDiv==null) return false; 
     theDiv.insertBefore(tempDiv); // 拖拽元素插入到 虚线div的位置上 
     theDiv.attr("class", "drag_module_main"); //恢复对象的初始样式 
     $('.drag_module_dash').remove(); // 删除新建的虚线div 
     move=false; 
   }); 
   $("#drag_module_insert").click(function(){ 
    $("#drag_module_box1").html($("#drag_module_box1").html()+$("#drag_module_box2").html()); 
    loopbox(); 
   }); 
   $("#drag_module_seque").click(function(){ 
    $(".drag_module_box").find(".drag_module_main").each(function(){ 
      console.log($(this).attr('id')); 
    }); 
   }); 
 }); 
 </script> 
 </head> 
 <body>  
 <div class="drag_module_box" id="drag_module_box1"> 
   <div class="drag_module_main" id="main1">div1</div> 
   <div class="drag_module_main" id="main2">div2</div> 
   <div class="drag_module_main" id="main3">div3</div> 
   <div class="drag_module_main" id="main4">div4</div> 
   <div class="drag_module_main" id="main5">div5</div> 
   <div class="drag_module_main" id="main6">div6</div> 
 </div> 
 <div class="drag_module_box1" id="drag_module_box2"> 
  <div class="drag_module_main" id="main_first">div7</div> 
 </div> 
 <input type="button" value="新建" id="drag_module_insert"/> 
 <input type="button" value="确定" id="drag_module_seque"/> 
 </body> 
 </html>
Javascript 相关文章推荐
简单实用的js调试logger组件实现代码
Nov 20 Javascript
eval与window.eval的差别分析
Mar 17 Javascript
JavaScript Array Flatten 与递归使用介绍
Oct 30 Javascript
在javascript中如何得到中英文混合字符串的长度
Jan 17 Javascript
JQuery调用WebServices的方法和4个实例
May 06 Javascript
javascript实现校验文件上传控件实例
Apr 20 Javascript
javascript生成不重复的随机数
Jul 17 Javascript
全面解析Bootstrap表单使用方法(表单控件)
Nov 24 Javascript
SpringMVC简单整合Angular2的示例
Jul 31 Javascript
Vue-Quill-Editor富文本编辑器的使用教程
Sep 21 Javascript
解决vue项目,npm run build后,报路径错的问题
Aug 13 Javascript
vue监听键盘事件的相关总结
Jan 29 Vue.js
bootstrapValidator.min.js表单验证插件
Feb 09 #Javascript
js 原型对象和原型链理解
Feb 09 #Javascript
AngularJs表单校验功能实例代码
Feb 09 #Javascript
javascript 显示全局变量与隐式全局变量的区别
Feb 09 #Javascript
JS获取本周周一,周末及获取任意时间的周一周末功能示例
Feb 09 #Javascript
简单谈谈Javascript函数中的arguments
Feb 09 #Javascript
javascript 中设置window.location.href跳转无效问题解决办法
Feb 09 #Javascript
You might like
PHP中文汉字验证码
2007/04/08 PHP
Fleaphp常见函数功能与用法示例
2016/11/15 PHP
PHP微信支付结果通知与回调策略分析
2019/01/10 PHP
PHP利用pdo_odbc实现连接数据库示例【基于ThinkPHP5.1搭建的项目】
2019/05/13 PHP
RGB颜色值转HTML十六进制(HEX)代码的JS函数
2009/04/25 Javascript
jQuery之网页换肤实现代码
2011/04/30 Javascript
用JQuery在网页中实现分隔条功能的代码
2012/08/09 Javascript
js中apply方法的使用详细解析
2013/11/04 Javascript
继续学习javascript闭包
2015/12/03 Javascript
JS实现消息来时让网页标题闪动效果的方法
2016/04/20 Javascript
用jQuery向div中添加Html文本内容的简单实现
2016/07/13 Javascript
Bootstrap按钮组简单实现代码
2017/03/06 Javascript
vue.js前后端数据交互之提交数据操作详解
2018/04/24 Javascript
微信小程序收藏功能的实现代码
2018/06/12 Javascript
React父子组件间的传值的方法
2018/11/13 Javascript
vue分页插件的使用方法
2019/12/25 Javascript
详解为element-ui的Select和Cascader添加弹层底部操作按钮
2020/02/07 Javascript
vue实现移动端项目多行文本溢出省略
2020/07/29 Javascript
[02:55]DOTA2英雄基础教程 发条技师
2013/12/04 DOTA
[03:47]2015国际邀请赛第三日现场精彩回顾
2015/08/08 DOTA
使用python编写脚本获取手机当前应用apk的信息
2014/07/21 Python
python中迭代器(iterator)用法实例分析
2015/04/29 Python
在Python中操作字典之clear()方法的使用
2015/05/21 Python
python文件操作相关知识点总结整理
2016/02/22 Python
详解Python中表达式i += x与i = i + x是否等价
2017/02/08 Python
Python常见排序操作示例【字典、列表、指定元素等】
2018/08/15 Python
Python类装饰器实现方法详解
2018/12/21 Python
用Python自动清理电脑内重复文件,只要10行代码(自动脚本)
2021/01/09 Python
CSS3实现文字描边的2种方法(小结)
2020/02/14 HTML / CSS
奢华时尚的独特视角:La Garçonne
2018/06/07 全球购物
Python中pass语句的作用是什么
2016/06/01 面试题
服装销售人员求职自我评价
2013/09/26 职场文书
商务专员岗位职责范本
2014/06/29 职场文书
个人融资协议书
2014/10/02 职场文书
2014小学数学教研组工作总结
2014/12/06 职场文书
2015年大学生社会实践评语
2015/03/26 职场文书