基于vue的js拖動改變布局容器的寬高拄丰。

1.jpg

公共js部分(一共寫了三種蝇棉,其它的不管是多少都可以跟著這個來寫)

因為代碼比較多所以建立一個公共的js文件,封裝在里面澜倦,然后在頁面里面引入

// 兩列拖動改變兩列寬度
export function dragTwoColDiv(contentId,leftBoxId,resizeId,rightBoxId){
  let resize = document.getElementById(resizeId);
  let leftBox = document.getElementById(leftBoxId);
  let rightBox = document.getElementById(rightBoxId);
  let box = document.getElementById(contentId);
    resize.onmousedown = function (e) {
      let startX = e.clientX;
      resize.left = resize.offsetLeft;
      document.onmousemove = function (e) {
        let endX = e.clientX;
        let moveLen = resize.left + (endX - startX);
        let maxT = box.clientWidth - resize.offsetWidth;
        if (moveLen < 150) moveLen = 150;
        if (moveLen > maxT - 150) moveLen = maxT - 150;
        resize.style.left = moveLen;
        leftBox.style.width = moveLen + 'px';
        rightBox.style.width = (box.clientWidth - moveLen - 5) + 'px';
      }
      document.onmouseup = function () {
        document.onmousemove = null;
        document.onmouseup = null;
        resize.releaseCapture && resize.releaseCapture();
      }
      resize.setCapture && resize.setCapture();
      return false;
    }
}
// 三列拖動改變div寬度
export function dragThreeColDiv(contentId,leftBoxId,resizeOne,centerBoxId,resizeTwo,rightBoxId) {
  let resizeO = document.getElementById(resizeOne);
  let resizeT = document.getElementById(resizeTwo);
  let leftBox = document.getElementById(leftBoxId);
  let rightBox = document.getElementById(rightBoxId);
  let centerBox = document.getElementById(centerBoxId);
  let box = document.getElementById(contentId);
    resizeO.onmousedown = function (e) {
      let startX = e.clientX;
      resizeO.left = resizeO.offsetLeft;
      document.onmousemove = function (e) {
        let endX = e.clientX;
        let rightW = rightBox.offsetWidth;
        let moveLen = resizeO.left + (endX - startX);
        let maxT = box.clientWidth - resizeO.offsetWidth;
        if (moveLen < 150) moveLen = 150;
        if (moveLen > maxT - rightW - 150) moveLen = maxT - rightW - 150;
        resizeO.style.left = moveLen;
        leftBox.style.width = moveLen + 'px';
        centerBox.style.width = (box.clientWidth - moveLen - rightW - 10) + 'px';
      }
      document.onmouseup = function () {
        document.onmousemove = null;
        document.onmouseup = null;
        resizeO.releaseCapture && resizeO.releaseCapture();
      }
      resizeO.setCapture && resizeO.setCapture();
      return false;
    }
    resizeT.onmousedown = function (e) {
      let startX = e.clientX;
      resizeT.left = resizeT.offsetLeft;
      document.onmousemove = function (e) {
        let endX = e.clientX;
        let leftW = leftBox.offsetWidth;
        let moveLen = resizeT.left + (endX - startX) - leftW;
        let maxT = box.clientWidth - resizeT.offsetWidth - 5;
        if (moveLen < 150) moveLen = 150;
        if (moveLen > maxT - leftW - 150) moveLen = maxT - leftW - 150;
        resizeT.style.left = moveLen;
        centerBox.style.width = moveLen + 'px';
        rightBox.style.width = (box.clientWidth - moveLen - leftW - 10) + 'px';
      }
      document.onmouseup = function () {
        document.onmousemove = null;
        document.onmouseup = null;
        resizeT.releaseCapture && resizeT.releaseCapture();
      }
      resizeT.setCapture && resizeT.setCapture();
      return false;
    }

}
// 上下拖動改變上下兩個模塊的高度
export function dragTwoRowDiv(contentId,topBoxId,resizeId,downBoxId){
  let resize = document.getElementById(resizeId);
  let topBox = document.getElementById(topBoxId);
  let downBox = document.getElementById(downBoxId);
  let box = document.getElementById(contentId);
  resize.onmousedown = function (e) {
    let startY = e.clientY;
    resize.top = resize.offsetTop;
    document.onmousemove = function (e) {
      let endY = e.clientY;
      let moveLen = resize.top + (endY - startY);
      let maxT = box.clientHeight - resize.offsetHeight;
      if (moveLen < 100) moveLen = 100;
      if (moveLen > maxT - 100) moveLen = maxT - 100;
      resize.style.top = moveLen;
      topBox.style.height = moveLen + "px";
      downBox.style.height = (box.clientHeight - moveLen - 5) + "px";
    }
    document.onmouseup = function () {
      document.onmousemove = null;
      document.onmouseup = null;
      resize.releaseCapture && resize.releaseCapture();
    }
    resize.setCapture && resize.setCapture();
    return false;
  }
}

vue部分

