https://blog.csdn.net/u013066244/article/details/51954198

<link ref="stylesheet" href="jquery-ui.min.css"/>
<script type="text/javascript" src="jquery.min.js"></script>
<script type="text/javascript" src="jquery-ui.min.js"></script>

<div class="form-group">
  <label class="control-label col-sm-1">曲谱图片</label>
  <ul id="layer-img" class="control-label col-sm-9 sortable" style="text-align: left;">
    <volist name="data.image" id="image">
      <li class="portlet" style="display: inline-block" id="{$image['id']}">
        <img id="sheet_img{$image['id']}" src="{$image['url']}" alt="">
      </li>
    </volist>
  </ul>
</div>

<script>
$('.sortable').sortable({
items: "li", //只是li可以拖动
opacity: 0.6, //拖动时,透明度为0.6
cursor: "move", // 拖拽时的鼠标形状
     forceHelperSize: true, // 自适应placeholder的大小
//appendTo: '.drag-task', // 拖拽的父级节点(该节点一定要注意,配置错误会导致当前屏幕外的元素没法自动滚动拖拽,两列之间拖拽的滚动也会出问题)
placeholder: "portel-placeholder" //设定占位符,事先设定占位符的样式,拖曳时会出现占位符
// 拖拽时的倾斜度
rotate: '5deg',
// 延迟时间(毫秒),避免和click同时操作时出现的冲突
delay: 150,
// 以clone方式拖拽
helper: 'clone',
// 拖拽到边框出现滚动的间距,
scrollSensitivity:scrollingSensitivity,
// 应用于拖拽空白区域的样式
placeholder: 'portlet-placeholder ui-state-highlight',
// 允许拖拽预留空白区域
     forcePlaceholderSize: true,
     // 多个列表之间的拖拽的dom元素
//connectWith: '.task-lists',
update: function() { //因为是要拖曳改变图片顺序,所以选择update,拖曳更新后调用函数
var image_ids = $('.sortable').sortable('toArray', {attribute: id});//获取class为sortable的子级的id属性值,并转化为数组;
$.ajax({
type: "post",
url: "",
data: {image_ids},
dataType: "json",
success: function(result) {
window.location.reload(); //后台获取到数据刷新页面
}
});
}
});
</script>
stop: (e, ui) => {
// 当前拽入的元素
let item = $(ui.item)
// 当前拽入元素的下标
let index = item.index()
let kid = ''
// xxxx 这里面可以操作数据更新
},
// 开始拖拽时的函数
start: (e, ui) => {
// 拖拽前的父级节点
dragBeforeParentNode = ui.item[0].parentNode
// 让placeholder和源高度一致
ui.placeholder.height(ui.helper[0].scrollHeight).width(258)
// xxxx 这里可以记录一些拖拽前的元素属性
},
// 处理两列滚动条问题
sort:function(event, ui){
var scrollContainer = ui.placeholder[0].parentNode
// 跨列拖拽的情况
if (dragBeforeParentNode && dragBeforeParentNode.id !== scrollContainer.id) {
// 设置拽入的列表的滚动位置
var overflowOffset = $(scrollContainer).offset()
if((overflowOffset.top + scrollContainer.offsetHeight) - event.pageY < scrollingSensitivity) {
scrollContainer.scrollTop = scrollContainer.scrollTop + scrollingSpeed
} else if(event.pageY - overflowOffset.top < scrollingSensitivity) {
scrollContainer.scrollTop = scrollContainer.scrollTop - scrollingSpeed
}
}
}
sort:function(e, ui){
array = [];
select_item = ui.item; //当前拖动的元素
var select_id = select_item.attr("id");
select_sort = select_item.attr("sort"); //当前元素的顺序
//alert(select_item);
place_item = $(this).find('tr').filter('.ui-sortable-placeholder').next('tr');//新位置下的下一个元素
place_sort = place_item.attr('sort'); place_sx = parseInt(place_sort);
select_sx = parseInt(select_sort); if(select_sx > place_sx){ //说明是 向上移动
//array.push(select_id);
temp = place_sort;
place_sx = select_sort;//最大
select_sx = temp;//最小
flag = false;
}else{ //向下移动
place_sort = $(this).find('tr').filter('.ui-sortable-placeholder').prev('tr').attr('sort');
place_sx = parseInt(place_sort);
flag = true;
}
},
stop:function(e, ui){
//ui.item.removeClass("ui-state-highlight"); //释放鼠标时,要用ui.item才是释放的行
//发送请求,对sort字段进行修改
//alert(ui.item.attr("id"));//可以拿到id
//alert(ui.position.top);//可以拿到id
var temp = "";
#{list items:eventTypeList, as:'n'}
var sort = parseInt(${n.sort});
if(sort >= select_sx && sort <= place_sx){ if(sort == parseInt(select_sort)){//当前拖拽的元素 向上拖拽,当前元素放在数组第一个,向下,放在数组最后一个
if(flag){//向下 - 按顺序来
temp = ${n.id};
}else{//向上排序
array.splice(0,0,${n.id});
}
}else{
array.push(${n.id});
}
}

 

最新文章

  1. 打造AngularJs2.0开发环境
  2. 通过Android录音进行简单音频分析
  3. [LintCode] Word Break
  4. [HDOJ5950]Recursive sequence(递推,二项展开,矩阵快速幂)
  5. python 练习 27
  6. grep简单常用的语法介绍
  7. mysql----用户root被删除或忘记root密码的解决方案
  8. 中转server
  9. MysqlRouter 实现mysql5.6读写分离
  10. JQ封装图片预加载插件
  11. 一:配置使用阿里云Maven库
  12. 读懂 Gradle 的 DSL
  13. CF908D New Year and Arbitrary Arrangement(期望Dp+数学)
  14. flume学习笔记——安装和使用
  15. cryptopunks测试代码cryptopunksmarket-setinitial.js
  16. 错误 Run-time error nnn at xxxx; 错误
  17. (转)C# WebApi 异常处理解决方案
  18. LIS严格递增和非递减模板
  19. Win10英文系统 JDK1.8安装及环境变量配置
  20. PHP获取当月天数,获取当月的每天的开始和结束的时间戳,获取当月每号

热门文章

  1. The requested profile &quot;account&quot; could not be activated because it does not exist 无法maven install的 解决办法,勾选红框选择的选项即可
  2. [Groovy]Groovy with Ant Task
  3. [Leetcode]015. 3Sum
  4. 待修改 URAL 1542
  5. day_02 循环格式化输出编码运算符
  6. IP 地址子网划分
  7. PreparedStatement是如何防止SQL注入的?
  8. [2019BUAA软工]团队项目选择
  9. c++判断两字符串是否相等
  10. 转 rac中并行 PARALLEL 的设置