当前位置:首页 > JavaScript

js实现刮刮卡

2026-04-04 08:56:14JavaScript

js实现刮刮卡

js实现刮刮卡

实现刮刮卡效果

使用HTML5 Canvas和JavaScript可以实现刮刮卡效果。以下是一个完整的实现方法:

HTML结构

<canvas id="scratchCanvas" width="300" height="150"></canvas>
<div id="result">恭喜中奖!</div>

CSS样式

#scratchCanvas {
  border: 1px solid #000;
  cursor: crosshair;
  position: relative;
}

#result {
  position: absolute;
  top: 50px;
  left: 50px;
  font-size: 24px;
  color: red;
  display: none;
}

JavaScript代码

const canvas = document.getElementById('scratchCanvas');
const ctx = canvas.getContext('2d');
const result = document.getElementById('result');

// 初始化画布
function initCanvas() {
  ctx.fillStyle = '#ccc';
  ctx.fillRect(0, 0, canvas.width, canvas.height);
  ctx.font = '20px Arial';
  ctx.fillStyle = '#000';
  ctx.fillText('刮开此处查看结果', 50, 80);
}

// 鼠标事件处理
let isDrawing = false;

canvas.addEventListener('mousedown', () => {
  isDrawing = true;
});

canvas.addEventListener('mouseup', () => {
  isDrawing = false;
});

canvas.addEventListener('mousemove', (e) => {
  if (!isDrawing) return;

  const rect = canvas.getBoundingClientRect();
  const x = e.clientX - rect.left;
  const y = e.clientY - rect.top;

  // 清除圆形区域
  ctx.globalCompositeOperation = 'destination-out';
  ctx.beginPath();
  ctx.arc(x, y, 15, 0, Math.PI * 2);
  ctx.fill();

  // 检查刮开面积
  checkScratchedArea();
});

// 触摸事件处理(移动端支持)
canvas.addEventListener('touchstart', (e) => {
  e.preventDefault();
  isDrawing = true;
});

canvas.addEventListener('touchend', () => {
  isDrawing = false;
});

canvas.addEventListener('touchmove', (e) => {
  if (!isDrawing) return;

  e.preventDefault();
  const rect = canvas.getBoundingClientRect();
  const touch = e.touches[0];
  const x = touch.clientX - rect.left;
  const y = touch.clientY - rect.top;

  ctx.globalCompositeOperation = 'destination-out';
  ctx.beginPath();
  ctx.arc(x, y, 20, 0, Math.PI * 2);
  ctx.fill();

  checkScratchedArea();
});

// 检查刮开面积比例
function checkScratchedArea() {
  const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
  const pixels = imageData.data;
  let transparentPixels = 0;

  for (let i = 0; i < pixels.length; i += 4) {
    if (pixels[i + 3] === 0) {
      transparentPixels++;
    }
  }

  const scratchedRatio = transparentPixels / (canvas.width * canvas.height);

  if (scratchedRatio > 0.6) {
    result.style.display = 'block';
  }
}

// 初始化
initCanvas();

实现说明

  1. 使用Canvas绘制刮刮卡覆盖层,默认显示灰色背景和提示文字
  2. 监听鼠标或触摸事件,当用户刮动时清除对应区域的像素
  3. 使用globalCompositeOperation设置为'destination-out'来实现擦除效果
  4. 定期检查被刮开的面积比例,当超过阈值时显示结果
  5. 添加了移动端触摸事件支持,使在手机和平板上也能使用

优化建议

  1. 可以添加重置功能,让用户能重新刮卡
  2. 可以预加载奖品图片或信息,提高用户体验
  3. 调整刮开阈值(目前设置为60%)以适应不同需求
  4. 添加动画效果,使刮卡过程更加流畅

兼容性说明

此实现使用了HTML5 Canvas特性,兼容所有现代浏览器。对于IE9及以下版本,可能需要添加兼容层或替代方案。

标签: 刮刮卡js
分享给朋友:

相关文章

js 实现vue

js 实现vue

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

js实现列表

js实现列表

使用 JavaScript 实现列表 JavaScript 提供了多种方式来实现列表功能,包括数组操作、DOM 元素动态生成等。以下是几种常见的实现方法: 使用数组存储列表数据 数组是 JavaSc…

js实现tab选项卡切换

js实现tab选项卡切换

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

js图片轮播的实现

js图片轮播的实现

基础图片轮播实现 使用HTML、CSS和JavaScript实现一个简单的图片轮播效果。HTML部分定义轮播容器和图片,CSS负责样式和过渡效果,JavaScript处理逻辑。 <div cl…

js实现按钮点击

js实现按钮点击

实现按钮点击的JavaScript方法 HTML按钮元素 在HTML中创建按钮元素,为其添加id或class以便JavaScript选择: <button id="myButton">点…

js 实现图片轮播

js 实现图片轮播

基础实现方案 使用HTML、CSS和JavaScript创建一个简单的图片轮播。HTML部分定义轮播容器和图片,CSS负责样式布局,JavaScript处理轮播逻辑。 <div class="…