当前位置:首页 > JavaScript

js实现积木

2026-02-01 07:05:53JavaScript

以下是使用JavaScript实现积木效果的几种方法,涵盖基础布局、交互逻辑和动画效果:

基础积木布局

使用HTML和CSS创建积木的基本结构,通过JavaScript动态生成积木元素:

// 创建积木容器
const container = document.createElement('div');
container.className = 'block-container';
document.body.appendChild(container);

// 生成彩色积木
const colors = ['#FF5733', '#33FF57', '#3357FF', '#F3FF33'];
for (let i = 0; i < 10; i++) {
  const block = document.createElement('div');
  block.className = 'block';
  block.style.backgroundColor = colors[i % colors.length];
  block.style.width = `${Math.random() * 100 + 50}px`;
  block.style.height = `${Math.random() * 100 + 50}px`;
  container.appendChild(block);
}

拖拽交互实现

为积木添加拖拽功能,使用HTML5的拖拽API:

document.querySelectorAll('.block').forEach(block => {
  block.draggable = true;

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

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

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

container.addEventListener('drop', (e) => {
  e.preventDefault();
  const id = e.dataTransfer.getData('text/plain');
  const block = document.getElementById(id);
  block.style.left = `${e.clientX}px`;
  block.style.top = `${e.clientY}px`;
});

物理引擎集成

使用Matter.js实现积木的物理效果:

// 初始化物理引擎
const engine = Matter.Engine.create();
const world = engine.world;
const render = Matter.Render.create({
  element: document.body,
  engine: engine,
  options: { width: 800, height: 600 }
});

// 创建积木物理对象
const blocks = [];
for (let i = 0; i < 5; i++) {
  const block = Matter.Bodies.rectangle(
    Math.random() * 600 + 100,
    Math.random() * 200,
    80,
    80
  );
  blocks.push(block);
}

// 添加到世界并运行
Matter.Composite.add(world, blocks);
Matter.Engine.run(engine);
Matter.Render.run(render);

响应式积木墙

实现根据窗口大小自动调整的积木墙布局:

function createBlockWall() {
  const containerWidth = container.offsetWidth;
  const blockSize = 60;
  const cols = Math.floor(containerWidth / blockSize);

  container.innerHTML = '';
  for (let row = 0; row < 10; row++) {
    for (let col = 0; col < cols; col++) {
      const block = document.createElement('div');
      block.className = 'wall-block';
      block.style.left = `${col * blockSize}px`;
      block.style.top = `${row * blockSize}px`;
      container.appendChild(block);
    }
  }
}

window.addEventListener('resize', createBlockWall);
createBlockWall();

积木碰撞检测

实现简单的积木碰撞检测逻辑:

js实现积木

function checkCollisions() {
  const blocks = document.querySelectorAll('.block');
  blocks.forEach(block1 => {
    blocks.forEach(block2 => {
      if (block1 !== block2 && isColliding(block1, block2)) {
        block1.style.border = '2px dashed red';
        block2.style.border = '2px dashed red';
      }
    });
  });
}

function isColliding(a, b) {
  const rectA = a.getBoundingClientRect();
  const rectB = b.getBoundingClientRect();
  return !(
    rectA.right < rectB.left ||
    rectA.left > rectB.right ||
    rectA.bottom < rectB.top ||
    rectA.top > rectB.bottom
  );
}

setInterval(checkCollisions, 100);

这些方法可以单独使用或组合实现更复杂的积木效果。根据具体需求选择适合的实现方式,如需更真实的物理效果推荐使用专业物理引擎如Matter.js或Cannon.js。

标签: 积木js
分享给朋友:

相关文章

js实现验证码

js实现验证码

实现验证码的JavaScript方法 生成随机验证码 使用Math.random()生成随机字符串,结合数字和字母: function generateCaptcha() { const cha…

js实现pdf在线预览

js实现pdf在线预览

使用PDF.js实现PDF在线预览 PDF.js是由Mozilla开发的一个开源JavaScript库,可以在网页中直接渲染PDF文件。以下是实现PDF在线预览的步骤: 引入PDF.js库 在HT…

js 实现分页

js 实现分页

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

vue实现js休眠

vue实现js休眠

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

js实现定位

js实现定位

使用Geolocation API获取当前位置 在JavaScript中,可以通过浏览器内置的Geolocation API获取用户的地理位置信息。该API需要用户授权才能访问位置数据。 if (n…

js实现截图

js实现截图

使用HTML2Canvas库实现截图 HTML2Canvas是一个流行的JavaScript库,可以将网页元素或整个页面转换为Canvas图像。安装方式: npm install html2canv…