el-tableドラッグソートを実現

24467 ワード

SortableJSは強力なJavaScriptドラッグストアです
特徴は次のとおりです.
  • 互換性-タッチスクリーンデバイスとほとんどのブラウザ
  • をサポート
  • 簡単-簡単なAPI、
  • を便利に使用
  • オリジナル-オリジナルHTML 5におけるドラッグアンドドロップAPIに基づく
  • CSSフレームワーク互換性-Bootstrap
  • のようなすべてのcssフレームワークをサポート
  • ゼロ依存-Jqueryなどの他のフレームワークに依存しない
  • SPAは良好なサポート-複数のフレームワーク(angular、vue、reactなど)
  • をサポート
    インストール
    npm install sortablejs --save
    

    構成関数
    setSort() {
            const el = document.querySelectorAll(
            '.el-table__body-wrapper > table > tbody'
            )[0];
            Sortable.create(el, {
                disabled: !this.enableDrag,
                ghostClass: 'sortable-ghost',
                setData: function(dataTransfer) {
                    dataTransfer.setData('Text', '');
                },
                onEnd: (evt) => {
     				
                }
            });
        },
    
    

    データのロードが完了すると、setSort()メソッドを呼び出してドラッグ・ソート機能をオンにします.
    構成の詳細:
    var sortable = new Sortable(el, {
        group: "name", // or { name: "...", pull: [true, false, 'clone', array], put: [true, false, array] }
        sort: true, // boolean                         
        delay: 0, // number                      ;
        touchStartThreshold: 0, // px, how many pixels the point should move before cancelling a delayed drag event
        disabled: false, // boolean      sortable      , true sortable           , false        ,       ;
        store: null, // @see Store
        animation: 150, // ms, number   :ms,         
        easing: "cubic-bezier(1, 0, 0, 1)", // Easing for animation. Defaults to null. See https://easings.net/ for examples.
        handle: ".my-handle", //      css       ,                     ,                   
        filter: ".ignore-elements", //    ,          
        preventOnFilter: true, //        `filter`     `event.preventDefault()`
        draggable: ".item", //          
        ghostClass: "sortable-ghost", // drop placeholder css  
        chosenClass: "sortable-chosen", //      css   
        dragClass: "sortable-drag", //        css  
        dataIdAttr: 'data-id',
     
        swapThreshold: 1, // Threshold of the swap zone
        invertSwap: false, // Will always use inverted swap zone if set to true
        invertedSwapThreshold: 1, // Threshold of the inverted swap zone (will be set to swapThreshold value by default)
        direction: 'horizontal', //      (            )
     
        forceFallback: false, //    HTML5    ,      
     
        fallbackClass: "sortable-fallback", //    forceFallback   ,    dom css  
        fallbackOnBody: false, //  cloned DOM     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
        bubbleScroll: true, // apply autoscroll to all parent elements, allowing for easier movement
     
        dragoverBubble: false,
        removeCloneOnHide: true, // Remove the clone element when it is not showing, rather than just hiding it
        emptyInsertThreshold: 5, // px, distance mouse must be from empty sortable to insert drag element into it
     
     
        setData: function( /** DataTransfer */ dataTransfer, /** HTMLElement*/ dragEl) {
            dataTransfer.setData('Text', dragEl.textContent); // `dataTransfer` object of HTML5 DragEvent
        },
     
        //      
        onChoose: function( /**Event*/ evt) {
            evt.oldIndex; // element index within parent
        },
     
        //          (       )
        onUnchoose: function( /**Event*/ evt) {
            // same properties as onEnd
        },
     
        //        
        onStart: function( /**Event*/ evt) {
            evt.oldIndex; // element index within parent
        },
     
        //     
        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
            evt.clone // the clone element
            evt.pullMode; // when item is in another sortable: `"clone"` if cloning, `true` if moving
        },
     
        //                
        onAdd: function( /**Event*/ evt) {
            // same properties as onEnd
        },
     
        //               
        onUpdate: function( /**Event*/ evt) {
            // same properties as onEnd
        },
     
        //            
        onSort: function( /**Event*/ evt) {
            // same properties as onEnd
        },
     
        //                
        onRemove: function( /**Event*/ evt) {
            // same properties as onEnd
        },
     
        //       filtered   
        onFilter: function( /**Event*/ evt) {
            var itemEl = evt.item; // HTMLElement receiving the `mousedown|tapstart` event.
        },
     
        //        
        onMove: function( /**Event*/ evt, /**Event*/ originalEvent) {
            // Example: https://jsbin.com/nawahef/edit?js,output
            evt.dragged; // dragged HTMLElement
            evt.draggedRect; // DOMRect {left, top, right, bottom}
            evt.related; // HTMLElement on which have guided
            evt.relatedRect; // DOMRect
            evt.willInsertAfter; // Boolean that is true if Sortable will insert drag element after target by default
            originalEvent.clientY; // mouse position
            // return false; ? for cancel
            // return -1; ? insert before target
            // return 1; ? insert after target
        },
     
        // clone         
        onClone: function( /**Event*/ evt) {
            var origEl = evt.item;
            var cloneEl = evt.clone;
        },
     
        //            
        onChange: function( /**Event*/ evt) {
            evt.newIndex // most likely why this event is used is to get the dragging element's current index
            // same properties as onEnd
        }
    });
    

    group:string or object
    string:   ,        id  ,                 ,  array  put        ;
    object: {
        name,
        pull,
        put
    }
    name:  string   ,
    pull: pull                  , true / false / 'clone' / function
    true:false:                 ;
        'clone':
          ,           ;
    function:     pull     ,         ,     return false / true       ;
    put: put                     , true / false / ['foo', 'bar'] / function
    true:falsetrue['foo', 'bar']:                    ,     group       name ;
    function:     put     ,         ,     return false / true

    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に設定されている場合、元のhtml 5のドラッグアンドドロップは使用されず、ドラッグアンドドロップの要素のスタイルなどを変更できます.
    fallbackClass:string forceFallbackがtrueに設定されている場合、ドラッグ&ドロップ中にマウスがセルをアタッチするスタイル.
    scroll:booleanのデフォルトはtrueです.ソートされたコンテナがスクロール可能な領域である場合、ドラッグ&ドロップによって領域がスクロールされます.
    ≪イベント|Events|ldap≫
    onChoose:functionリストユニットが選択されているコールバック関数
    onStart:functionリストユニットドラッグ開始コールバック関数
    onEnd:functionリストユニットドラッグアンドドロップ終了後のコールバック関数
    onAdd:functionリストユニットがこのリストコンテナに追加されたコールバック関数
    onUpdate:functionリストユニットリストコンテナ内のソートが変化した後のコールバック関数
    onRemove:functionリスト要素を別のリストコンテナに移動するコールバック関数
    onFilter:functionフィルタされたリストユニットのコールバック関数を選択しようとします
    onMove:function移動リストユニットが1つのリストコンテナまたは複数のリストコンテナ内のコールバック関数
    onClone:functionリストユニットのコピーを作成するときのコールバック関数