当前位置:首页 > 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
分享给朋友:

相关文章

js实现动画

js实现动画

使用 CSS 动画与 JavaScript 控制 通过 JavaScript 动态添加或移除 CSS 类来触发动画。CSS 定义关键帧(@keyframes),JavaScript 通过 classL…

js 实现继承

js 实现继承

原型链继承 通过让子类的原型对象指向父类的实例来实现继承。子类实例可以访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Par…

js实现列表

js实现列表

使用 JavaScript 实现列表 JavaScript 提供了多种方式来实现列表功能,包括数组操作、DOM 元素动态生成等。以下是几种常见的实现方法: 使用数组存储列表数据 数组是 JavaSc…

js防抖和节流实现

js防抖和节流实现

防抖(Debounce)的实现 防抖的核心思想是在事件被触发后,延迟执行回调函数。如果在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口大小调整等场景。 function debounce…

js实现延迟

js实现延迟

实现延迟的方法 在JavaScript中,实现延迟操作有多种方式,以下是几种常见的方法: 使用setTimeout函数 setTimeout是JavaScript中最常用的延迟执行方法。它接受一个回…

js画图实现

js画图实现

使用Canvas API绘制图形 Canvas是HTML5提供的绘图API,通过JavaScript操作Canvas元素可以绘制各种图形。以下是一个简单的示例: <canvas id="myC…