当前位置:首页 > JavaScript

js实现grid布局

2026-04-04 15:05:21JavaScript

使用 CSS Grid 布局

CSS Grid 是现代网页布局的强大工具,通过 JavaScript 动态操作 Grid 可以实现灵活的布局调整。

基本 Grid 布局

通过 CSS 定义 Grid 容器和项目:

.grid-container {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  grid-gap: 10px;
}
.grid-item {
  background: #ddd;
  padding: 20px;
}

JavaScript 动态修改 Grid

通过 DOM API 获取元素并修改 Grid 属性:

js实现grid布局

const container = document.querySelector('.grid-container');

// 修改列数
container.style.gridTemplateColumns = 'repeat(4, 1fr)';

// 添加新项目
const newItem = document.createElement('div');
newItem.classList.add('grid-item');
newItem.textContent = 'New Item';
container.appendChild(newItem);

响应式 Grid 调整

根据窗口大小动态调整布局:

function updateGrid() {
  if (window.innerWidth < 600) {
    container.style.gridTemplateColumns = '1fr';
  } else {
    container.style.gridTemplateColumns = 'repeat(3, 1fr)';
  }
}

window.addEventListener('resize', updateGrid);

动态 Grid 模板

使用 JavaScript 生成复杂的 Grid 模板:

js实现grid布局

const areas = ['header', 'main', 'sidebar', 'footer'];
container.style.gridTemplateAreas = `
  "${areas[0]} ${areas[0]} ${areas[0]}"
  "${areas[1]} ${areas[1]} ${areas[2]}"
  "${areas[3]} ${areas[3]} ${areas[3]}"
`;

拖拽重新排序

实现 Grid 项目的拖拽排序功能:

let draggedItem = null;

document.querySelectorAll('.grid-item').forEach(item => {
  item.draggable = true;

  item.addEventListener('dragstart', () => {
    draggedItem = item;
    setTimeout(() => item.style.display = 'none', 0);
  });

  item.addEventListener('dragend', () => {
    setTimeout(() => item.style.display = 'block', 0);
    draggedItem = null;
  });
});

container.addEventListener('dragover', e => {
  e.preventDefault();
});

container.addEventListener('drop', e => {
  e.preventDefault();
  container.insertBefore(draggedItem, document.elementFromPoint(e.clientX, e.clientY));
});

动画过渡效果

为 Grid 布局变化添加平滑过渡:

.grid-container {
  transition: grid-template-columns 0.3s ease;
}

浏览器兼容性处理

检测并处理不支持 Grid 的情况:

if (!CSS.supports('display', 'grid')) {
  container.classList.add('no-grid');
  // 添加回退布局代码
}

标签: 布局js
分享给朋友:

相关文章

vue实现商品布局

vue实现商品布局

使用 Vue 实现商品布局 数据准备 商品数据通常存储在数组中,每个商品对象包含名称、价格、图片等属性。示例数据结构如下: data() { return { products: […

链表实现js

链表实现js

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和一个指向下一个节点的指针(单向链表)或两个指针(双向链表)。与数组不同,链表在内存中非连续存储,插入和删除操作更高效,但随机…

js实现vue路由

js实现vue路由

Vue 路由的基本实现 在 Vue.js 中实现路由功能通常使用 Vue Router 库。Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用(SPA)。 安装 Vue R…

js实现 功能

js实现 功能

在 JavaScript 中实现功能通常涉及多个关键步骤,具体取决于功能需求。以下是常见功能的实现方法和示例: 基本功能实现 使用函数封装逻辑是最直接的方式。例如,实现一个计算两数之和的函数: f…

js进度条实现

js进度条实现

使用HTML和CSS创建基础结构 在HTML中创建一个容器元素用于显示进度条,通常使用<div>元素。CSS用于设置进度条的样式,包括宽度、高度、颜色和圆角等属性。 <div cl…

js实现下拉刷新

js实现下拉刷新

监听触摸事件 通过监听 touchstart、touchmove 和 touchend 事件来检测用户下拉手势。记录触摸起始位置和移动距离。 let startY = 0; let curr…