Is there a way to do drag-and-drop re-ordering of the preview elements in a dropzone.js instance?

后端 未结 3 1041
情歌与酒
情歌与酒 2021-02-02 14:41

I have a dropzone.js instance on a web page with the following options:

autoProcessQueue:false
uploadMultiple:true
parallelUploads:20
maxFiles:20
相关标签:
3条回答
  • 2021-02-02 15:07

    Here's another option without any plugins. On the success event callback, you can do some manual sorting:

       var rows = $('#dropzoneForm').children('.dz-image-preview').get();
    
        rows.sort(function (row1, row2) {
            var Row1 = $(row1).children('.preview').find('img').attr('alt');   
            var Row2 = $(row2).children('.preview').find('img').attr('alt');
            if (Row1 < Row2) {
                return -1;
            }
    
            if (Row1 > Row2) {
                return 1;
            }
            return 0;
        });
    
    
        $.each(rows, function (index, row) {
            $('#dropzoneForm').append(row);
        });
    
    0 讨论(0)
  • 2021-02-02 15:25

    I've got it working now using jquery-ui's sortable. The trick was to make sure to use the 'items' option in sortable to pick only the dz-preview elements, because dropzone.js has the dz-message element along with the dz-preview elements in the main container. Here's how my code looks:

    The HTML:

    <div id="image-dropzone" class="dropzone square">
    

    The script:

    $(function() {
        $("#image-dropzone").sortable({
            items:'.dz-preview',
            cursor: 'move',
            opacity: 0.5,
            containment: '#image-dropzone',
            distance: 20,
            tolerance: 'pointer'
        });
    })
    
    0 讨论(0)
  • 2021-02-02 15:31

    Besides the code from ralbatross you will need to set the order of the file queue of dropzone..

    Something like:

    $("#uploadzone").sortable({
        items: '.dz-preview',
        cursor: 'move',
        opacity: 0.5,
        containment: '#uploadzone',
        distance: 20,
        tolerance: 'pointer',
        stop: function () {
    
            var queue = uploadzone.files;
            $('#uploadzone .dz-preview .dz-filename [data-dz-name]').each(function (count, el) {           
                var name = el.getAttribute('data-name');
                queue.forEach(function(file) {
                   if (file.name === name) {
                        newQueue.push(file);
                   }
                });
            });
    
            uploadzone.files = newQueue;
    
        }
    });
    

    And remember that the file is processed async, i keep an hashtable for reference when the file is done and save the order at the end.

    It doesn't work with duplicate filenames

    0 讨论(0)
提交回复
热议问题