div边框拖拽改变宽度

r囧r小猫 2023-10-06 21:58 82阅读 0赞

css盒子如下图:

8cd51f258a9f76172975385572da29a1.png

注意:

刚开始测试效果不是很好,原因行内块元素之间有缝隙

消除行内块元素左右之间的间隙:给父元素设置为弹性布局flex

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. <style>
  7. .box {
  8. width: 90%;
  9. height: 90vh;
  10. border: solid 1px black;
  11. display: flex; /*消除行内块元素左右之间的间隙:给父元素设置为弹性布局*/
  12. }
  13. .left {
  14. width: 49%;
  15. height: 100%;
  16. background: lightgrey;
  17. float: left;
  18. }
  19. .resize {
  20. width: 2%;
  21. height: 100%;
  22. background-color: orange;
  23. cursor: w-resize;
  24. float: left;
  25. }
  26. .right {
  27. width: 49%;
  28. height: 100%;
  29. background: lightgrey;
  30. float: left;
  31. }
  32. </style>
  33. </head>
  34. <body>
  35. <div>
  36. <div class="box" id="box">
  37. <div class="left" id="left">左边</div>
  38. <div class="resize" id="resize"></div>
  39. <div class="right" id="right">右边</div>
  40. </div>
  41. </div>
  42. <script>
  43. window.onload = function () {
  44. let box = document.getElementById('box');
  45. let left = document.getElementById('left');
  46. let resize = document.getElementById('resize');
  47. let right = document.getElementById('right');
  48. let w = box.offsetWidth;//获取 div 元素的宽度,包含内边距(padding)和边框(border)
  49. let rw = resize.offsetWidth;//获取 div 元素的宽度,包含内边距(padding)和边框(border)
  50. //按下鼠标事件
  51. resize.onmousedown = function (e) {
  52. let startX = e.clientX;//鼠标指针的水平坐标
  53. resize.left = resize.offsetLeft;//分割线节点元素的左边界的偏移值
  54. // 鼠标拖动事件
  55. document.onmousemove = function (e) {
  56. let change = e.clientX - startX;//鼠标移动的偏移值
  57. let moveLen = resize.left + change;//鼠标移动后,分割线节点元素的左边界的偏移值
  58. resize.style.left = moveLen;
  59. left.style.width = moveLen + 'px';
  60. right.style.width = (w - moveLen - rw) + 'px';// 容器宽度 - 左边区域的宽度 - 分割线的宽度 = 右边区域的宽度
  61. }
  62. // 鼠标松开事件
  63. document.onmouseup = function (evt) {
  64. evt.stopPropagation();
  65. document.onmousemove = null;
  66. document.onmouseup = null;
  67. //当你不在需要继续获得鼠标消息就要应该调用ReleaseCapture()释放掉
  68. resize.releaseCapture && resize.releaseCapture();
  69. }
  70. //该函数在属于当前线程的指定窗口里设置鼠标捕获
  71. resize.setCapture && resize.setCapture();
  72. //对于上面出现的setCapture()和releaseCapture()的用法。必须成对出现。
  73. }
  74. }
  75. </script>
  76. </body>
  77. </html>

9e9ebba596dd457884e384885c2f9e4b.gif

jquey方式

注意:鼠标按下才开始记录坐标值。

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Title</title>
  6. <script src="http://libs.baidu.com/jquery/1.9.1/jquery.min.js"></script>
  7. <style>
  8. body {
  9. padding: 20px;
  10. }
  11. th, td {
  12. width: 100px;
  13. }
  14. .drag-1 {
  15. display: inline-block;
  16. border-left: 3px solid red;
  17. height: 25px;
  18. position: fixed;
  19. left: 130px;
  20. cursor: w-resize;
  21. }
  22. .drag-2 {
  23. display: inline-block;
  24. border-left: 3px solid red;
  25. height: 25px;
  26. position: absolute;
  27. left: 233px;
  28. cursor: w-resize;
  29. }
  30. </style>
  31. </head>
  32. <body>
  33. <div>
  34. <div class="drag-1"></div>
  35. <div class="drag-2"></div>
  36. <table border="1" style="border-collapse: collapse;">
  37. <thead>
  38. <tr>
  39. <th class="col-1">表头1</th>
  40. <th class="col-2">表头2</th>
  41. <th class="col-3">表头3</th>
  42. </tr>
  43. </thead>
  44. <tbody>
  45. <tr>
  46. <td class="col-1">数据1</td>
  47. <td class="col-2">数据2</td>
  48. <td class="col-3">数据3</td>
  49. </tr>
  50. <tr>
  51. <td class="col-1">数据1</td>
  52. <td class="col-2">数据2</td>
  53. <td class="col-3">数据3</td>
  54. </tr>
  55. </tbody>
  56. </table>
  57. </div>
  58. <script>
  59. $(function () {
  60. drag1();
  61. drag2();
  62. });
  63. function drag1() {
  64. let resize = document.getElementsByClassName('drag-1')[0];
  65. //按下鼠标事件
  66. resize.onmousedown = function (e) {
  67. let startX = e.clientX;//鼠标指针的水平坐标
  68. let drag_1 = $('.drag-1').offset().left;
  69. let drag_2 = $('.drag-2').offset().left;
  70. let col_1 = $('.col-1').width();
  71. // 鼠标拖动事件
  72. document.onmousemove = function (e) {
  73. let change = e.clientX - startX;//鼠标移动的偏移值
  74. $('.drag-1').offset({'left': drag_1 + change})
  75. $('.drag-2').offset({'left': drag_2 + change})
  76. $('.col-1').width(col_1 + change);
  77. }
  78. // 鼠标松开事件
  79. document.onmouseup = function (evt) {
  80. evt.stopPropagation();
  81. document.onmousemove = null;
  82. document.onmouseup = null;
  83. //当你不在需要继续获得鼠标消息就要应该调用ReleaseCapture()释放掉
  84. resize.releaseCapture && resize.releaseCapture();
  85. }
  86. //该函数在属于当前线程的指定窗口里设置鼠标捕获
  87. resize.setCapture && resize.setCapture();
  88. //对于上面出现的setCapture()和releaseCapture()的用法。必须成对出现。
  89. }
  90. }
  91. function drag2() {
  92. let resize = document.getElementsByClassName('drag-2')[0];
  93. //按下鼠标事件
  94. resize.onmousedown = function (e) {
  95. let startX = e.clientX;//鼠标指针的水平坐标
  96. let drag_2 = $('.drag-2').offset().left;
  97. let col_2 = $('.col-2').width();
  98. // 鼠标拖动事件
  99. document.onmousemove = function (e) {
  100. let change = e.clientX - startX;//鼠标移动的偏移值
  101. $('.drag-2').offset({'left': drag_2 + change})
  102. $('.col-2').width(col_2 + change);
  103. }
  104. // 鼠标松开事件
  105. document.onmouseup = function (evt) {
  106. evt.stopPropagation();
  107. document.onmousemove = null;
  108. document.onmouseup = null;
  109. //当你不在需要继续获得鼠标消息就要应该调用ReleaseCapture()释放掉
  110. resize.releaseCapture && resize.releaseCapture();
  111. }
  112. //该函数在属于当前线程的指定窗口里设置鼠标捕获
  113. resize.setCapture && resize.setCapture();
  114. //对于上面出现的setCapture()和releaseCapture()的用法。必须成对出现。
  115. }
  116. }
  117. </script>
  118. </body>
  119. </html>

5dc7748e160f4a16ae5eb61b93b52c01.gif

发表评论

表情:
评论列表 (有 0 条评论,82人围观)

还没有评论,来说两句吧...

相关阅读