原生js实现栅格布局(3列、4列、5列)

代码:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>九宫格布局/珊栏布局</title>
    <style>
      * {
        margin: 0;
        padding: 0;
      }
      #wrap {
        /* 清除浮动 */
        overflow: hidden;
      }
      #wrap .item {
        width: 248px;
        height: 360px;
        font-size: 12px;
      }
      #wrap .item .title {
        width: 248px;
        height: 30px;
        line-height: 30px;
        overflow: hidden;
        margin-bottom: 10px;
      }
      .imgContainer {
        width: 248px;
        /* 以单元格形式显示 */
        display: table-cell;
        text-align: center;
      }
      #wrap .item .price {
        color: #ff6700;
        font-size: 18px;
        font-weight: bold;
      }
      img {
        width: 240px;
        height: 240px;
      }
    </style>
  </head>
  <body>
    <!-- 按钮组 -->
    <div class="cols">
      <button>3列</button>
      <button>4列</button>
      <button>5列</button>
    </div>
    <!-- 珊栏布局 -->
    <div id="wrap">
      <!-- 第一张 -->
      <div class="item">
        <!-- 图片 -->
        <div class="imgContainer">
          <img src="./images/img01.jpg" alt="" />
        </div>
        <!-- 标题 -->
        <p class="title">商品标题1</p>
        <!-- 价格 -->
        <p class="price">¥100</p>
      </div>
      <!-- 第二张 -->
      <div class="item">
        <!-- 图片 -->
        <div class="imgContainer">
          <img src="./images/img02.jpg" alt="" />
        </div>
        <!-- 标题 -->
        <p class="title">商品标题2</p>
        <!-- 价格 -->
        <p class="price">¥200</p>
      </div>
      <!-- 第三张 -->
      <div class="item">
        <!-- 图片 -->
        <div class="imgContainer">
          <img src="./images/img03.jpg" alt="" />
        </div>
        <!-- 标题 -->
        <p class="title">商品标题3</p>
        <!-- 价格 -->
        <p class="price">¥300</p>
      </div>
      <!-- 第四张 -->
      <div class="item">
        <!-- 图片 -->
        <div class="imgContainer">
          <img src="./images/img04.jpg" alt="" />
        </div>
        <!-- 标题 -->
        <p class="title">商品标题4</p>
        <!-- 价格 -->
        <p class="price">¥400</p>
      </div>
      <!-- 第五张 -->
      <div class="item">
        <!-- 图片 -->
        <div class="imgContainer">
          <img src="./images/img05.jpg" alt="" />
        </div>
        <!-- 标题 -->
        <p class="title">商品标题5</p>
        <!-- 价格 -->
        <p class="price">¥500</p>
      </div>
      <!-- 第六张 -->
      <div class="item">
        <!-- 图片 -->
        <div class="imgContainer">
          <img src="./images/img06.jpg" alt="" />
        </div>
        <!-- 标题 -->
        <p class="title">商品标题6</p>
        <!-- 价格 -->
        <p class="price">¥600</p>
      </div>
      <!-- 第七张 -->
      <div class="item">
        <!-- 图片 -->
        <div class="imgContainer">
          <img src="./images/img07.jpg" alt="" />
        </div>
        <!-- 标题 -->
        <p class="title">商品标题7</p>
        <!-- 价格 -->
        <p class="price">¥700</p>
      </div>
      <!-- 第八张 -->
      <div class="item">
        <!-- 图片 -->
        <div class="imgContainer">
          <img src="./images/img08.jpg" alt="" />
        </div>
        <!-- 标题 -->
        <p class="title">商品标题8</p>
        <!-- 价格 -->
        <p class="price">¥800</p>
      </div>
      <!-- 第九张 -->
      <div class="item">
        <!-- 图片 -->
        <div class="imgContainer">
          <img src="./images/img09.jpg" alt="" />
        </div>
        <!-- 标题 -->
        <p class="title">商品标题9</p>
        <!-- 价格 -->
        <p class="price">¥900</p>
      </div>
    </div>
    <script>
      // 1.获取事件标签
      var btns = document.getElementsByTagName("button");
      var items = document.getElementsByClassName("item");
      // 2. 为标签添加事件监听
      // (1) 三列
      btns[0].onclick = function () {
        _flex(3);
      };
      //   (2)四列
      btns[1].onclick = function () {
        _flex(4);
      };
      // (3)五列
      btns[2].onclick = function () {
        _flex(5);
      };
      function _flex(colsNum) {
        // 循环遍历item
        for (var i = 0; i < items.length; i++) {
          items[i].style.float = "left";
          items[i].parentNode.style.width =
            items[i].offsetWidth * colsNum + "px";
        }
      }
    </script>
  </body>
</html>

效果:

三列

四列

 

五列

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
实现 HTML 表格宽度拖拽,可以使用原生 JavaScript实现。以下是一个简单的实现方式: HTML 代码: ``` <table id="myTable"> <tr> <th>1</th> <th>2</th> <th>3</th> </tr> <tr> <td>内容1</td> <td>内容2</td> <td>内容3</td> </tr> <tr> <td>内容4</td> <td>内容5</td> <td>内容6</td> </tr> </table> ``` JavaScript 代码: ``` var table = document.getElementById("myTable"); var isResizing = false; var lastDownX = 0; // 设置每的初始宽度 var columnWidths = [100, 100, 100]; for (var i = 0; i < table.rows[0].cells.length; i++) { table.rows[0].cells[i].style.width = columnWidths[i] + "px"; } // 鼠标按下时记录位置 table.addEventListener("mousedown", function (e) { isResizing = true; lastDownX = e.clientX; }); // 鼠标移动时改变宽度 table.addEventListener("mousemove", function (e) { if (!isResizing) { return; } var cell = e.target.parentElement; var cellIndex = Array.from(cell.parentElement.children).indexOf(cell); var widthDiff = e.clientX - lastDownX; // 改变当前的宽度 var newWidth = columnWidths[cellIndex] + widthDiff; if (newWidth > 0) { cell.style.width = newWidth + "px"; columnWidths[cellIndex] = newWidth; lastDownX = e.clientX; } }); // 鼠标抬起时停止改变宽度 table.addEventListener("mouseup", function (e) { isResizing = false; }); ``` 以上代码会在表格中添加一个鼠标事件监听器,当用户按下鼠标并移动时,会根据鼠标的位置改变被选中的宽度。需要注意的是,当用户拖动宽度时,应该记录每的初始宽度(在这里使用了 `columnWidths` 数组来记录),并在移动过程中修改当前的宽度,而不是仅仅修改当前的宽度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

想做一只快乐的修狗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值