当前位置:首页 > 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实现vue

js实现vue

Vue.js 简介 Vue.js 是一个渐进式 JavaScript 框架,用于构建用户界面。其核心库专注于视图层,易于与其他库或现有项目整合。 实现 Vue.js 的基本步骤 安装 Vue.j…

js实现换肤

js实现换肤

使用CSS变量实现换肤 通过CSS变量可以轻松实现主题切换功能。CSS变量在根元素中定义,通过JavaScript动态修改这些变量值。 :root { --primary-color: #349…

js实现瀑布流

js实现瀑布流

实现瀑布流布局 瀑布流布局是一种常见的网页布局方式,常用于图片展示、商品列表等场景。以下是使用 JavaScript 实现瀑布流布局的几种方法。 纯 JavaScript 实现 通过计算元素的位置和…

js实现dh

js实现dh

JavaScript 实现 DH(Diffie-Hellman)密钥交换 Diffie-Hellman(DH)密钥交换是一种安全协议,允许双方在不安全的通信信道上建立一个共享密钥。以下是如何在 Jav…

js实现授权

js实现授权

授权流程设计 授权流程通常涉及前端与后端的交互,常见方案包括OAuth2.0、JWT等。以JWT为例的典型流程: 用户提交凭证(如用户名密码)到认证服务 服务端验证通过后生成包含用户信息的J…

js怎么实现异步

js怎么实现异步

异步实现方法 JavaScript中实现异步操作主要通过以下几种方式: Promise Promise是ES6引入的异步解决方案,用于处理异步操作的成功或失败状态。 const promise =…