javascript – Jquery draggable / droppable和sortable组合

前端之家收集整理的这篇文章主要介绍了javascript – Jquery draggable / droppable和sortable组合前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我被要求创建一个正方形网格,其中每个正方形可能包含或不包含链接,这些链接应该能够围绕网格移动.

我认为draggable / droppable将是可行的方式并且它可以正常工作,但是,现在我们希望能够让draggables交换,如果一个被丢弃在另一个之上.所以它现在看起来像是可以排序的.但是,sortable看起来更像是列表的意思,而我没有像列表那样编写它.

有没有一种简单的方法来制作我到目前为止所做的工作,或者我是否需要使用可排序的方式完全重写它?我是javascript的新手,我花了一段时间才能做到这一点,而且我不是要求代码,但我担心必须重新计算整个事情!任何意见?

这是我的代码的一个小提琴:http://jsfiddle.net/kvVkT/

代码

HTML

  1. <div id="gridcontainer">
  2. <div id="-2:-2" class="droppable occupied">
  3. <a href="" id ="508" class="bookmark draggable white" title="white" "target="_blank">1</a>
  4. </div>
  5. <div id="-2:-1" class="droppable">2</div>
  6. <div style="clear:both"></div>
  7. <div id="-2:0" class="droppable">3</div>
  8. <div id="-2:1" class="droppable occupied">
  9. <a href="" id ="567" class="bookmark draggable white" title="white" "target="_blank">4</a>
  10. </div>
  11. <div style="clear:both"></div>
  12. </div>

CSS

  1. #gridcontainer{position:relative;padding:25px;color:#ff0004;background:#ffffff;}
  2. .droppable{width:65px; height:65px;float:left; margin:5px;background:#000000;}
  3. .bookmark {float:left;width:65px; height:65px;display:block;position:absolute;}
  4. .position{float:left;width:65px; height:65px;display:block;}
  5. .position:hover{background-image:url(../img/tilehover.png);}
  6. .bookmark.ui-draggable-dragging {-moz-Box-shadow: 0 0 5px #d9d9d9; -webkit-Box-shadow: 0 0 5px #d9d9d9; Box-shadow: 0 0 5px #d9d9d9;}
  7. .draggable{ background:#888888;}
  8. [draggable] {
  9. -moz-user-select: none;
  10. -khtml-user-select: none;
  11. -webkit-user-select: none;
  12. user-select: none;
  13. }

JavaScript的

  1. $('.draggable').draggable({ start: function() {$('#dropdownAddTile').slideDown();},stop: function() {$('#dropdownAddTile').slideUp();},containment: '#container',snap:'.droppable',snapMode:'inner',revert:'invalid',snapTolerance: 32});
  2. $('.droppable').droppable({drop: handleDropEvent,accept: function(e){if(e.hasClass('draggable')) { if (!$(this).hasClass('occupied')) {return true; }}}});
  3. function handleDropEvent( event,ui ) {
  4. event.preventDefault();
  5. var draggable = ui.draggable;
  6. var droppable = $(this);
  7. var droppableId = $(this).attr("id");
  8. var draggableId = ui.draggable.attr("id");
  9. $('.draggable').draggable({containment: '#container',snapTolerance: 32});
  10. $('.droppable').droppable({drop: handleDropEvent,accept: function(e){if(e.hasClass('draggable')) { if (!$(this).hasClass('occupied')) {return true; }}}});
  11. var initPosit = ui.draggable.parent().attr('id');
  12. //save new position
  13. $.post("tiles/updateTilePosition",{ draggableId:draggableId,droppableId: droppableId }).done(function(data) {
  14. //alert(data);
  15. })
  16. $(this).addClass('occupied');
  17. ui.draggable.parent().removeClass('occupied');
  18. if($(ui.draggable).parent() !==$(this)){
  19. $(ui.draggable).appendTo($( this ));
  20. }
  21. }

感激地收到任何意见

解决方法

首先,永远不要使用以数字或符号开头的ID.根据这个 solution

ID and NAME tokens must begin with a letter ([A-Za-z]) and may be followed by any number of letters,digits ([0-9]),hyphens (“-“),underscores (“_”),colons (“:”),and periods (“.”).

现在让我们清理一些代码.对于您目前的情况,我建议使用.draggable().droppable().

我从零开始,但保持拖延和& jsfiddle中使用的可放置选项.这是我想出的(随意改变它的任何方面):

DEMO:
http://jsfiddle.net/dirtyd77/Y8dLz/
http://fiddle.jshell.net/dirtyd77/Y8dLz/show/

JAVASCRIPT:

  1. $(function () {
  2. $('#container div').draggable({
  3. containment: "#container",helper: 'clone',snap: true,snapMode: 'inner',snapTolerance: 32,revert: 'invalid'
  4. });
  5.  
  6. $('#container div').droppable({
  7. hoverClass: 'ui-state-highlight',drop: function (event,ui) {
  8. var _drop = $(this),_drag = $(ui.draggable),_dropChildren = _drop.children(),//original drop children
  9. _dragChilden = _drag.children(); //original drag children
  10.  
  11. if(_dropChildren.length > 0){
  12. _dropChildren.appendTo(_drag);
  13. }
  14.  
  15. _dragChilden.appendTo(_drop);
  16. }
  17. });
  18. });

HTML:

  1. <div id="container">
  2. <div>
  3. <a href="#somelink1" class="link1">Link 1</a>
  4. </div>
  5.  
  6. <div></div>
  7.  
  8. <div>
  9. <a href="#somelink2" class="link2">Link 2</a>
  10. </div>
  11.  
  12. <div></div>
  13.  
  14. <div>
  15. <a href="#somelink3" class="link3">Link 3</a>
  16. </div>
  17.  
  18. <div>
  19. <a href="#somelink1" class="link1">Link 4</a>
  20. <a href="#somelink3" class="link3">Link 5</a>
  21. </div>
  22. </div>

CSS:

  1. div:not(#container) {
  2. border:1px solid orange;
  3. }
  4. #container {
  5. padding:20px;
  6. margin:10px;
  7. float: left; /* needed for containment option */
  8. width: 336px;
  9. height: auto;
  10. border:1px solid green;
  11. }
  12. #container div {
  13. margin: 4px;
  14. padding: 0px;
  15. float: left;
  16. width: 100px;
  17. height: 90px;
  18. text-align: center;
  19. }
  20. .link1{
  21. color: purple;
  22. }
  23. .link2{
  24. color: red;
  25. }
  26. .link3{
  27. color: green;
  28. }

我希望这就是你要找的!如果您需要任何进一步的解释或有任何其他问题,请告诉我们!快乐的编码!

猜你在找的jQuery相关文章