当前位置:首页 > JavaScript

js实现网格

2026-04-07 03:55:11JavaScript

使用CSS Grid布局创建网格

在JavaScript中结合CSS Grid可以快速实现网格布局。CSS Grid提供了强大的二维布局能力,通过JavaScript动态设置网格属性。

// 创建容器元素
const container = document.createElement('div');
container.style.display = 'grid';
container.style.gridTemplateColumns = 'repeat(3, 100px)';
container.style.gridTemplateRows = 'repeat(3, 100px)';
container.style.gap = '10px';

// 创建网格项
for (let i = 0; i < 9; i++) {
  const item = document.createElement('div');
  item.style.backgroundColor = '#ddd';
  item.style.display = 'flex';
  item.style.alignItems = 'center';
  item.style.justifyContent = 'center';
  item.textContent = i + 1;
  container.appendChild(item);
}

document.body.appendChild(container);

使用Canvas绘制网格

Canvas API适合需要自定义绘制和交互的网格场景。

const canvas = document.createElement('canvas');
canvas.width = 400;
canvas.height = 400;
document.body.appendChild(canvas);

const ctx = canvas.getContext('2d');
const gridSize = 40;
const lineColor = '#ccc';

// 绘制网格线
for (let x = 0; x <= canvas.width; x += gridSize) {
  ctx.beginPath();
  ctx.moveTo(x, 0);
  ctx.lineTo(x, canvas.height);
  ctx.strokeStyle = lineColor;
  ctx.stroke();
}

for (let y = 0; y <= canvas.height; y += gridSize) {
  ctx.beginPath();
  ctx.moveTo(0, y);
  ctx.lineTo(canvas.width, y);
  ctx.strokeStyle = lineColor;
  ctx.stroke();
}

使用第三方库实现高级网格

ag-Grid等专业库提供企业级网格功能,包括排序、过滤和分组等。

import { Grid } from 'ag-grid-community';
import 'ag-grid-community/styles/ag-grid.css';
import 'ag-grid-community/styles/ag-theme-alpine.css';

const gridOptions = {
  columnDefs: [
    { headerName: "ID", field: "id" },
    { headerName: "Name", field: "name" },
    { headerName: "Value", field: "value" }
  ],
  rowData: [
    { id: 1, name: "Item 1", value: 100 },
    { id: 2, name: "Item 2", value: 200 }
  ]
};

const gridDiv = document.querySelector('#myGrid');
new Grid(gridDiv, gridOptions);

响应式网格实现

使用媒体查询和JavaScript结合实现响应式网格布局。

function setupResponsiveGrid() {
  const container = document.getElementById('grid-container');
  const updateGrid = () => {
    if (window.innerWidth < 600) {
      container.style.gridTemplateColumns = 'repeat(2, 1fr)';
    } else if (window.innerWidth < 900) {
      container.style.gridTemplateColumns = 'repeat(3, 1fr)';
    } else {
      container.style.gridTemplateColumns = 'repeat(4, 1fr)';
    }
  };

  window.addEventListener('resize', updateGrid);
  updateGrid();
}

虚拟滚动优化大数据网格

对于大型数据集,实现虚拟滚动提高性能。

js实现网格

class VirtualGrid {
  constructor(container, itemCount, itemHeight, renderItem) {
    this.container = container;
    this.itemCount = itemCount;
    this.itemHeight = itemHeight;
    this.renderItem = renderItem;
    this.visibleItems = Math.ceil(container.clientHeight / itemHeight) + 2;
    this.scrollTop = 0;

    this.container.style.position = 'relative';
    this.container.style.overflowY = 'auto';

    this.content = document.createElement('div');
    this.content.style.height = `${itemCount * itemHeight}px`;
    this.container.appendChild(this.content);

    this.container.addEventListener('scroll', () => this.handleScroll());
    this.renderVisibleItems();
  }

  handleScroll() {
    this.scrollTop = this.container.scrollTop;
    this.renderVisibleItems();
  }

  renderVisibleItems() {
    const startIdx = Math.floor(this.scrollTop / this.itemHeight);
    const endIdx = Math.min(startIdx + this.visibleItems, this.itemCount - 1);

    // 清除现有内容
    while (this.content.firstChild) {
      this.content.removeChild(this.content.firstChild);
    }

    // 渲染可见项
    for (let i = startIdx; i <= endIdx; i++) {
      const item = this.renderItem(i);
      item.style.position = 'absolute';
      item.style.top = `${i * this.itemHeight}px`;
      item.style.height = `${this.itemHeight}px`;
      item.style.width = '100%';
      this.content.appendChild(item);
    }
  }
}

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

相关文章

js实现动画

js实现动画

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

js防抖和节流实现

js防抖和节流实现

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

js 实现分页

js 实现分页

实现分页的基本逻辑 分页功能通常需要后端返回数据总量或总页数,前端根据当前页码和每页条数截取对应数据。以下是一个基于JavaScript的简单分页实现方案: 前端分页实现 假设已有从后端获取的完整数…

js实现百叶窗

js实现百叶窗

使用CSS和JavaScript实现百叶窗效果 通过CSS动画和JavaScript事件监听可以实现百叶窗效果。核心思路是将内容区域分割为多个条状元素,通过控制它们的展开/折叠状态来模拟百叶窗。 &…

vue实现js休眠

vue实现js休眠

实现 JavaScript 休眠的方法 在 Vue 中实现 JavaScript 休眠(延迟执行)可以通过以下方式实现。由于 JavaScript 本身没有内置的 sleep 函数,通常使用 Prom…

js实现下拉菜单

js实现下拉菜单

使用HTML和CSS创建基础结构 HTML部分需要包含一个触发下拉的按钮和隐藏的下拉菜单内容: <div class="dropdown"> <button class="dr…