You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

43 lines
1.6 KiB

3 months ago
  1. // v-resizable.js
  2. export default {
  3. bind() {
  4. const minWidth = 400; // 设置表格最小宽度
  5. const minHeight = 200; // 设置表格最小高度
  6. let startX, startY, startWidth, startHeight;
  7. // 创建用于拖拽的右下角拖动柄
  8. const resizeHandle = document.createElement('div');
  9. resizeHandle.style.width = '10px';
  10. resizeHandle.style.height = '10px';
  11. // resizeHandle.style.background = 'rgba(0, 0, 0, 0.5)';
  12. resizeHandle.style.position = 'absolute';
  13. resizeHandle.style.right = '0';
  14. resizeHandle.style.bottom = '0';
  15. resizeHandle.style.cursor = 'se-resize';
  16. el.appendChild(resizeHandle);
  17. // 处理鼠标按下事件
  18. resizeHandle.addEventListener('mousedown', function (e) {
  19. startX = e.clientX;
  20. startY = e.clientY;
  21. startWidth = parseInt(document.defaultView.getComputedStyle(el).width, 10);
  22. startHeight = parseInt(document.defaultView.getComputedStyle(el).height, 10);
  23. document.documentElement.addEventListener('mousemove', onMouseMove, false);
  24. document.documentElement.addEventListener('mouseup', onMouseUp, false);
  25. });
  26. // 处理鼠标移动事件
  27. function onMouseMove(e) {
  28. const width = startWidth + e.clientX - startX;
  29. const height = startHeight + e.clientY - startY;
  30. el.style.width = Math.max(minWidth, width) + 'px';
  31. el.style.height = Math.max(minHeight, height) + 'px';
  32. }
  33. // 处理鼠标松开事件
  34. function onMouseUp() {
  35. document.documentElement.removeEventListener('mousemove', onMouseMove, false);
  36. document.documentElement.removeEventListener('mouseup', onMouseUp, false);
  37. }
  38. }
  39. };