一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

node.js|vue.js|jquery|angularjs|React|json|js教程|

服務器之家 - 編程語言 - JavaScript - Vuejs通過拖動改變元素寬度實現自適應

Vuejs通過拖動改變元素寬度實現自適應

2021-09-09 16:43vickylinj JavaScript

這篇文章主要介紹了Vuejs通過拖動改變元素寬度實現自適應,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

需求:

Vuejs通過拖動改變元素寬度實現自適應

原理:

拖動效果的實現基本都是dom操作來實現的,通過拖動分隔線,計算分隔線與瀏覽器邊框的距離(left),來實現拖動之后的不同寬度的計算;當拖動分隔線1時,計算元素框left和mid;當拖動分隔線2時,計算元素框mid和right;同時設置元素框最小值以防止元素框拖沒了(其實是被遮住了)。使用SetCapture() 和 ReleaseCapture()的函數功能指定窗口里設置鼠標捕獲。

html部分代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<template>
<div>
 <ul class="box" ref="box">
  <li class="left" ref="left">西瓜</li>
  <li class="resize" ref="resize"></li>
  <li class="mid" ref="mid">備注2</li>
  <li class="resize2" ref="resize2"></li>
   <li class="right" ref="right">test</li>
 </ul>
 <ul class="box" ref="box">
  <li class="left" ref="left">芒果</li>
  <li class="resize" ref="resize"></li>
  <li class="mid" ref="mid">備注</li>
  <li class="resize2" ref="resize2"></li>
  <li class="right" ref="right">test</li>
 </ul>
</div>
</template>

js部分代碼:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
<script>
export default {
 mounted () {
  this.dragControllerDiv();
 },
 methods: {
  dragControllerDiv: function () {
   var resize = document.getElementsByClassName('resize');
   var resize2 = document.getElementsByClassName('resize2');
   var left = document.getElementsByClassName('left');
   var right = document.getElementsByClassName('right');
   var mid = document.getElementsByClassName('mid');
   var box = document.getElementsByClassName('box');
   for (let i = 0; i < resize.length; i++) {
    resize[i].onmousedown = function (e) {
     var startX = e.clientX;
     resize[i].left = resize[i].offsetLeft;
     document.onmousemove = function (e) {
      var endX = e.clientX;
      var rightW = right[i].offsetWidth;
      var moveLen = resize[i].left + (endX - startX);
      var maxT = box[i].clientWidth - resize[i].offsetWidth;
      if (moveLen < 150) moveLen = 150;
      if (moveLen > maxT - rightW - 150) moveLen = maxT - rightW - 150;
 
      resize[i].style.left = moveLen;
 
      for (let j = 0; j < left.length; j++) {
       left[j].style.width = moveLen + 'px';
       mid[j].style.width = (box[i].clientWidth - moveLen - rightW - 10) + 'px';
      }
     }
     document.onmouseup = function (evt) {
      document.onmousemove = null;
      document.onmouseup = null;
      resize[i].releaseCapture && resize[i].releaseCapture();
     }
     resize[i].setCapture && resize[i].setCapture();
     return false;
    }
   }
   for (let i = 0; i < resize2.length; i++) {
    resize2[i].onmousedown = function (e) {
     var startX = e.clientX;
     resize2[i].left = resize2[i].offsetLeft;
     document.onmousemove = function (e) {
      var endX = e.clientX;
      var leftW = left[i].offsetWidth;
      var moveLen = resize2[i].left + (endX - startX) - leftW;
      var maxT = box[i].clientWidth - resize2[i].offsetWidth - 5;
      if (moveLen < 150) moveLen = 150;
      if (moveLen > maxT - leftW - 150) moveLen = maxT - leftW - 150;
 
      resize2[i].style.left = moveLen;
      for (let j = 0; j < right.length; j++) {
       mid[j].style.width = moveLen + 'px';
       right[j].style.width = (box[i].clientWidth - moveLen - leftW - 10) + 'px';
      }
     }
     document.onmouseup = function (evt) {
      document.onmousemove = null;
      document.onmouseup = null;
      resize2[i].releaseCapture && resize2[i].releaseCapture();
     }
     resize2[i].setCapture && resize2[i].setCapture();
     return false;
    }
   }
  }
 }
}
</script>

style部分:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<style scoped>
ul,li{
 list-style: none;
 display: block;
 margin:0;
 padding:0;
}
.box{
 width:800px;
 height:32px;
 overflow:hidden;
}
.left{
 width:calc(30% - 10px);
 height:100%;
 background:skyblue;
 float:left;
}
 
.resize{
 width:5px;
 height:100%;
 cursor: w-resize;
 float:left;
}
 
.resize2{
 width:5px;
 height:100%;
 cursor: w-resize;
 float:left;
}
 
.right{
 float:left;
 width:35%;
 height:100%;
 background:tomato;
}
.mid{
 float:left;
 width:35%;
 height:100%;
 background:#f00;
}
</style>

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:https://www.cnblogs.com/vickylinj/p/13376437.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 操骚0| 按摩院已婚妇女中文字幕 | 高h生子双性美人受 | 国产 日韩 欧美视频二区 | 爆操美女 | 国产成人精品免费视频大全五级 | 亚洲精品免费在线观看 | 亚洲va欧美va天堂v国产综合 | 久久精品热在线观看30 | 16男男gaygays | 九九国产在线视频 | 日本人交换乱理伦片 | 国产一区二区三区四 | 天堂日韩 | leslessexvideos日本 | 美女被狂揉下部羞羞动漫 | 日本免费在线播放 | 美日韩一区二区三区 | 日本国产最新一区二区三区 | 香蕉91 | 四虎影视网站 | 99r视频在线观看 | 皇上好大好硬好涨好深好爽 | 亚洲无线一二三区2021 | 爽好大快深点一视频 | 调教小龙女 | 久久99r66热这里有精品 | 亚洲老头老太hd | 日韩欧美国产一区二区三区 | 国产裸舞在线一区二区 | 丝瓜视频黄色在线观看 | 国产在线极品 | yy111111免费观看| 免费看欧美一级特黄a大片一 | 久久精品男人影院 | japanese秘书丝袜| 精品国产一区二区三区久久久蜜臀 | 日本无翼乌漫画 | 1024免费永久福利视频 | 1314酒色| 青青草视频国产 |