<template>
  <div class="all">
  <!-- 左右兩行拖動 -->
  <div class="drag-main">
    <h2>兩列的左右拖動改變div大小</h2>
      <div id="twoBox" class="drag-two-box">
        <div id="twoleft" class="drag-two-left">左</div>
        <div id="tworesize" class="drag-two-resize"></div>
        <div id="tworight" class="drag-two-right">右</div>
      </div>
    </div>
    <!-- 左右三行拖動 -->
    <div class="drag-main">
      <h2>三列的左右拖動改變div大小</h2>
      <ul id="contentId" class="content">
        <li id="leftId" class="left">左</li>
        <li id="resizeOne" class="l-resize"></li>
        <li id="centerId" class="center">中</li>
        <li id="resizeTwo" class="l-resize"></li>
        <li id="rightId" class="right">右</li>
      </ul>
    </div>
    <!-- 兩行上下拖動 -->
    <div class="drag-main">
       <h2>兩行的上下拖動改變div大小</h2>
      <div id="mainId" class="main">
        <div id="topBoxId" class="topBox">
          中上
        </div>
        <div id="resizeId" class="r-resize"></div>
        <div id="downBoxId" class="downBox">
          中下
        </div>
      </div>
    </div>
  </div>
</template>
<script>
import { dragTwoColDiv, dragThreeColDiv, dragTwoRowDiv } from "@/xxxxx";
export default {
  data() {
    return {};
  },
  mounted() {
    dragTwoColDiv("twoBox", "twoleft", "tworesize", "tworight");
    dragThreeColDiv("contentId","leftId","resizeOne","centerId","resizeTwo","rightId");
    dragTwoRowDiv("mainId", "topBoxId", "resizeId", "downBoxId");
  }
};
</script>

css 部分

<style lang="scss" scoped>
/*兩列 */
#twoBox {
  display: flex;
}
#twoleft {
  width: calc(20% - 10px);
}
#tworesize {
  width: 5px;
  cursor: w-resize;
}
#tworight {
  width: 80%;
}
/* 三列 */
#contentId {
  display: flex;
}
#leftId {
  width: calc(20% - 10px);
}
#resizeOne {
  width: 5px;
  cursor: w-resize;
}
#centerId {
  width: 60%;
}
#resizeTwo {
  width: 5px;
  cursor: w-resize;
}
#rightId {
  width: 20%;
}

/* 兩橫 */
#mainId {
  width: 100%;
  overflow: hidden;
  position: relative;
}
#topBoxId {
  height: calc(80% - 5px);
}
#resizeId {
  height: 5px;
  cursor: s-resize;
}
#downBoxId {
  height: 20%;
}
// 輔助修飾
.all {
  padding: 30px;
  list-style: none;
}
.drag-main{
  margin-bottom: 30px;
  h2{
    margin-bottom: 30px;
  }
}
.drag-two-box {
  // width: 100%;
  display: flex;
  .drag-two-left {
    background: #1ee3aa;
    height: 100px;
  }
  .drag-two-right {
    background: #eb77eb;
  }
  .drag-two-resize {
    width: 5px;
    cursor: w-resize;
    background: #000;
  }
}

ul.content {
  // width:100%;
  display: flex;
  overflow: hidden;
  li {
    // float: left;
    height: 100px;
    list-style-type: none;
  }
  .left {
    background: red;
  }
  .center {
    background: #16ffa6;
    padding: 30px;
    box-sizing: border-box;
  }
  .right {
    background: orange;
  }
  .l-resize {
    background: #000;
  }
}
.main {
  height: 300px;
  .topBox {
    background: #1ee3aa;
  }
  .r-resize {
    background: #000;
  }
  .downBox {
    background: #eb77eb;
  }
}
</style>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末聚蝶,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子肥隆,更是在濱河造成了極大的恐慌既荚,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件栋艳,死亡現(xiàn)場離奇詭異恰聘,居然都是意外死亡,警方通過查閱死者的電腦和手機吸占,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門晴叨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人矾屯,你說我怎么就攤上這事兼蕊。” “怎么了件蚕?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵孙技,是天一觀的道長。 經(jīng)常有香客問我排作,道長牵啦,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任妄痪,我火速辦了婚禮哈雏,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己裳瘪,他們只是感情好土浸,可當(dāng)我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著彭羹,像睡著了一般黄伊。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上皆怕,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天毅舆,我揣著相機與錄音,去河邊找鬼愈腾。 笑死憋活,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的虱黄。 我是一名探鬼主播悦即,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼橱乱!你這毒婦竟也來了辜梳?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤泳叠,失蹤者是張志新(化名)和其女友劉穎作瞄,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體危纫,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡宗挥,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了种蝶。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片契耿。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖螃征,靈堂內(nèi)的尸體忽然破棺而出搪桂,到底是詐尸還是另有隱情,我是刑警寧澤盯滚,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布踢械,位于F島的核電站,受9級特大地震影響魄藕,放射性物質(zhì)發(fā)生泄漏内列。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一泼疑、第九天 我趴在偏房一處隱蔽的房頂上張望德绿。 院中可真熱鬧,春花似錦退渗、人聲如沸移稳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽个粱。三九已至,卻和暖如春翻翩,著一層夾襖步出監(jiān)牢的瞬間都许,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工嫂冻, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留胶征,地道東北人。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓桨仿,卻偏偏與公主長得像睛低,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子服傍,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,724評論 2 354