最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript實(shí)現(xiàn)矩形塊大小任意縮放

 更新時(shí)間:2020年08月25日 12:31:38   作者:布湫  
這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)矩形塊大小任意縮放,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

最近寫了一個(gè)原生JavaScript實(shí)現(xiàn)矩形塊大小任意縮放的案例,感覺里面的東西比較的繞,這里分享源碼給大家,一起學(xué)習(xí)一下。

<!DOCTYPE html>
<html lang="en">

<head>
 <meta charset="UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 <title>原生JavaScript實(shí)現(xiàn)矩形塊大小任意縮放</title>
</head>
<style>
 * {
  margin: 0;
  padding: 0;
 }

 .box {
  position: relative;
  top: 200px;
  left: 500px;
  width: 500px;
  height: 300px;
  background-color: blueviolet;
 }

 .box>div:nth-child(-n+4) {
  position: absolute;
  width: 5px;
  height: 5px;
  background-color: #cc00ff;
 }

 .box>div:nth-child(n+5) {
  position: absolute;
  background-color: #f30497;
 }

 .box>.dot1 {
  cursor: nw-resize;
  top: -5px;
  left: -5px;
 }

 .box>.dot2 {
  cursor: ne-resize;
  top: -5px;
  right: -5px;
 }

 .box>.dot3 {
  cursor: se-resize;
  bottom: -5px;
  right: -5px;
 }

 .box>.dot4 {
  cursor: sw-resize;
  bottom: -5px;
  left: -5px;
 }

 .box>.line1,
 .box>.line3 {
  width: 500px;
  height: 5px;
 }

 .box>.line1 {
  top: -5px;
  cursor: n-resize;
 }

 .box>.line3 {
  bottom: -5px;
  cursor: s-resize;
 }

 .box>.line2,
 .box>.line4 {
  width: 5px;
  height: 300px;
 }

 .box>.line2 {
  right: -5px;
  cursor: e-resize;
 }

 .box>.line4 {
  left: -5px;
  cursor: e-resize;
 }
</style>

