Advertisement
NikolayPaskulov

Untitled

Jan 21st, 2015
171
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.32 KB | None | 0 0
  1. HTMLElement.prototype.Draggable = function (moveEl) {
  2. var self = this,
  3. el = moveEl || self;
  4. el.style.position = "absolute";
  5. self.onmousedown = function (e) {
  6. var startX = event.pageX - (el.offsetLeft),
  7. startY = event.pageY - (el.offsetTop);
  8. el.style.zIndex = '1';
  9. e.stopPropagation();
  10. e.preventDefault();
  11. window.onmousemove = function (e) {
  12. if (e.target == self) {
  13. el.style.left = (e.pageX - startX) + 'px';
  14. el.style.top = (e.pageY - startY) + 'px';
  15. }
  16. }
  17. window.onmouseup = function (e) {
  18. el.style.zIndex = '0';
  19. self.onmousemove = null;
  20. window.onmousemove = null;
  21. }
  22. }
  23. }
  24.  
  25. HTMLElement.prototype.Resizeble = function () {
  26. var self = this,
  27. resizeBlock = document.createElement('div'),
  28. windowMoveFuncRef;
  29. if (!document.getElementById('styles-for-resizible-elements-library')) {
  30. var style = document.createElement('style');
  31. style.id = 'styles-for-resizible-elements-library';
  32. style.innerHTML = '.resizable-el-block {width:10px;height:10px;position:absolute;user-select:none;}'+
  33. '.resizable-left-el-block{left:0;top:0px; height:inherit; cursor: w-resize;}' +
  34. '.resizable-right-el-block{right:0;top:0; height:inherit;cursor: e-resize;}' +
  35. '.resizable-top-el-block{left:0;top:0; width:100%; cursor: n-resize;}' +
  36. '.resizable-bottom-el-block{left:0;bottom:0; width:100%; cursor: s-resize;}' +
  37. '.resizable-topLeft-el-block{left:0;top:0; z-index:1; cursor: nw-resize;}' +
  38. '.resizable-topRight-el-block{right:0;top:0; z-index:1; cursor: ne-resize;}' +
  39. '.resizable-bottomLeft-el-block{left:0;bottom:0; z-index:1; cursor: sw-resize}' +
  40. '.resizable-bottomRight-el-block{bottom:0;right:0; z-index:1; cursor: se-resize}';
  41. document.head.appendChild(style);
  42. }
  43.  
  44. resizeBlock.className = 'resizable-el-block'
  45. self.style.position = 'absolute';
  46. if (arguments.length == 0) {
  47.  
  48. } else {
  49. if (Object.prototype.toString.call(arguments[0]).slice(8, -1) === "Object") {
  50. for (var i in arguments[0]) {
  51. switch (i) {
  52. case 'left': (arguments[0][i]) ? addLeftResize() : ''; break;
  53. case 'right': (arguments[0][i]) ? addRightResize() : ''; break;
  54. case 'top': (arguments[0][i]) ? addTopResize() : ''; break;
  55. case 'bottom': (arguments[0][i]) ? addBottomResize() : ''; break;
  56. case 'diagonal':
  57. if (arguments[0][i] == 'all') {
  58. addHorizontalBottomLeftResize();
  59. addHorizontalBottomRightResize();
  60. addHorizontalTopLeftResize();
  61. addHorizontalTopRightResize();
  62. } else {
  63. if (Object.prototype.toString.call(arguments[0][i]).slice(8, -1) === "Object") {
  64. for (var hor in arguments[0][i]) {
  65. switch (hor) {
  66. case 'topLeft': (arguments[0][i][hor]) ? addHorizontalTopLeftResize() : ''; break;
  67. case 'topRight': (arguments[0][i][hor]) ? addHorizontalTopRightResize() : ''; break;
  68. case 'bottomLeft': (arguments[0][i][hor]) ? addHorizontalBottomLeftResize() : ''; break;
  69. case 'bottomRight': (arguments[0][i][hor]) ? addHorizontalBottomRightResize() : ''; break;
  70. }
  71. }
  72. }
  73. };
  74. break;
  75. }
  76. }
  77. }
  78. }
  79.  
  80. function addLeftResize() {
  81. var leftResizeBlock = resizeBlock.cloneNode(true);
  82. leftResizeBlock.className = 'resizable-el-block resizable-left-el-block';
  83. leftResizeBlock.onmousedown = function (e) {
  84. var elWidth = self.offsetWidth,
  85. elLeft = self.offsetLeft,
  86. primalX = e.pageX;
  87. e.preventDefault()
  88. window.addEventListener('mousemove', function(e) {
  89. self.style.width = elWidth + (primalX - e.pageX) + 'px';
  90. self.style.left = elLeft - (primalX - e.pageX) + 'px';
  91. windowMoveFuncRef = arguments.callee;
  92. });
  93. }
  94. self.appendChild(leftResizeBlock);
  95. }
  96.  
  97. function addRightResize() {
  98. var rightResizeBlock = resizeBlock.cloneNode(true);
  99. rightResizeBlock.className = 'resizable-el-block resizable-right-el-block';
  100. rightResizeBlock.onmousedown = function (e) {
  101. var elWidth = self.offsetWidth,
  102. primalX = e.pageX;
  103. e.preventDefault()
  104. window.addEventListener('mousemove', function (e) {
  105. self.style.width = elWidth - (primalX - e.pageX) + 'px';
  106. windowMoveFuncRef = arguments.callee;
  107. });
  108. }
  109. self.appendChild(rightResizeBlock);
  110. }
  111.  
  112. function addTopResize() {
  113. var topResizeBlock = resizeBlock.cloneNode(true);
  114. topResizeBlock.className = 'resizable-el-block resizable-top-el-block';
  115. topResizeBlock.onmousedown = function (e) {
  116. var elHeight = self.offsetHeight,
  117. elTop = self.offsetTop,
  118. primalY = e.pageY;
  119. e.preventDefault()
  120. window.addEventListener('mousemove', function (e) {
  121. self.style.height = elHeight + (primalY - e.pageY) + 'px';
  122. self.style.top = elTop - (primalY - e.pageY) + 'px';
  123. windowMoveFuncRef = arguments.callee;
  124. });
  125. }
  126. self.appendChild(topResizeBlock);
  127. }
  128.  
  129. function addBottomResize() {
  130. var bottomResizeBlock = resizeBlock.cloneNode(true);
  131. bottomResizeBlock.className = 'resizable-el-block resizable-bottom-el-block';
  132. bottomResizeBlock.onmousedown = function (e) {
  133. var elHeight = self.offsetHeight,
  134. primalY = e.pageY;
  135. e.preventDefault()
  136. window.addEventListener('mousemove', function (e) {
  137. self.style.height = elHeight - (primalY - e.pageY) + 'px';
  138. windowMoveFuncRef = arguments.callee;
  139. });
  140. }
  141. self.appendChild(bottomResizeBlock);
  142. }
  143.  
  144. function addHorizontalTopLeftResize() {
  145. var topLeftResizeBlock = resizeBlock.cloneNode(true);
  146. topLeftResizeBlock.className = 'resizable-el-block resizable-topLeft-el-block';
  147. topLeftResizeBlock.onmousedown = function (e) {
  148. var elWidth = self.offsetWidth,
  149. elHeight = self.offsetHeight,
  150. elTop = self.offsetTop,
  151. elLeft = self.offsetLeft,
  152. primalY = e.pageY,
  153. primalX = e.pageX;
  154. e.preventDefault()
  155. window.addEventListener('mousemove', function (e) {
  156. self.style.width = elWidth + (primalX - e.pageX) + 'px';
  157. self.style.left = elLeft - (primalX - e.pageX) + 'px';
  158. self.style.height = elHeight + (primalY - e.pageY) + 'px';
  159. self.style.top = elTop - (primalY - e.pageY) + 'px';
  160. windowMoveFuncRef = arguments.callee;
  161. });
  162. }
  163. self.appendChild(topLeftResizeBlock);
  164. }
  165.  
  166. function addHorizontalTopRightResize() {
  167. var topRightResizeBlock = resizeBlock.cloneNode(true);
  168. topRightResizeBlock.className = 'resizable-el-block resizable-topRight-el-block';
  169. topRightResizeBlock.onmousedown = function (e) {
  170. var elWidth = self.offsetWidth,
  171. elHeight = self.offsetHeight,
  172. elTop = self.offsetTop,
  173. primalY = e.pageY,
  174. primalX = e.pageX;
  175. e.preventDefault()
  176. window.addEventListener('mousemove', function (e) {
  177. self.style.width = elWidth - (primalX - e.pageX) + 'px';
  178. self.style.height = elHeight + (primalY - e.pageY) + 'px';
  179. self.style.top = elTop - (primalY - e.pageY) + 'px';
  180. windowMoveFuncRef = arguments.callee;
  181. });
  182. }
  183. self.appendChild(topRightResizeBlock);
  184. }
  185.  
  186. function addHorizontalBottomLeftResize() {
  187. var bottomLeftResizeBlock = resizeBlock.cloneNode(true);
  188. bottomLeftResizeBlock.className = 'resizable-el-block resizable-bottomLeft-el-block';
  189. bottomLeftResizeBlock.onmousedown = function (e) {
  190. var elWidth = self.offsetWidth,
  191. elHeight = self.offsetHeight,
  192. elLeft = self.offsetLeft,
  193. primalY = e.pageY,
  194. primalX = e.pageX;
  195. e.preventDefault()
  196. window.addEventListener('mousemove', function (e) {
  197. self.style.width = elWidth + (primalX - e.pageX) + 'px';
  198. self.style.left = elLeft - (primalX - e.pageX) + 'px';
  199. self.style.height = elHeight - (primalY - e.pageY) + 'px';
  200. windowMoveFuncRef = arguments.callee;
  201. });
  202. }
  203. self.appendChild(bottomLeftResizeBlock);
  204. }
  205.  
  206. function addHorizontalBottomRightResize() {
  207. var bottomRightResizeBlock = resizeBlock.cloneNode(true);
  208. bottomRightResizeBlock.className = 'resizable-el-block resizable-bottomRight-el-block';
  209. bottomRightResizeBlock.onmousedown = function (e) {
  210. var elWidth = self.offsetWidth,
  211. elHeight = self.offsetHeight,
  212. primalY = e.pageY,
  213. primalX = e.pageX;
  214. e.preventDefault()
  215. window.addEventListener('mousemove', function (e) {
  216. self.style.width = elWidth - (primalX - e.pageX) + 'px';
  217. self.style.height = elHeight - (primalY - e.pageY) + 'px';
  218. windowMoveFuncRef = arguments.callee;
  219. });
  220. }
  221. self.appendChild(bottomRightResizeBlock);
  222. }
  223.  
  224. window.addEventListener('mouseup', function (e) {
  225. window.removeEventListener('mousemove', windowMoveFuncRef);
  226. });
  227. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement