// 做学习参考的话,重点看3就可以了, 前面的1跟2 都有些问题, 这是很早之前写的了,由于时间原因顾不上细细修改了,
// 具体 就是修改 $('.ui-draggable-dragging').html() 结构, 使得拖动过程中的样式美观,
//('.this_a') 是要去拖目标对象的身份识别ID,('.this_b') 是对应得具体内容, 后面在去重判断时会用到。
// 详细的 可以去参考 官网或 菜鸟教程 http://www.runoob.com/jqueryui/example-draggable.html 本文这个有时间的话,我会在整理整理。谢谢!!!
1.带去重复带复制拖拽
<!DOCTYPE html> <html> <head lang="en"> <script type="text/javascript" language="javascript" src="js/trirand/jquery-1.11.1.min.js"></script> <script type="text/ecmascript" src="js/trirand/jquery-ui.js"></script> <link rel="stylesheet" type="text/css" media="screen" href="css/trirand/jquery-ui.css" /> <style> .goal_item{ float: left; margin-right: -1px; border:solid 1px #D9E1EB; height: 210px; } .goal_item dt{ border-bottom:solid 1px #D9E1EB; font: normal 14px/34px "Microsoft YaHei","微软雅黑"; text-align: center; padding: 0 14px; background-color: #E7F1FF; } .goal_item dd{ height: 176px; width: 124px; text-align: center; overflow-x: hidden; overflow-y:auto; } .goal_item ul{ height: 100%; float: left; width: 100%; padding-top: 15px; } .goal_item li{ padding-bottom: 15px; } .ERP_moving a{ display: inline-block; text-align: center; width: 96px; height: 26px; line-height: 26px; color: #FFFFFF; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; background-color: #B8CBED; margin: 0 14px 0 8px; } .ERP_moving a:hover{ background-color: #4895FF; } </style> </head> <body> <dl class="goal_item"> <dt>采购计划单</dt> <dd> <ul class="goal_item_ul"> <li class="ERP_moving"><a href="javascript:void(0)">测试保留</a></li> </ul> </dd> </dl> <!-- 此处用的jqGrid 具体的不写了--> <table id="jqGrid"></table> <div id="jqGridPager"></div> <script> $(function() { $("#jqGrid").find('tr').draggable( { addClasses: false, // axis: "x" , //约束在水平轴 (x) 或垂直轴 (y) 上拖拽。可能的值:"x", "y"。 // cancel: ".title", //防止从指定的元素上开始拖拽。 // cursorAt: { left: 5 }, //设置拖拽助手(helper)相对于鼠标光标的偏移。坐标可通过一个或两个键的组, { top, left, right, bottom }。 // delay: 300, 标按下后直到拖拽开始为止的时间,默认0 // disabled: true, //如果设置为 true,则禁用该 draggable。 // distance: 10, //鼠标按下后拖拽开始前必须移动的距离,以像素计。 // grid: [ 50, 20 ] }, //对齐拖拽助手(helper)到网格,每个 x 和 y 像素。数组形式必须是 [ x, y ]。 // handle: "h2", // 如果指定了该选项,则限制开始拖拽,除非鼠标在指定的元素上按下。只有可拖拽(draggable)元素的后代元素才允许被拖拽。 //opacity: 0.35, //当被拖拽时助手(helper)的不透明度。 //refreshPositions: true, //如果设置为 true,在每次鼠标移动(mousemove)时都会计算所有可放置的位置。 //revert: true, //当拖拽停止时,元素是否还原到它的开始位置。 //revertDuration: 200 , //还原(revert)动画的持续时间,以毫秒计。如果 revert 选项是 false 则忽略。 //scope: "tasks" , //用于组合配套 draggable 和 droppable 项,除了 droppable 的 accept 选项之外。一个与 droppable 带有相同的 scope 值的 draggable 会被该 droppable 接受。 //scroll: false , //如果设置为 true,当拖拽时容器会自动滚动。会出现滚动条 默认true // scrollSensitivity: 100, //窗口滚动距离 // scrollSpeed: 100 , //窗口滚动速度 // snap: true,//元素是否对齐到其他元素。 // snapMode: "inner" ,//决定 draggable 将对齐到对齐元素的哪个边缘。如果 snap 选项是 false 则忽略。可能的值:"inner"、"outer"、"both"。 // snapTolerance: 30, //从要发生对齐的对齐元素边缘起的距离,以像素计。如果 snap 选项是 false 则忽略。 // stack: ".products" , //控制匹配选择器(selector)的元素集合的 z-index,总是在当前拖拽项的前面,在类似窗口管理器这样的事物中非常有用。 // zIndex: 100, //当被拖拽时,助手(helper)的 Z-index。 cursorAt: { top:8, left:48 }, iframeFix: true ,//防止拖拽期间 iframes 捕捉鼠标移动(mousemove )事件 connectToSortable: ".goal_item_ul", //拖放到指定元素 containment: "window", //约束在指定元素或区域的边界内拖拽。可能的值:"parent"、"document"、"window"。 cursor: "move", //拖拽操作期间的 CSS 光标。 helper:"clone", //允许一个 helper 元素用于拖拽显示。 original appendTo: "body", create: function( event, ui ) { }, //当 draggable 被创建时触发。 drag: function( event, ui ) { // var b = $(this).find('.this_b').text(); // $('.ui-draggable-dragging').html('<li class="ERP_moving"><a href="javascript:void(0);">'+b+'</a></li>') }, //在拖拽期间当鼠标移动时触发。 start: function( event, ui ) { var b = $(this).find('.this_b').text(); $('.ui-draggable-dragging').html('<li class="ERP_moving "><a href="javascript:void(0);">'+b+'</a></li>') },//当拖拽开始时触发。 stop: function( event, ui ) { //用户ID var a = $(this).find('.this_a').text(); //用户名称 var b = $(this).find('.this_b').text(); //已有用户 $('.goal_item_ul').each(function(ii,dd){ var item = $(dd).find('tr').siblings('li') item.each(function(i,d){ if($(d).text() == b && $(d).attr('data_id') == a){ $(d).remove() } }) }) $('.goal_item_ul').find("tr[role='row']").replaceWith('<li class="ERP_moving" data_id="'+a+'" ><a href="javascript:void(0);">'+b+'</a></li>'); $('.goal_item_ul').find('.ui-sortable-placeholder').html('<li class="ERP_moving" data_id="'+a+'"><a href="javascript:void(0);">'+b+'</a></li>'); $('.ui-sortable-helper').remove() setTimeout(function(){ $('.goal_item_ul').find('.ui-sortable-placeholder').remove() console.log('已删除') },1200) },//当拖拽停止时触发。 revert:"invalid" } ); $(".goal_item_ul").sortable( { revert: true }) $("ul, li").disableSelection(); } ); </script> </body> </html>
2.事件绑定
$("#jqGrid").on('mouseover','tr',function(){ $(this) .draggable( { addClasses: false, cursorAt: { top:8, left:48 }, iframeFix: true ,//防止拖拽期间 iframes 捕捉鼠标移动(mousemove )事件 connectToSortable: ".goal_item_ul", //拖放到指定元素 containment: "window", //约束在指定元素或区域的边界内拖拽。可能的值:"parent"、"document"、"window"。 cursor: "move", //拖拽操作期间的 CSS 光标。 helper:"clone", //允许一个 helper 元素用于拖拽显示。 original appendTo: "body", create: function( event, ui ) { }, //当 draggable 被创建时触发。 drag: function( event, ui ) { // var b = $(this).find('.this_b').text(); // $('.ui-draggable-dragging').html('<li class="ERP_moving"><a href="javascript:void(0);">'+b+'</a></li>') }, //在拖拽期间当鼠标移动时触发。 start: function( event, ui ) { var b = $(this).find('.this_b').text(); $('.ui-draggable-dragging').html('<li class="ERP_moving "><a href="javascript:void(0);">'+b+'</a></li>') },//当拖拽开始时触发。 stop: function( event, ui ) { //用户ID var a = $(this).find('.this_a').text(); //用户名称 var b = $(this).find('.this_b').text(); //已有用户 $('.goal_item_ul').each(function(ii,dd){ var item = $(dd).find('tr').siblings('li') item.each(function(i,d){ if($(d).text() == b && $(d).attr('data_id') == a){ $(d).remove() } }) }) $('.goal_item_ul').find("tr[role='row']").replaceWith('<li class="ERP_moving" data_id="'+a+'" ><a href="javascript:void(0);">'+b+'</a></li>'); // $('.goal_item_ul').find('tr').html('<li class="ERP_moving" data_id="'+a+'" ><a href="javascript:void(0);">'+b+'</a></li>'); $('.goal_item_ul').find('.ui-sortable-placeholder').html('<li class="ERP_moving" data_id="'+a+'"><a href="javascript:void(0);">'+b+'</a></li>'); $('.ui-sortable-helper').remove() setTimeout(function(){ $('.goal_item_ul').find('.ui-sortable-placeholder').remove() console.log('已删除') },1200) },//当拖拽停止时触发。 revert:"invalid" } ); })
$(".goal_item_ul").sortable( {
revert: true }) $("ul, li").disableSelection();
3.排序、放置、退拽等结合版
$("#jqGrid").on('mouseover','tr',function(){ $(this) .draggable( { addClasses: false, cursorAt: { top:8, left:48 }, delay: 0, //标按下后直到拖拽开始为止的时间,默认0 iframeFix: true ,//防止拖拽期间 iframes 捕捉鼠标移动(mousemove )事件 containment: "window", //约束在指定元素或区域的边界内拖拽。可能的值:"parent"、"document"、"window"。 cursor: "move", //拖拽操作期间的 CSS 光标。 helper:"clone", //允许一个 helper 元素用于拖拽显示。 original appendTo: "body", create: function( event, ui ) { }, //当 draggable 被创建时触发。 drag: function( event, ui ) { }, //在拖拽期间当鼠标移动时触发。 start: function( event, ui ) { var b = $(this).find('.this_b').text(); $('.ui-draggable-dragging').html('<li class="ERP_moving "><a href="javascript:void(0);">'+b+'</a></li>') $(this).draggable( "disable" ); //禁用 draggable },//当拖拽开始时触发。 stop: function( event, ui ) { $(this).draggable( "enable" ) //启用 draggable }//当拖拽停止时触发。 } ); }) $(".goal_item_ul").droppable({ activeClass: "ui-state-default", hoverClass: "ui-state-hover", accept: ":not(.ui-sortable-helper)", drop: function( event, ui ) { $( this ).find( ".placeholder" ).remove(); var a = ui.draggable.find('.this_a').text() var b = ui.draggable.find('.this_b').text() var that =$(this) var item = $(this).find('li') var i_length = item.length if(item.length>0){ item.each(function(i,d){ if($(d).find('a').text() == b && $(d).find('a').attr('data_id') == a){ //有历史数据,去重 return false; } else{ if(i==i_length-1){ //遍历所有,保证没重复的,创建新数据 $( '<li class="ERP_moving"><a href="javascript:void(0);" data_id='+a+'>'+b+'</a></li>').appendTo(that); return false; } } }) } else{ //最初始无数据,创建新数据 $( '<li class="ERP_moving "><a href="javascript:void(0);" data_id='+a+'>'+b+'</a></li>').appendTo(that); } } }).sortable({ items: "li:not(.placeholder)", sort: function() { // 获取由 droppable 与 sortable 交互而加入的条目 // 使用 connectWithSortable 可以解决这个问题,但不允许您自定义 active/hoverClass 选项 $( this ).removeClass( "ui-state-default" ); } }); $("ul, li").disableSelection();