jQuery拖放与sortable

时间:2013-01-27 17:15:12

标签: javascript jquery arrays drag-and-drop jquery-ui-sortable

我在尝试使用某些拖放元素上的sortable从JS中获取数组时遇到问题。 可以在以下位置找到工作演示:

Example

我需要实现的目标:

  1. 在图片上拖动项目,获取x,y(完成)
  2. 放完所有项目后,使用jQuery可排序?使用x,y坐标获取id的数组。
  3. 阵列(23456-> {XPOS:234,ypos:234},23456-> {XPOS:234,ypos:234},....等

    我不确定如何将sortable绑定到仅放在图像上的项目,然后将这些值绑定到数组中

    以下是目前的代码:

    jQuery(function($){
    
    $('.dragThis').bind('click', function(){
            $(this).css("border","3px solid #fff");
    
            $(this).draggable({
                                containment: $('body'),
                                drag: function(){
                                        $('#dropHere').droppable({
                                            accept: '.dragThis',
                                            over : function(){
                                            $(this).animate({'border-width' : '3px', 'border-color' : '#0f0'}, 500);
    
                                            }
                                        });
    
                                    },
                                stop: function(){
    
                                        var position = $(this).position();
                                        var parentPos = $('#dropHere').offset();
                                        var xPos = position.left - parentPos.left;
                                        var yPos = position.top - parentPos.top;
                                        var finalOffset = $(this).position();
                                        var finalxPos = xPos;
                                        var finalyPos = yPos;
                                        $('#finalX').text('Final X: ' + finalxPos);
                                        $('#finalY').text('Final Y: ' + finalyPos);
                                        //$('.dragThis').sortable();
                                        console.log (finalxPos,finalyPos,$(this).attr("id"));
                                    },
                                revert: 'invalid'
                                //connectToSortable: '#dropHere'
            });
    
        });
    
    });
    

    任何帮助指向正确的方向,非常感谢。 为了澄清,我将通过AJAX将值写入数据库,以便稍后召回。

    提前致谢

1 个答案:

答案 0 :(得分:1)

简单的解决方案:

  1. 在他们自己的'drop'事件中为这些元素添加一个类,然后让所有这些元素都有一个带选择器的类。

  2. 之后,方便的$.fn.each()$.fn.offset()会有所帮助。

  3. 然后,您可以使用topleft代替您提及的xposypos来处理这些坐标。

  4. 以下是一个例子:

    var coordinates = {};
    
    $(".dropped").each(function(item) {
        coordinates[$(item).attr("id")] = $(item).offset();
    });
    
相关问题