当前位置:首页 > JavaScript

js实现剪纸

2026-03-14 01:46:13JavaScript

使用Canvas实现剪纸效果

在JavaScript中实现剪纸效果可以通过Canvas API完成。以下是核心实现方法:

创建Canvas元素并获取上下文

const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
canvas.width = 800;
canvas.height = 600;
document.body.appendChild(canvas);

绘制剪纸基础形状

ctx.fillStyle = 'red';
ctx.beginPath();
ctx.arc(400, 300, 200, 0, Math.PI * 2);
ctx.fill();

添加剪纸镂空效果

ctx.globalCompositeOperation = 'destination-out';
ctx.beginPath();
ctx.moveTo(400, 100);
ctx.lineTo(500, 500);
ctx.lineTo(300, 500);
ctx.closePath();
ctx.fill();

使用SVG实现剪纸效果

SVG更适合创建矢量剪纸图案:

创建SVG元素

const svg = document.createElementNS("http://www.w3.org/2000/svg", "svg");
svg.setAttribute('width', '800');
svg.setAttribute('height', '600');
document.body.appendChild(svg);

添加剪纸路径

js实现剪纸

const path = document.createElementNS("http://www.w3.org/2000/svg", "path");
path.setAttribute('d', 'M400,300 a200,200 0 1,0 0.1,0 z');
path.setAttribute('fill', 'red');
svg.appendChild(path);

添加镂空效果

const hole = document.createElementNS("http://www.w3.org/2000/svg", "path");
hole.setAttribute('d', 'M400,100 L500,500 L300,500 Z');
hole.setAttribute('fill', 'white');
svg.appendChild(hole);

使用CSS Clip-path实现简单剪纸

对于简单的剪纸效果,CSS也能实现:

HTML结构

<div class="paper-cut"></div>

CSS样式

js实现剪纸

.paper-cut {
  width: 400px;
  height: 400px;
  background-color: red;
  clip-path: polygon(
    50% 0%, 
    80% 100%, 
    20% 100%
  );
}

复杂剪纸图案生成算法

对于需要程序化生成的复杂剪纸图案:

生成随机剪纸图案

function generateRandomPaperCut(ctx) {
  const centerX = 400;
  const centerY = 300;
  const radius = 200;
  const points = 12;

  ctx.beginPath();
  for(let i = 0; i < points; i++) {
    const angle = (i / points) * Math.PI * 2;
    const randomRadius = radius * (0.7 + Math.random() * 0.3);
    const x = centerX + Math.cos(angle) * randomRadius;
    const y = centerY + Math.sin(angle) * randomRadius;

    if(i === 0) {
      ctx.moveTo(x, y);
    } else {
      ctx.lineTo(x, y);
    }
  }
  ctx.closePath();
  ctx.fill();
}

动画剪纸效果

为剪纸添加动画效果:

旋转剪纸动画

let angle = 0;
function animate() {
  ctx.clearRect(0, 0, canvas.width, canvas.height);
  ctx.save();
  ctx.translate(400, 300);
  ctx.rotate(angle);
  ctx.translate(-400, -300);

  // 绘制剪纸
  ctx.fillStyle = 'red';
  ctx.beginPath();
  ctx.arc(400, 300, 200, 0, Math.PI * 2);
  ctx.fill();

  ctx.globalCompositeOperation = 'destination-out';
  // 添加镂空图案
  ctx.restore();

  angle += 0.01;
  requestAnimationFrame(animate);
}
animate();

标签: 剪纸js
分享给朋友:

相关文章

js实现拖拽

js实现拖拽

实现拖拽的基本步骤 通过监听鼠标事件(mousedown、mousemove、mouseup)实现拖拽功能。以下是核心代码逻辑: const draggableElement = document.…

js实现乘

js实现乘

JavaScript 实现乘法运算 在 JavaScript 中实现乘法运算可以通过多种方式完成,包括基本运算符、函数封装以及高级算法(如大数乘法)。以下是几种常见方法: 使用基本乘法运算符 Jav…

js 实现vue

js 实现vue

Vue.js 的基本实现 在 JavaScript 中实现 Vue.js 的核心功能,可以通过数据绑定、响应式系统和虚拟 DOM 来实现。以下是实现 Vue.js 核心功能的简化版本。 数据响应式系…

js实现论坛

js实现论坛

实现论坛的基本功能 使用JavaScript实现一个论坛需要结合前端和后端技术。前端可以使用React、Vue或Angular等框架,后端可以选择Node.js配合Express或Koa框架。数据库可…

js实现tab选项卡切换

js实现tab选项卡切换

实现Tab选项卡切换的JavaScript方法 使用纯JavaScript实现Tab切换功能,可以通过监听点击事件动态切换内容显示状态。以下是两种常见实现方式: 基础DOM操作实现 /…

js实现vr

js实现vr

使用WebXR API实现VR体验 WebXR是浏览器中实现VR和AR体验的标准API,它取代了早期的WebVR。现代浏览器如Chrome、Edge和Firefox已支持WebXR。 // 初始化W…