拖放jQuery UI

3

我已经用拖放jQuery UI做了一件小事情,它可以正常工作,但只有一个问题。

其中我有一个可拖动的div和一个可放置的区域,在拖动div时,当它落在可放置区域上时,会生成一个包含信息的div。这个过程可以正常工作,但是当生成的div太多时,它们超出了可放置区域的范围,并且所有的div都横向生成,那么该怎么处理呢?

以下是我的代码:

CSS:

#draggable_area

{
    width: 250px;
    height: 250px;
    border-radius: 250px;
    border : 3px solid black;
    position: absolute;
    left: 0px;
    right: 0px;
}
#droppable_area
{
    width: 500px;
    height: 500px;
    border : 3px solid black;
    position: absolute;
    left: 25%;
    top: 25%;

}

HTML:

<div id="droppable_area"></div>
<div id="draggable_area">
    <form id="f1">
    <br><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
    <input list="size" name="size1" placeholder="Size" style="max-width:80%" id="size1"> 

           <datalist id="size">
                <option value="200x200">
                <option value="200x600">
                <option value="300x300">
                <option value="300x600">
                <option value="300x900">
                <option value="400x400">
                <option value="600x600">
                <option value="600x1200">
                <option value="800x1200">
                <option value="1000x2000">
                <option value="200x300">
                <option value="250x375">
                <option value="300x450">
                <option value="300x750">
                <option value="300x1200">
                <option value="400x800">
                <option value="600x900">
                <option value="800x800">
                <option value="1000x1000">

            </datalist>
    <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 
    <input list="pc" name="pc1" placeholder="Product Category" style="max-width:80%" id="pc1"> 

           <datalist id="pc">
                <option value="Ceramic Wall">
                <option value="Ceramic/Semi-Porcelian Floor">
                <option value="SST/Vitrified Nano">
                <option value="Double charge/Multi charge Nano(DC)">
                <option value="Vetrified Glazed Tile(GVT)">
                <option value="Polished Glazed Vetrified Nano(PGVT)">
                <option value="Color Body">
                <option value="Stone/Kota Marble & granites">
                <option value="Combo Plan">
                <option value="Slim Tile">
                <option value="Raw Material">

            </datalist>
    <br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;         
    <input list="ff" name="ff1" placeholder="Feel/Finish" style="max-width:80%" id="ff1"> 

            <datalist id="ff">
                    <option value="Glossy">
                    <option value="Special Protection Coat">
                    <option value="Matt/Suede/Honed">
                    <option value="Polished Glossy">
                    <option value="Rustic/Rough Surface">
                    <option value="Luster">
                    <option value="Metallic">
                    <option value="Glazed Polish Nano / Half Polished">
                    <option value="Lapato/ Sugar /Leather">

                </datalist>
     <br>  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;         

     <input list="q1" name="q11" placeholder="Quality" style="max-width:80%" id="q11"> 

               <datalist id="q1">
                    <option value="Premium">
                    <option value="Standard">
                    <option value="Other">

                </datalist> 
    </form>               

</div>

JavaScript:

<script type="text/javascript" src="https://code.jquery.com/jquery-2.2.4.min.js"></script>
<script type="text/javascript" src="jquery-ui.min.js"></script>
<script type="text/javascript">
    var i= 1;
    var a;
    $('#draggable_area').draggable({
        revert: true,
        stop: function () {
            document.getElementById('f1').reset();
                    }
    });
    $('#droppable_area').droppable({
        accept: '#draggable_area',
        drop: function()
        {
            var size = document.getElementById('size1').value;
            var product_Quality = document.getElementById('pc1').value;
            var feel_finish = document.getElementById('ff1').value;
            var quality = document.getElementById('q11').value;

            console.log(size+" "+product_Quality+" "+feel_finish+" "+quality);

            var label1 = document.createElement('label');
            var label2 = document.createElement('label');
            var label3 = document.createElement('label');
            var label4 = document.createElement('label');

            var text1 = document.createTextNode(size);
            var text2 = document.createTextNode(product_Quality);
            var text3 = document.createTextNode(feel_finish);
            var text4 = document.createTextNode(quality);

            label1.appendChild(text1);
            label2.appendChild(text2);
            label3.appendChild(text3);
            label4.appendChild(text4);



            var div = document.createElement('div');
            //div.textContent = "Sup, y'all?";
            div.setAttribute('class', 'note'+ i );
            div.setAttribute('id','n'+i);
            var b  = 'n'+ i ;
            console.log(b)
            document.getElementById('droppable_area').appendChild(div);
            $('div').draggable({
                start: function()
                {
                     a = this.id;
                    console.log(a);
                }
            });

            document.getElementById(b).appendChild(label1);
            document.getElementById(b).appendChild(label2);
            document.getElementById(b).appendChild(label3);
            document.getElementById(b).appendChild(label4);


            document.getElementById(b).style.width = '100px';
            document.getElementById(b).style.height = '100px';
            document.getElementById(b).style.boxShadow = '10px 10px 10px grey';
            document.getElementById(b).style.border = '3px solid black';
            i++;
        }   
    });
</script>

请帮助我解决这个问题。
非常感谢您的时间。


你能提供一个带有你的代码的JSFiddle吗? - Imesh Chandrasiri
确定。@DimalChandrasiri - Ravi Vasani
jsFiddle链接:https://jsfiddle.net/spLcaykh/1/ @DimalChandrasiri - Ravi Vasani
2个回答

1

你考虑过在小方框中添加浮动效果吗?

如果你给元素添加浮动效果,它们将开始填充你拖拽的区域。

document.getElementById(b).style.float = 'left';

使内容滚动的方法:
#droppable_area{
    overflow:auto;
}

为了从容器中移除该项,您应该在小方块的创建中添加以下代码。这样当您尝试将其从盒子中移动时,它将自行移除。
$('div').draggable({
    start: function () {
        a = this.id;
        console.log(a);
    },
    stop: function () {
        if (parseInt($(this).css('top')) < 0 || parseInt($(this).css('left')) < 0) {
            $(this).remove();
        }
    }
});

如果容器已满,则需要开始滚动它,如何启动它?@DemeterDimitri - Ravi Vasani
你可以为容器元素添加溢出CSS。 - Demeter Dimitri
1
但是我们无法将那个小项目从该部分拖出 @DemeterDimitri - Ravi Vasani
我为了你的需求修改了我的答案,将小项目移除了。 - Demeter Dimitri

0
如果您想获取容器内的元素,可以在样式部分的末尾添加以下代码。这将使所有新元素水平排列并堆叠。
document.getElementById(b).style.float = 'left';

以下是更新后的jsfiddle。 jsfiddle 如果您想在容器已满后限制添加,则需要编写单独的逻辑来识别它。
要使可放置区域具有滚动条,只需将overflow:auto添加到该容器的样式中即可。
#droppable_area{
    //rest of the css
    overflow:auto;
}

当内容超出容器时,这将添加一个垂直滚动条。

更新的fiddle


如果容器已满,则需要开始滚动它,如何启动它?@DimalChandrasiri - Ravi Vasani
但是在这里,我们无法拖出生成的小 div…… 这个问题会发生。 我们还需要解决这个问题。 @DimalChandrasiri - Ravi Vasani

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接