droppable-consuming-parent.html 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>jquery.pep droppable w/ consuming parent</title>
  6. <!-- Load local jQuery. -->
  7. <script src="../libs/jquery/jquery.js"></script>
  8. <script src="//cdnjs.cloudflare.com/ajax/libs/modernizr/2.6.2/modernizr.min.js"></script>
  9. <!-- Load local lib and tests. -->
  10. <script src="../src/jquery.pep.js"></script>
  11. <script type="text/javascript">
  12. $(document).ready(function(){
  13. $('.pep').pep({
  14. droppable: '.droppable',
  15. overlapFunction: false,
  16. useCSSTranslation: false,
  17. start: function(ev, obj){
  18. obj.noCenter = false;
  19. },
  20. drag: function(ev, obj){
  21. var vel = obj.velocity();
  22. var rot = (vel.x)/5;
  23. rotate(obj.$el, rot);
  24. },
  25. stop: function(ev, obj){
  26. rotate(obj.$el, 0);
  27. },
  28. rest: handleCentering
  29. });
  30. function handleCentering(ev, obj){
  31. console.log(obj.activeDropRegions.length);
  32. if ( obj.activeDropRegions.length > 0 ) {
  33. centerWithin(obj);
  34. }
  35. }
  36. function centerWithin(obj){
  37. var $parent = obj.activeDropRegions[0];
  38. var pTop = $parent.position().top;
  39. var pLeft = $parent.position().left;
  40. var pHeight = $parent.outerHeight();
  41. var pWidth = $parent.outerWidth();
  42. var oTop = obj.$el.position().top;
  43. var oLeft = obj.$el.position().left;
  44. var oHeight = obj.$el.outerHeight();
  45. var oWidth = obj.$el.outerWidth();
  46. var cTop = pTop + (pHeight/2);
  47. var cLeft = pLeft + (pWidth/2);
  48. if ( !obj.noCenter ) {
  49. if ( !obj.shouldUseCSSTranslation() ) {
  50. var moveTop = cTop - (oHeight/2);
  51. var moveLeft = cLeft - (oWidth/2);
  52. obj.$el.animate({ top: moveTop, left: moveLeft }, 50);
  53. } else{
  54. var moveTop = (cTop - oTop) - oHeight/2;
  55. var moveLeft = (cLeft - oLeft) - oWidth/2;
  56. obj.moveToUsingTransforms( moveTop, moveLeft );
  57. }
  58. obj.noCenter = true;
  59. return;
  60. }
  61. obj.noCenter = false;
  62. }
  63. function rotate($obj, deg){
  64. $obj.css({
  65. "-webkit-transform": "rotate("+ deg +"deg)",
  66. "-moz-transform": "rotate("+ deg +"deg)",
  67. "-ms-transform": "rotate("+ deg +"deg)",
  68. "-o-transform": "rotate("+ deg +"deg)",
  69. "transform": "rotate("+ deg +"deg)"
  70. });
  71. }
  72. });
  73. </script>
  74. <style type="text/css">
  75. .pep{ width: 80px; height: 80px; background: blue; z-index: 10; }
  76. .droppable{ width: 100px; height: 100px;
  77. position: absolute;
  78. border: 5px solid #ccc; }
  79. .droppable.tr { right: 100px; bottom: 100px; }
  80. .droppable.br { top: 100px; right: 100px;}
  81. .droppable.bl { top: 100px; left: 100px;}
  82. .droppable.tl { bottom: 100px; left: 100px;}
  83. .pep-dpa { border-color: blue; background: yellow }
  84. </style>
  85. </head>
  86. <body>
  87. <div class="pep"></div>
  88. <div class="droppable tr"></div>
  89. <div class="droppable br"></div>
  90. <div class="droppable bl"></div>
  91. <div class="droppable tl"></div>
  92. </body>
  93. </html>