当前位置:首页 > JavaScript

js实现划猪

2026-03-16 02:16:15JavaScript

实现划猪效果的JavaScript方法

在JavaScript中实现"划猪"效果通常指模拟猪的涂鸦或绘制轨迹。以下是几种实现方式:

使用Canvas绘制轨迹

通过HTML5 Canvas可以轻松实现鼠标轨迹绘制效果:

const canvas = document.getElementById('drawingCanvas');
const ctx = canvas.getContext('2d');
let isDrawing = false;

canvas.addEventListener('mousedown', startDrawing);
canvas.addEventListener('mousemove', draw);
canvas.addEventListener('mouseup', stopDrawing);
canvas.addEventListener('mouseout', stopDrawing);

function startDrawing(e) {
    isDrawing = true;
    draw(e);
}

function draw(e) {
    if (!isDrawing) return;

    ctx.lineWidth = 5;
    ctx.lineCap = 'round';
    ctx.strokeStyle = '#FF69B4'; // 粉色线条

    ctx.lineTo(e.clientX - canvas.offsetLeft, e.clientY - canvas.offsetTop);
    ctx.stroke();
    ctx.beginPath();
    ctx.moveTo(e.clientX - canvas.offsetLeft, e.clientY - canvas.offsetTop);
}

function stopDrawing() {
    isDrawing = false;
    ctx.beginPath();
}

使用SVG实现动态路径

通过SVG可以创建更流畅的绘制动画:

const svg = document.getElementById('svgCanvas');
let path = null;

svg.addEventListener('mousedown', startSvgPath);
svg.addEventListener('mousemove', continueSvgPath);
svg.addEventListener('mouseup', endSvgPath);

function startSvgPath(e) {
    path = document.createElementNS('http://www.w3.org/2000/svg', 'path');
    path.setAttribute('stroke', 'pink');
    path.setAttribute('stroke-width', '3');
    path.setAttribute('fill', 'none');

    const point = getSvgPoint(e);
    path.setAttribute('d', `M${point.x},${point.y}`);
    svg.appendChild(path);
}

function continueSvgPath(e) {
    if (!path) return;
    const point = getSvgPoint(e);
    const currentD = path.getAttribute('d');
    path.setAttribute('d', `${currentD} L${point.x},${point.y}`);
}

function endSvgPath() {
    path = null;
}

function getSvgPoint(e) {
    const pt = svg.createSVGPoint();
    pt.x = e.clientX;
    pt.y = e.clientY;
    return pt.matrixTransform(svg.getScreenCTM().inverse());
}

添加猪叫声效果

为增强体验,可以添加鼠标按下时的猪叫声:

function playOink() {
    const oink = new Audio('https://www.soundjay.com/mechanical/sounds/pig-01.mp3');
    oink.play();
}

// 在startDrawing或startSvgPath函数中添加
playOink();

实现橡皮擦功能

添加清除绘制的功能:

function clearCanvas() {
    if (ctx) ctx.clearRect(0, 0, canvas.width, canvas.height);
    if (svg) svg.innerHTML = '';
}

document.getElementById('clearBtn').addEventListener('click', clearCanvas);

移动端触摸支持

为支持触摸设备,需添加触摸事件监听:

js实现划猪

canvas.addEventListener('touchstart', handleTouch);
canvas.addEventListener('touchmove', handleTouch);

function handleTouch(e) {
    e.preventDefault();
    const touch = e.touches[0];
    const mouseEvent = new MouseEvent(
        e.type === 'touchstart' ? 'mousedown' : 'mousemove',
        {
            clientX: touch.clientX,
            clientY: touch.clientY
        }
    );
    canvas.dispatchEvent(mouseEvent);
}

以上代码组合可以实现一个完整的"划猪"交互效果,包括绘制轨迹、声音反馈和清除功能。

标签: js
分享给朋友:

相关文章

js实现vue

js实现vue

Vue.js 的基本实现方法 在 JavaScript 中实现 Vue.js 的功能,可以通过直接引入 Vue 库或使用现代构建工具(如 Vite 或 Webpack)。以下是几种常见的实现方式:…

js 实现链表

js 实现链表

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。与数组不同,链表在内存中是非连续存储的,插入和删除操作效率较高。 链表的实现 在 JavaScrip…

js树实现

js树实现

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

js实现密码

js实现密码

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

js实现路由

js实现路由

js实现路由的方法 在JavaScript中实现路由功能可以通过多种方式完成,以下是几种常见的方法: 使用原生JavaScript实现路由 通过监听window.onhashchange事件来实现基…

js实现搜索

js实现搜索

实现搜索功能的方法 在JavaScript中实现搜索功能可以通过多种方式完成,以下是几种常见的实现方法。 使用数组的filter方法 通过数组的filter方法可以筛选出符合条件的数据项。假设有一个…