<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        JS拖拽排序插件Sortable.js用法實例分析

        來源:懂視網 責編:小采 時間:2020-11-27 22:00:41
        文檔

        JS拖拽排序插件Sortable.js用法實例分析

        JS拖拽排序插件Sortable.js用法實例分析:本文實例講述了JS拖拽排序插件Sortable.js用法。分享給大家供大家參考,具體如下: 最近由于項目功能設計的原因,需要對table中的行實現拖拽排序功能,找來找去發現Sortable.js能很好的滿足這個需求,而且它還是開源的,于是乎就開始學習使用Sortable
        推薦度:
        導讀JS拖拽排序插件Sortable.js用法實例分析:本文實例講述了JS拖拽排序插件Sortable.js用法。分享給大家供大家參考,具體如下: 最近由于項目功能設計的原因,需要對table中的行實現拖拽排序功能,找來找去發現Sortable.js能很好的滿足這個需求,而且它還是開源的,于是乎就開始學習使用Sortable

        本文實例講述了JS拖拽排序插件Sortable.js用法。分享給大家供大家參考,具體如下:

        最近由于項目功能設計的原因,需要對table中的行實現拖拽排序功能,找來找去發現Sortable.js能很好的滿足這個需求,而且它還是開源的,于是乎就開始學習使用Sortable.js,再然后就有了這篇文章。

        特點:

      1. 輕量級但功能強大
      2. 移動列表項時有動畫
      3. 支持觸屏設備和大多數瀏覽器(IE9及以下除外)
      4. 支持單個列表容器內部拖拽排序,也支持兩個列表容器互相拖拽排序
      5. 支持拖放操作和可選擇的文本
      6. 非常友善的滾動效果
      7. 基于原生HTML5中的拖放API
      8. 支持多種框架(Angular、Vue、React等)
      9. 支持所有的CSS框架,如:Bootstrap
      10. 簡單的API,方便調用
      11. CDN
      12. 不依賴于jQuery
      13. 下載地址:https://github.com/RubaXa/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()

        PS:這里再為大家推薦一款關于排序的演示工具供大家參考:

        在線動畫演示插入/選擇/冒泡/歸并/希爾/快速排序算法過程工具:
        http://tools.jb51.net/aideddesign/paixu_ys

        更多關于JavaScript相關內容感興趣的讀者可查看本站專題:《JavaScript表格(table)操作技巧大全》、《JavaScript操作DOM技巧總結》、《JavaScript遍歷算法與技巧總結》、《JavaScript數學運算用法總結》、《JavaScript數據結構與算法技巧總結》、《JavaScript查找算法技巧總結》及《JavaScript錯誤與調試技巧總結》

        希望本文所述對大家JavaScript程序設計有所幫助。

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        JS拖拽排序插件Sortable.js用法實例分析

        JS拖拽排序插件Sortable.js用法實例分析:本文實例講述了JS拖拽排序插件Sortable.js用法。分享給大家供大家參考,具體如下: 最近由于項目功能設計的原因,需要對table中的行實現拖拽排序功能,找來找去發現Sortable.js能很好的滿足這個需求,而且它還是開源的,于是乎就開始學習使用Sortable
        推薦度:
        標簽: 使用 插件 js
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲av无码国产精品色午夜字幕| 亚洲an天堂an在线观看| 亚洲欧洲日本在线| 免费的黄色网页在线免费观看| 午夜高清免费在线观看| 国产黄色一级毛片亚洲黄片大全 | 亚洲丝袜美腿视频| 久久一区二区三区免费| 免费可以在线看A∨网站| 国产亚洲精品成人AA片新蒲金| 亚洲资源最新版在线观看| jizz免费在线观看| 日韩一级在线播放免费观看| 亚洲精品白浆高清久久久久久| 国产在线播放线91免费| 亚洲AV日韩AV永久无码绿巨人| 亚洲视频在线观看免费视频| 亚洲国产系列一区二区三区| 永久免费av无码网站大全| 中文字幕亚洲免费无线观看日本| jizz18免费视频| 久久亚洲精品AB无码播放| 青娱分类视频精品免费2| 亚洲图片在线观看| 久久不见久久见免费影院 | 一级一级一级毛片免费毛片| 亚洲熟妇av一区二区三区| 91精品手机国产免费| 亚洲综合AV在线在线播放| 人妻无码久久一区二区三区免费| 亚洲中文字幕不卡无码| 1000部国产成人免费视频| 亚洲AV综合永久无码精品天堂| 亚洲最大免费视频网| 在线视频亚洲一区| 久久国产精品亚洲综合| 毛片免费全部免费观看| a级在线免费观看| 亚洲色偷偷色噜噜狠狠99| 久久久久亚洲精品无码网址 | 青青草97国产精品免费观看|