sort.js 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. let draggedItem = null;
  2. let draggedItemIndex = null;
  3. document.querySelectorAll('.list-item').forEach(item => {
  4. item.addEventListener('mousedown', function() {
  5. draggedItem = item;
  6. // 获取当前item在list-item中的索引
  7. const parentNode = item.parentNode;
  8. draggedItemIndex = Array.from(parentNode.children).indexOf(draggedItem);
  9. item.setAttribute('draggable', true);
  10. });
  11. item.addEventListener('dragstart', function() {
  12. });
  13. item.addEventListener('dragover', function(e) {
  14. e.preventDefault();
  15. if (draggedItem !== item) {
  16. item.style.border = '1px dashed #d4d4d5';
  17. }
  18. });
  19. item.addEventListener('dragleave', function() {
  20. item.style.border = '';
  21. });
  22. item.addEventListener('drop', function() {
  23. item.style.border = '';
  24. if (draggedItem !== null) {
  25. const parentNode = item.parentNode;
  26. const draggedIndex = Array.from(parentNode.children).indexOf(draggedItem);
  27. const targetIndex = Array.from(parentNode.children).indexOf(item);
  28. if (draggedIndex < targetIndex) {
  29. parentNode.insertBefore(draggedItem, item.nextSibling);
  30. } else {
  31. parentNode.insertBefore(draggedItem, item);
  32. }
  33. // 获取当前最新的data-id属性列表 去除null
  34. const newSortList = Array.from(parentNode.children).map(item => item.getAttribute('data-id')).filter(item => item !== null);
  35. const newSortListStr = newSortList.join(',');
  36. // 更新排序
  37. $.ajax({
  38. url: window.updateBookOrder,
  39. type: 'POST',
  40. data: {
  41. ids: newSortListStr,
  42. },
  43. success: function (res) {
  44. if (res.errcode === 0) {
  45. layer.msg("排序成功", {icon: 1});
  46. draggedItem = null;
  47. } else {
  48. layer.msg(res.message, {icon: 2});
  49. const parentNode = item.parentNode;
  50. // 在parentNode中找到当前拖拽的item
  51. const draggedIndex = Array.from(parentNode.children).indexOf(draggedItem);
  52. console.log('draggedIndex:', draggedIndex);
  53. // 移除当前拖拽的item
  54. parentNode.removeChild(draggedItem);
  55. // 将draggedItem放到原来的位置
  56. parentNode.insertBefore(draggedItem, parentNode.children[draggedItemIndex]);
  57. draggedItem = null;
  58. }
  59. },
  60. error: function (err) {
  61. console.log('error:', err)
  62. draggedItem = null;
  63. }
  64. })
  65. }
  66. });
  67. });