• <small id='2eF4w'></small><noframes id='2eF4w'>

      <i id='2eF4w'><tr id='2eF4w'><dt id='2eF4w'><q id='2eF4w'><span id='2eF4w'><b id='2eF4w'><form id='2eF4w'><ins id='2eF4w'></ins><ul id='2eF4w'></ul><sub id='2eF4w'></sub></form><legend id='2eF4w'></legend><bdo id='2eF4w'><pre id='2eF4w'><center id='2eF4w'></center></pre></bdo></b><th id='2eF4w'></th></span></q></dt></tr></i><div id='2eF4w'><tfoot id='2eF4w'></tfoot><dl id='2eF4w'><fieldset id='2eF4w'></fieldset></dl></div>
    1. <legend id='2eF4w'><style id='2eF4w'><dir id='2eF4w'><q id='2eF4w'></q></dir></style></legend>
      <tfoot id='2eF4w'></tfoot>

        <bdo id='2eF4w'></bdo><ul id='2eF4w'></ul>

        js拖拽排序插件Sortable.js如何使用

        由于项目功能需要,要实现对table中的行实现拖拽排序功能,找来找去发现Sortable.js能很好的满足这个需求,而且它还是开源的,于是乎就开始学习使用Sortable.js 特点 轻量级但功能强大 移动列表项时有动画 支持触屏设备和大多数浏览器(IE9及以下除外) 支持

            <bdo id='LKfJT'></bdo><ul id='LKfJT'></ul>
            <i id='LKfJT'><tr id='LKfJT'><dt id='LKfJT'><q id='LKfJT'><span id='LKfJT'><b id='LKfJT'><form id='LKfJT'><ins id='LKfJT'></ins><ul id='LKfJT'></ul><sub id='LKfJT'></sub></form><legend id='LKfJT'></legend><bdo id='LKfJT'><pre id='LKfJT'><center id='LKfJT'></center></pre></bdo></b><th id='LKfJT'></th></span></q></dt></tr></i><div id='LKfJT'><tfoot id='LKfJT'></tfoot><dl id='LKfJT'><fieldset id='LKfJT'></fieldset></dl></div>
            • <small id='LKfJT'></small><noframes id='LKfJT'>

              <tfoot id='LKfJT'></tfoot><legend id='LKfJT'><style id='LKfJT'><dir id='LKfJT'><q id='LKfJT'></q></dir></style></legend>
                    <tbody id='LKfJT'></tbody>
                  由于项目功能需要,要实现对table中的行实现拖拽排序功能,找来找去发现Sortable.js能很好的满足这个需求,而且它还是开源的,于是乎就开始学习使用Sortable.js

                  特点

                  轻量级但功能强大
                  移动列表项时有动画
                  支持触屏设备和大多数浏览器(IE9及以下除外)
                  支持单个列表容器内部拖拽排序,也支持两个列表容器互相拖拽排序
                  支持拖放操作和可选择的文本
                  非常友善的滚动效果
                  基于原生HTML5中的拖放API
                  支持多种框架(Angular、Vue、React等)
                  支持所有的CSS框架,如:Bootstrap
                  简单的API,方便调用
                  CDN
                  不依赖于jQuery

                  下载地址

                  下载地址:GitHub - SortableJS/Sortable: Reorderable drag-and-drop lists for modern browsers and touch devices. No jQuery or framework required.
                  官方Demo:http://rubaxa.github.io/Sortable/

                  如何使用

                  单个列表容器内部拖拽排序

                  <head>
                      <script src="~/Scripts/jquery-3.3.1.min.js"></script>
                      <script src="~/Scripts/Sortable-master/Sortable.min.js"></script>
                      <script type="text/javascript">
                          $(document).ready(function () {
                              var ul = document.getElementById("infos");
                              var sortable = new Sortable(ul, {
                                  handle: "input,li",//设置li、input支持拖拽
                                  animation: 150,//设置动画时长
                   
                                  // Element dragging started
                                  onStart: function (/**Event*/evt) {
                                      evt.oldIndex;  // element index within parent,此处指的是li的索引值
                                  },
                   
                                  // Element dragging ended
                                  onEnd: function (/**Event*/evt) {
                                      var lis = $("#infos li");
                                      //拖拽完毕后重新设置序号,使其连续
                                      for (var i = 0; i < lis.length; i++) {
                                          var no = $(lis[i]).find("input:eq(0)");
                                          no.val(i + 1);
                                      }
                                  }
                              });
                          });
                      </script>
                      <style>
                          li{
                              cursor:pointer;
                              padding-bottom:5px;
                              list-style:none;
                          }
                      </style>
                  </head>
                  <body>
                      <ul id="infos">
                          <li>
                              <input type="text" value="1" />
                              <input type="text" value="hierarchy" />
                              <select>
                                  <option value="">--请选择--</option>
                                  <option value="1">objective</option>
                                  <option value="2">proposition</option>
                              </select>
                          </li>
                          <li>
                              <input type="text" value="2" />
                              <input type="text" value="hierarchy" />
                              <select>
                                  <option value="">--请选择--</option>
                                  <option value="1">eliminate</option>
                                  <option value="2">alige</option>
                              </select>
                          </li>
                          <li>
                              <input type="text" value="3" />
                              <input type="text" value="hierarchy" />
                              <select>
                                  <option value="">--请选择--</option>
                                  <option value="1">optimize</option>
                                  <option value="2">deploy</option>
                              </select>
                          </li>
                      </ul>
                  </body>

                  两个列表容器相互拖拽排序

                  <head>
                      <script src="~/Scripts/jquery-3.3.1.min.js"></script>
                      <script src="~/Scripts/Sortable-master/Sortable.min.js"></script>
                      <script type="text/javascript">
                          $(document).ready(function () {
                              var infosOne = document.getElementById("infosOne");
                              var sortableOne = new Sortable(infosOne, {
                                  group: "guo",//若需要在两个列表容器间拖拽排序,那group的值必须相同
                                  handle: "input,li",//设置li、input支持拖拽
                                  animation: 150,//设置动画时长
                   
                                  // Element dragging started
                                  onStart: function (/**Event*/evt) {
                                      evt.oldIndex;  // element index within parent,此处指的是li的索引值
                                  },
                   
                                  // Element dragging ended
                                  onEnd: function (/**Event*/evt) {
                                      var lis = $("#infosOne li");
                                      for (var i = 0; i < lis.length; i++) {
                                          var no = $(lis[i]).find("input:eq(0)");
                                          no.val(i + 1);
                                      }
                   
                                      lis = $("#infosTwo li");
                                      for (var i = 0; i < lis.length; i++) {
                                          var no = $(lis[i]).find("input:eq(0)");
                                          no.val(i + 1);
                                      }
                                  }
                              });
                   
                              var infosTwo = document.getElementById("infosTwo");
                              var sortableTwo = new Sortable(infosTwo, {
                                  group:"guo",//若需要在两个列表容器间拖拽排序,那group的值必须相同
                                  handle: "input,li",//设置li、input支持拖拽
                                  animation: 150,//设置动画时长
                   
                                  // Element dragging started
                                  onStart: function (/**Event*/evt) {
                                      evt.oldIndex;  // element index within parent,此处指的是li的索引值
                                  },
                   
                                  // Element dragging ended
                                  onEnd: function (/**Event*/evt) {
                                      var lis = $("#infosOne li");
                                      for (var i = 0; i < lis.length; i++) {
                                          var no = $(lis[i]).find("input:eq(0)");
                                          no.val(i + 1);
                                      }
                   
                                      lis = $("#infosTwo li");
                                      for (var i = 0; i < lis.length; i++) {
                                          var no = $(lis[i]).find("input:eq(0)");
                                          no.val(i + 1);
                                      }
                                  }
                              });
                          });
                      </script>
                  </head>
                  <body>
                      <ul id="infosOne">
                          <li>
                              <input type="text" value="1" />
                              <input type="text" value="hierarchy" />
                              <select>
                                  <option value="">--请选择--</option>
                                  <option value="1">objective</option>
                                  <option value="2">proposition</option>
                              </select>
                          </li>
                          <li>
                              <input type="text" value="2" />
                              <input type="text" value="hierarchy" />
                              <select>
                                  <option value="">--请选择--</option>
                                  <option value="1">eliminate</option>
                                  <option value="2">alige</option>
                              </select>
                          </li>
                          <li>
                              <input type="text" value="3" />
                              <input type="text" value="hierarchy" />
                              <select>
                                  <option value="">--请选择--</option>
                                  <option value="1">optimize</option>
                                  <option value="2">deploy</option>
                              </select>
                          </li>
                      </ul>
                      <hr />
                      <ul id="infosTwo">
                          <li>
                              <input type="text" value="1" />
                              <input type="text" value="hierarchy" />
                              <select>
                                  <option value="">--请选择--</option>
                                  <option value="1">目标任务</option>
                                  <option value="2">论题议题</option>
                              </select>
                          </li>
                          <li>
                              <input type="text" value="2" />
                              <input type="text" value="hierarchy" />
                              <select>
                                  <option value="">--请选择--</option>
                                  <option value="1">消除排除</option>
                                  <option value="2">机敏的敏捷的</option>
                              </select>
                          </li>
                          <li>
                              <input type="text" value="3" />
                              <input type="text" value="hierarchy" />
                              <select>
                                  <option value="">--请选择--</option>
                                  <option value="1">优化使最优化</option>
                                  <option value="2">发布部署</option>
                              </select>
                          </li>
                      </ul>
                  </body>

                  常见配置项及事件

                  var sortable = new Sortable(el, {
                  	group: "name",  // or { name: "...", pull: [true, false, clone], put: [true, false, array] }
                  	sort: true,  // sorting inside list
                  	delay: 0, // time in milliseconds to define when the sorting should start
                  	touchStartThreshold: 0, // px, how many pixels the point should move before cancelling a delayed drag event
                  	disabled: false, // Disables the sortable if set to true.
                  	store: null,  // @see Store
                  	animation: 150,  // ms, animation speed moving items when sorting, `0` — without animation
                  	handle: ".my-handle",  // Drag handle selector within list items
                  	filter: ".ignore-elements",  // Selectors that do not lead to dragging (String or Function)
                  	preventOnFilter: true, // Call `event.preventDefault()` when triggered `filter`
                  	draggable: ".item",  // Specifies which items inside the element should be draggable
                  	ghostClass: "sortable-ghost",  // Class name for the drop placeholder
                  	chosenClass: "sortable-chosen",  // Class name for the chosen item
                  	dragClass: "sortable-drag",  // Class name for the dragging item
                  	dataIdAttr: 'data-id',
                   
                  	forceFallback: false,  // ignore the HTML5 DnD behaviour and force the fallback to kick in
                   
                  	fallbackClass: "sortable-fallback",  // Class name for the cloned DOM Element when using forceFallback
                  	fallbackOnBody: false,  // Appends the cloned DOM Element into the Document's Body
                  	fallbackTolerance: 0, // Specify in pixels how far the mouse should move before it's considered as a drag.
                   
                  	scroll: true, // or HTMLElement
                  	scrollFn: function(offsetX, offsetY, originalEvent, touchEvt, hoverTargetEl) { ... }, // if you have custom scrollbar scrollFn may be used for autoscrolling
                  	scrollSensitivity: 30, // px, how near the mouse must be to an edge to start scrolling.
                  	scrollSpeed: 10, // px
                   
                  	setData: function (/** DataTransfer */dataTransfer, /** HTMLElement*/dragEl) {
                  		dataTransfer.setData('Text', dragEl.textContent); // `dataTransfer` object of HTML5 DragEvent
                  	},
                   
                  	// Element is chosen
                  	onChoose: function (/**Event*/evt) {
                  		evt.oldIndex;  // element index within parent
                  	},
                   
                  	// Element dragging started
                  	onStart: function (/**Event*/evt) {
                  		evt.oldIndex;  // element index within parent
                  	},
                   
                  	// Element dragging ended
                  	onEnd: function (/**Event*/evt) {
                  		var itemEl = evt.item;  // dragged HTMLElement
                  		evt.to;    // target list
                  		evt.from;  // previous list
                  		evt.oldIndex;  // element's old index within old parent
                  		evt.newIndex;  // element's new index within new parent
                  	},
                   
                  	// Element is dropped into the list from another list
                  	onAdd: function (/**Event*/evt) {
                  		// same properties as onEnd
                  	},
                   
                  	// Changed sorting within list
                  	onUpdate: function (/**Event*/evt) {
                  		// same properties as onEnd
                  	},
                   
                  	// Called by any change to the list (add / update / remove)
                  	onSort: function (/**Event*/evt) {
                  		// same properties as onEnd
                  	},
                   
                  	// Element is removed from the list into another list
                  	onRemove: function (/**Event*/evt) {
                  		// same properties as onEnd
                  	},
                   
                  	// Attempt to drag a filtered element
                  	onFilter: function (/**Event*/evt) {
                  		var itemEl = evt.item;  // HTMLElement receiving the `mousedown|tapstart` event.
                  	},
                   
                  	// Event when you move an item in the list or between lists
                  	onMove: function (/**Event*/evt, /**Event*/originalEvent) {
                  		// Example: http://jsbin.com/tuyafe/1/edit?js,output
                  		evt.dragged; // dragged HTMLElement
                  		evt.draggedRect; // TextRectangle {left, top, right и bottom}
                  		evt.related; // HTMLElement on which have guided
                  		evt.relatedRect; // TextRectangle
                  		originalEvent.clientY; // mouse position
                  		// return false; — for cancel
                  	},
                   
                  	// Called when creating a clone of element
                  	onClone: function (/**Event*/evt) {
                  		var origEl = evt.item;
                  		var cloneEl = evt.clone;
                  	}
                  });

                  属性

                  group:string or array

                  sort:boolean 定义是否列表单元是否可以在列表容器内进行拖拽排序;

                  delay:number 定义鼠标选中列表单元可以开始拖动的延迟时间;

                  disabled:boolean 定义是否此sortable对象是否可用,为true时sortable对象不能拖放排序等功能,为false时为可以进行排序,相当于一个开关;

                  animation:number 单位:ms,定义排序动画的时间;

                  handle:selector 格式为简单css选择器的字符串,使列表单元中符合选择器的元素成为拖动的手柄,只有按住拖动手柄才能使列表单元进行拖动;

                  filter:selector 格式为简单css选择器的字符串,定义哪些列表单元不能进行拖放,可设置为多个选择器,中间用“,”分隔;

                  draggable:selector 格式为简单css选择器的字符串,定义哪些列表单元可以进行拖放

                  ghostClass:selector 格式为简单css选择器的字符串,当拖动列表单元时会生成一个副本作为影子单元来模拟被拖动单元排序的情况,此配置项就是来给这个影子单元添加一个class,我们可以通过这种方式来给影子元素进行编辑样式;

                  chosenClass:selector 格式为简单css选择器的字符串,当选中列表单元时会给该单元增加一个class;

                  forceFallback:boolean 如果设置为true时,将不使用原生的html5的拖放,可以修改一些拖放中元素的样式等;

                  fallbackClass:string 当forceFallback设置为true时,拖放过程中鼠标附着单元的样式;

                  scroll:boolean 默认为true,当排序的容器是个可滚动的区域,拖放可以引起区域滚动
                  事件:

                  onChoose:function 列表单元被选中的回调函数

                  onStart:function 列表单元拖动开始的回调函数

                  onEnd:function 列表单元拖放结束后的回调函数

                  onAdd:function 列表单元添加到本列表容器的回调函数

                  onUpdate:function 列表单元在列表容器中的排序发生变化后的回调函数

                  onRemove:function 列表元素移到另一个列表容器的回调函数

                  onFilter:function 试图选中一个被filter过滤的列表单元的回调函数

                  onMove:function 当移动列表单元在一个列表容器中或者多个列表容器中的回调函数

                  onClone:function 当创建一个列表单元副本的时候的回调函数
                  事件对象:

                  事件对象在各个函数中略有不同,可通过输出对象查看对象的属性,下面简单列举几个:

                  to:HTMLElement--移动到列表容器

                  from:HTMLElement--来源的列表容器

                  item:HTMLElement--被移动的列表单元

                  clone:HTMLElement--副本的列表单元

                  oldIndex:number/undefined--在列表容器中的原序号

                  newIndex:number/undefined--在列表容器中的新序号

                  方法

                  option(name[,value])
                  获得或者设置项参数,使用方法类似于jQuery用法,没有第二个参数为获得option中第一个参数所对应的值,有第二个参数时,将重新赋给第一个参数所对应的值;

                  closest
                  返回满足selector条件的元素集合中的第一个项

                  toArray()
                  序列化可排序的列表单元的data-id(可通过配置项中dataIdAttr修改)放入一个数组,并返回这个数组中

                  sort()
                  通过自定义列表单元的data-id的数组对列表单元进行排序

                  save()

                  destroy()
                   
                  本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

                  相关文档推荐

                  DEDE默认的搜索功能,所得到的结果是按照文章加入的先后排序的 很多时候,我们希望得到的结果按点击数排序,点击多的排前面。 那么就修改这一个地方: include/inc_arcsaerch_view.php的大概第48行,将: $this-OrderBy = 'dede_full_search.aid desc'; 改为
                  1、通过对象遍历参数 function GetUrlRequest() { var url = location.search; //获取url中"?"符后的字串 var tRequest = new Object(); if (url.indexOf("?") != -1) { //判断 URL 中是否包含查询字符串 var str = url.substr(1); //如果 URL 中包含查询字符
                  系统开发中,处理 JSON 数据是一个常见的任务。此篇文章将引导你逐步了解如何使用 JavaScript 提取 JSON 数组中的数据,从而帮助你熟悉基础的 JSON 操作。 一、整体流程 下面是整个流程的简要概述,其中包含从获取 JSON 数据到提取所需信息的步骤: 步骤 说明
                  使用value属性获取前两个文本框的值,转换为数字相加后,使用value属性设置第三个文本框的值。示例如下: 1、HTML结构: input id="add1" type="text"/nbsp;+nbsp;input id="add2" type="text"/nbsp;=nbsp;input id="sum" type="text"/ 2、javascript代码: w
                  将数据保存为JSON文件: filename = '1.json'file_obj= open(filename, 'w')//此处是代码,返回值为XXXXXXXXXjson.dump(XXXXXXXXX,file_obj,indent=4,ensure_ascii=False) XXXXXXX ,表示需要保存的数据 file_obj ,定义的json对象; indent=4 每写入一句,就
                  KnockoutJS是一款流行的JavaScript库,针对一个web应用程序的建立提供了比较好的基础架构。其中,表单的数据绑定功能是KnockoutJS最为常用的功能之一。本文将详细讲解KnockoutJS 3.x
                    <bdo id='gSDZW'></bdo><ul id='gSDZW'></ul>
                      • <legend id='gSDZW'><style id='gSDZW'><dir id='gSDZW'><q id='gSDZW'></q></dir></style></legend>

                          <small id='gSDZW'></small><noframes id='gSDZW'>

                          <tfoot id='gSDZW'></tfoot>
                              <tbody id='gSDZW'></tbody>

                          1. <i id='gSDZW'><tr id='gSDZW'><dt id='gSDZW'><q id='gSDZW'><span id='gSDZW'><b id='gSDZW'><form id='gSDZW'><ins id='gSDZW'></ins><ul id='gSDZW'></ul><sub id='gSDZW'></sub></form><legend id='gSDZW'></legend><bdo id='gSDZW'><pre id='gSDZW'><center id='gSDZW'></center></pre></bdo></b><th id='gSDZW'></th></span></q></dt></tr></i><div id='gSDZW'><tfoot id='gSDZW'></tfoot><dl id='gSDZW'><fieldset id='gSDZW'></fieldset></dl></div>