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

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 电车痴汉(han)| 亚洲v成人天堂影视 | 国产一级特黄aa大片在线 | 99国产高清久久久久久网站 | 福利国产片 | 国产在线精品一区二区高清不卡 | 日韩精品欧美国产精品亚 | 波多野结衣xxxxx在线播放 | 魔法满屋免费观看完整版中文 | 午夜成私人影院在线观看 | 久9视频这里只有精品123 | 加勒比成人 | 大陆黄色片 | 精品国产一区二区三区久久久蜜臀 | 精品视频在线观看 | 色帽子影院 | 色偷偷亚洲男人 | 精品一区二区三区自拍图片区 | 日韩一级精品视频在线观看 | 九九精品视频在线观看九九 | 日本a在线天堂 | 国产精自产拍久久久久久 | 果冻传媒第一二三专区 | 国产麻豆成91 | 亚州精品视频 | futa百合高肉全h | 香蕉97超级碰碰碰免费公 | 特级非洲黑人一级毛片 | 九色PORNY蝌蚪视频首页 | 娇小老少配xxxxx性视频 | 欧洲美女女同 | 国产精品久久久久久久久免费观看 | 草莓茄子丝瓜番茄小蝌蚪 | 日本视频中文字幕 | 日本无遮挡亲吻膜下面免费 | 肥胖女性大bbbbbb视频女厕 | 公交车上插入 | 成人性生交大片免费看软件 | 很黄的孕妇a级黄毛片 | 美女张开腿黄网站免费精品动漫 | 国产91精品久久久久久久 |