<body>
 <div class="box">
  <div class="dot1"></div>
  <div class="dot2"></div>
  <div class="dot3"></div>
  <div class="dot4"></div>
  <div class="line1"></div>
  <div class="line2"></div>
  <div class="line3"></div>
  <div class="line4"></div>
 </div>
 <script>
  //獲取相關(guān)元素節(jié)點(diǎn)
  let box = document.querySelector(".box");
  let dots = document.querySelectorAll(".box>div:nth-child(-n+4)");
  let lines = document.querySelectorAll(".box>div:nth-child(n+5)");
  // 類邊框?qū)挾?
  let bd = 5;
  //for循環(huán)指定事件對(duì)象
  function changeBox([box, dots, lines, bd]) {
   for (let i = 0; i < 4; i++) {
    let { 0: dot1, 1: dot2, 2: dot3, 3: dot4 } = dots;  //dots對(duì)象解構(gòu)
    let { 0: line1, 1: line2, 2: line3, 3: line4 } = lines;  //lines對(duì)象解構(gòu)
    //矩形頂點(diǎn)點(diǎn)擊拖動(dòng)調(diào)整大小
    dots[i].onmousedown = function (ev) {
     //點(diǎn)擊事件初始化相關(guān)值
     let oldY = ev.clientY;  //頂點(diǎn)原本的y值
     let oldX = ev.clientX;  //頂點(diǎn)原本的x值
     let h = box.clientHeight; //box的高度
     let w = box.clientWidth; //box的寬度
     let t = box.offsetTop;  //box距離頂部的top值
     let l = box.offsetLeft;  //box距離左邊的left值
     window.onmousemove = function (e) {
      let offsetY = e.clientY - oldY;   //鼠標(biāo)移動(dòng)y軸偏移量
      let offsetX = e.clientX - oldX;   //鼠標(biāo)移動(dòng)x軸偏移量
      //if條件是判斷鼠標(biāo)點(diǎn)擊的節(jié)點(diǎn)目標(biāo)對(duì)象
      if (i == 0) {
       box.style.height = `${h - offsetY + bd}px`;  //box高度變化
       box.style.top = `${t + offsetY - bd}px`;  //box的top值變化(定位)
       box.style.width = `${w - offsetX + bd}px`;  //box的寬度變化
       box.style.left = `${l + offsetX - bd}px`;  //box的left值變化(定位)
      } else if (i == 1) {
       box.style.height = `${h - offsetY + bd}px`;
       box.style.top = `${t + offsetY - bd}px`;
       box.style.width = `${w + offsetX + bd}px`;
      } else if (i == 2) {
       box.style.height = `${h + offsetY + bd}px`;
       box.style.width = `${w + offsetX + bd}px`;
      } else if (i == 3) {
       box.style.height = `${h + offsetY + bd}px`;
       box.style.width = `${w - offsetX + bd}px`;
       box.style.left = `${l + offsetX - bd}px`;
      }
      //邊框線的高度/寬度隨著box的大小變化而變化
      line1.style.width = box.style.width;
      line2.style.height = box.style.height;
      line3.style.width = box.style.width;
      line4.style.height = box.style.height;
     }
    }
    //邊框點(diǎn)擊拖動(dòng)調(diào)整大小
    lines[i].onmousedown = function (ev) {
     //點(diǎn)擊事件初始化相關(guān)值
     let oldY = ev.clientY;   //頂點(diǎn)原本的y值   
     let oldX = ev.clientX;   //頂點(diǎn)原本的x值
     let h = box.clientHeight;  //box的高度
     let w = box.clientWidth;  //box的寬度
     let t = box.offsetTop;   //box距離頂部的top值
     let l = box.offsetLeft;   //box距離左邊的left值
     window.onmousemove = function (e) {
      let offsetX = e.clientX - oldX;  //鼠標(biāo)移動(dòng)x軸偏移量
      let offsetY = e.clientY - oldY;  //鼠標(biāo)移動(dòng)y軸偏移量
      //if條件是判斷鼠標(biāo)點(diǎn)擊的節(jié)點(diǎn)目標(biāo)對(duì)象
      if (i == 0) {
       box.style.height = `${h - offsetY + bd}px`;
       box.style.top = `${t + offsetY - bd}px`;
      } else if (i == 1) {
       box.style.width = `${w + offsetX + bd}px`;
      } else if (i == 2) {
       box.style.height = `${h + offsetY + bd}px`;
      } else {
       box.style.width = `${w - offsetX + bd}px`;
       box.style.left = `${l + offsetX - bd}px`;
      }
      //邊框線的高度/寬度隨著box的大小變化而變化
      line1.style.width = box.style.width;
      line2.style.height = box.style.height;
      line3.style.width = box.style.width;
      line4.style.height = box.style.height;
     }
    }
    //鼠標(biāo)抬起后清除鼠標(biāo)移動(dòng)事件
    window.onmouseup = function () {
     window.onmousemove = false;
    }
   }
  }
  changeBox([box, dots, lines, bd])
 </script>
</body>

</html>

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:

相關(guān)文章

最新評(píng)論

莆田市| 孟州市| 福清市| 银川市| 满洲里市| 西丰县| 湖州市| 蒙阴县| 苏尼特右旗| 苏尼特右旗| 曲周县| 贵南县| 广南县| 浦城县| 台中县| 武城县| 日喀则市| 哈尔滨市| 女性| 五常市| 邵阳县| 繁峙县| 阿坝县| 张北县| 丽水市| 怀来县| 交城县| 巴彦淖尔市| 遂平县| 错那县| 波密县| 喀什市| 门源| 阜城县| 凉城县| 山阴县| 五寨县| 馆陶县| 沙田区| 安康市| 科技|