当前位置:首页 > JavaScript

js实现积木

2026-03-14 05:32:58JavaScript

实现积木效果的 JavaScript 方法

使用 JavaScript 实现积木效果通常涉及 DOM 操作和 CSS 样式的动态控制。以下是几种常见的实现方式:

拖拽积木

通过 HTML5 的拖拽 API 实现积木的拖放功能:

document.addEventListener('DOMContentLoaded', function() {
  const blocks = document.querySelectorAll('.block');

  blocks.forEach(block => {
    block.setAttribute('draggable', true);

    block.addEventListener('dragstart', function(e) {
      e.dataTransfer.setData('text/plain', this.id);
    });
  });

  const container = document.getElementById('container');
  container.addEventListener('dragover', function(e) {
    e.preventDefault();
  });

  container.addEventListener('drop', function(e) {
    e.preventDefault();
    const id = e.dataTransfer.getData('text/plain');
    const draggedBlock = document.getElementById(id);
    this.appendChild(draggedBlock);
  });
});

随机生成积木

动态创建积木元素并设置随机样式:

function createRandomBlocks(count) {
  const container = document.getElementById('container');

  for(let i = 0; i < count; i++) {
    const block = document.createElement('div');
    block.className = 'block';

    // 随机位置和颜色
    block.style.left = `${Math.random() * 80}%`;
    block.style.top = `${Math.random() * 80}%`;
    block.style.backgroundColor = `hsl(${Math.random() * 360}, 70%, 60%)`;

    container.appendChild(block);
  }
}

积木碰撞检测

实现积木之间的物理碰撞效果:

class Block {
  constructor(x, y, width, height) {
    this.x = x;
    this.y = y;
    this.width = width;
    this.height = height;
    this.vx = Math.random() * 2 - 1;
    this.vy = Math.random() * 2 - 1;
  }

  update(blocks) {
    this.x += this.vx;
    this.y += this.vy;

    // 边界检测
    if(this.x <= 0 || this.x + this.width >= canvas.width) {
      this.vx *= -1;
    }
    if(this.y <= 0 || this.y + this.height >= canvas.height) {
      this.vy *= -1;
    }

    // 碰撞检测
    blocks.forEach(block => {
      if(block !== this && this.checkCollision(block)) {
        [this.vx, block.vx] = [block.vx, this.vx];
        [this.vy, block.vy] = [block.vy, this.vy];
      }
    });
  }

  checkCollision(block) {
    return this.x < block.x + block.width &&
           this.x + this.width > block.x &&
           this.y < block.y + block.height &&
           this.y + this.height > block.y;
  }
}

配套 CSS 样式

积木的基本样式定义:

.block {
  position: absolute;
  width: 50px;
  height: 50px;
  background-color: #3498db;
  cursor: move;
  user-select: none;
  transition: transform 0.2s;
}

.block:hover {
  transform: scale(1.1);
  z-index: 10;
}

#container {
  position: relative;
  width: 100%;
  height: 500px;
  border: 1px solid #ccc;
  overflow: hidden;
}

进阶功能实现

积木堆叠系统

实现积木的堆叠和组合功能:

function setupStacking() {
  let currentZIndex = 1;

  document.querySelectorAll('.block').forEach(block => {
    block.addEventListener('mousedown', function() {
      this.style.zIndex = currentZIndex++;
    });
  });
}

积木旋转功能

添加积木旋转交互:

js实现积木

function setupRotation() {
  document.querySelectorAll('.block').forEach(block => {
    let rotation = 0;

    block.addEventListener('dblclick', function() {
      rotation += 15;
      this.style.transform = `rotate(${rotation}deg)`;
    });
  });
}

以上代码提供了积木效果的基本实现框架,可以根据具体需求进行调整和扩展。

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

相关文章

js如何实现继承

js如何实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例能够访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Parent…

js实现二叉树

js实现二叉树

二叉树的基本概念 二叉树是一种树形数据结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树的常见操作包括插入、删除、遍历等。 二叉树的节点定义 在JavaScript中,二叉树的节点可…

js手势实现

js手势实现

手势识别实现方法 在JavaScript中实现手势识别通常涉及监听触摸事件(touchstart、touchmove、touchend)或鼠标事件(mousedown、mousemove、mouseu…

js树实现

js树实现

树的基本概念 树是一种非线性的数据结构,由节点和边组成。每个节点包含一个值和指向子节点的引用。树的顶部节点称为根节点,没有子节点的节点称为叶节点。 树的实现方式 在JavaScript中,树可以通过…

js实现密码

js实现密码

密码强度验证 使用正则表达式验证密码强度是一种常见方法。以下代码检查密码是否包含大小写字母、数字和特殊字符,且长度至少为8位: function checkPasswordStrength(pass…

js实现跑马灯

js实现跑马灯

实现跑马灯效果 使用HTML和JavaScript可以轻松实现跑马灯效果。以下是两种常见的实现方式: HTML结构 <div id="marquee"> <span>…