当前位置:首页 > JavaScript

js实现网格

2026-02-02 10:24:10JavaScript

实现网格布局的方法

使用CSS Grid布局可以快速创建网格结构。以下是一个基础示例:

js实现网格

<div class="grid-container">
  <div class="grid-item">1</div>
  <div class="grid-item">2</div>
  <div class="grid-item">3</div>
</div>
.grid-container {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 10px;
}

.grid-item {
  background-color: #f0f0f0;
  padding: 20px;
  text-align: center;
}

动态生成网格的JavaScript方法

通过JavaScript动态创建网格元素:

js实现网格

function createGrid(rows, cols) {
  const container = document.createElement('div');
  container.className = 'grid-container';
  container.style.display = 'grid';
  container.style.gridTemplateColumns = `repeat(${cols}, 1fr)`;
  container.style.gap = '10px';

  for (let i = 0; i < rows * cols; i++) {
    const item = document.createElement('div');
    item.className = 'grid-item';
    item.textContent = i + 1;
    container.appendChild(item);
  }

  document.body.appendChild(container);
}

createGrid(3, 3);

响应式网格实现

使用媒体查询实现响应式网格布局:

.grid-container {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
  gap: 15px;
}

@media (max-width: 600px) {
  .grid-container {
    grid-template-columns: 1fr;
  }
}

网格拖拽功能实现

使用HTML5拖放API实现网格项可拖动:

const items = document.querySelectorAll('.grid-item');

items.forEach(item => {
  item.draggable = true;

  item.addEventListener('dragstart', (e) => {
    e.dataTransfer.setData('text/plain', item.id);
    setTimeout(() => item.style.opacity = '0.4', 0);
  });

  item.addEventListener('dragend', () => {
    item.style.opacity = '1';
  });
});

const container = document.querySelector('.grid-container');
container.addEventListener('dragover', (e) => {
  e.preventDefault();
});

container.addEventListener('drop', (e) => {
  e.preventDefault();
  const id = e.dataTransfer.getData('text/plain');
  const draggedItem = document.getElementById(id);
  const dropTarget = e.target.closest('.grid-item');

  if (dropTarget && draggedItem !== dropTarget) {
    const items = Array.from(container.children);
    const draggedIndex = items.indexOf(draggedItem);
    const dropIndex = items.indexOf(dropTarget);

    if (draggedIndex > dropIndex) {
      container.insertBefore(draggedItem, dropTarget);
    } else {
      container.insertBefore(draggedItem, dropTarget.nextSibling);
    }
  }
});

标签: 网格js
分享给朋友:

相关文章

vue.js实现轮播

vue.js实现轮播

vue.js实现轮播的方法 使用第三方库(如Swiper) 安装Swiper库: npm install swiper 在Vue组件中引入Swiper: <template>…

css制作网格进度条

css制作网格进度条

使用 CSS Grid 制作网格进度条 CSS Grid 是一种强大的布局工具,可以用来创建网格进度条。以下是实现方法: HTML 结构 <div class="progress-grid"…

js实现

js实现

实现 JavaScript 功能的方法 在 JavaScript 中实现特定功能通常涉及多个步骤。以下是常见的实现方法: 基础语法和变量声明 使用 let 或 const 声明变量: let co…

js实现验证码

js实现验证码

使用Canvas生成图形验证码 在HTML中创建一个Canvas元素用于绘制验证码。通过JavaScript随机生成数字或字母组合,并添加干扰线、噪点等干扰元素增强安全性。 <canvas i…

js实现文件下载

js实现文件下载

使用 a 标签下载文件 通过动态创建 a 标签并设置 download 属性实现文件下载。适用于已知文件 URL 或 Blob 数据的情况。 function downloadFile(url, f…

js实现全选

js实现全选

实现全选功能的方法 在JavaScript中实现全选功能通常涉及监听全选复选框的点击事件,并根据其状态控制其他复选框的选中状态。以下是几种常见的实现方式: 基础DOM操作实现 通过获取所有目标复选框…