Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >案例效果 | canvas刮刮卡抽奖

案例效果 | canvas刮刮卡抽奖

作者头像
HTML5学堂
发布于 2021-11-25 02:13:41
发布于 2021-11-25 02:13:41
2.6K00
代码可运行
举报
文章被收录于专栏:HTML5学堂HTML5学堂
运行总次数:0
代码可运行

案例效果

案例代码

HTML代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!DOCTYPE html>
<html lang="zh">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>刮刮卡抽奖 - 公众号:HTML5 WEB前端分享</title>
  <link rel="stylesheet" type="text/css" href="http://css.h5course.cn/reset-1.0.0.css">
    <script type="text/javascript">
    !function(N,M){function L(){var a=I.getBoundingClientRect().width;a/F>540&&(a=540*F);var d=a/10;I.style.fontSize=d+"px",D.rem=N.rem=d}var K,J=N.document,I=J.documentElement,H=J.querySelector('meta[name="viewport"]'),G=J.querySelector('meta[name="flexible"]'),F=0,E=0,D=M.flexible||(M.flexible={});if(H){console.warn("将根据已有的meta标签来设置缩放比例");var C=H.getAttribute("content").match(/initial\-scale=([\d\.]+)/);C&&(E=parseFloat(C[1]),F=parseInt(1/E))}else{if(G){var B=G.getAttribute("content");if(B){var A=B.match(/initial\-dpr=([\d\.]+)/),z=B.match(/maximum\-dpr=([\d\.]+)/);A&&(F=parseFloat(A[1]),E=parseFloat((1/F).toFixed(2))),z&&(F=parseFloat(z[1]),E=parseFloat((1/F).toFixed(2)))}}}if(!F&&!E){var y=N.navigator.userAgent,x=(!!y.match(/android/gi),!!y.match(/iphone/gi)),w=x&&!!y.match(/OS 9_3/),v=N.devicePixelRatio;F=x&&!w?v>=3&&(!F||F>=3)?3:v>=2&&(!F||F>=2)?2:1:1,E=1/F}if(I.setAttribute("data-dpr",F),!H){if(H=J.createElement("meta"),H.setAttribute("name","viewport"),H.setAttribute("content","initial-scale="+E+", maximum-scale="+E+", minimum-scale="+E+", user-scalable=no"),I.firstElementChild){I.firstElementChild.appendChild(H)}else{var u=J.createElement("div");u.appendChild(H),J.write(u.innerHTML)}}N.addEventListener("resize",function(){clearTimeout(K),K=setTimeout(L,300)},!1),N.addEventListener("pageshow",function(b){b.persisted&&(clearTimeout(K),K=setTimeout(L,300))},!1),"complete"===J.readyState?J.body.style.fontSize=12*F+"px":J.addEventListener("DOMContentLoaded",function(){J.body.style.fontSize=12*F+"px"},!1),L(),D.dpr=N.dpr=F,D.refreshRem=L,D.rem2px=function(d){var c=parseFloat(d)*this.rem;return"string"==typeof d&&d.match(/rem$/)&&(c+="px"),c},D.px2rem=function(d){var c=parseFloat(d)/this.rem;return"string"==typeof d&&d.match(/px$/)&&(c+="rem"),c}}(window,window.lib||(window.lib={}));
</script>
  <style>
    .wrap {
      padding: 10rem 0 0;
    }
    .canvas-main {
      width: 8.933333rem;
      height: 3.466666rem;
      margin: 0 auto;
      background: url(images/bg.png) center center no-repeat;
      background-size: 100%;
    }
    .wrap canvas {
      width: 8.933333rem;
      height: 3.466666rem;
    }
</style>
</head>
<body>
    <!-- 公众号:HTML5 WEB前端分享 -->
    <!-- 作者:梦幻雪冰(懂点君) -->
  <div class="wrap" id="outer">
    <div class="canvas-main">
      <canvas id="scrape-canvas"></canvas>      
    </div>
  </div>
  <script src="http://js.h5course.cn/jquery-1.11.3.min.js"></script>
  <script src="js/index.js"></script>
</body>
</html>

JavaScript代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * 公众号:HTML5 WEB前端分享
 * 作者:梦幻雪冰(懂点君)
 */
// 显示设备的物理像素分辨率与CSS像素分辨率之比
var ratio = window.devicePixelRatio || 1,
fontem = parseInt(window.getComputedStyle(document.documentElement, null)["font-size"]),
canvas = document.getElementById('scrape-canvas'),
width = canvas.clientWidth * ratio,
height = canvas.clientHeight * ratio,
context = canvas.getContext("2d");
canvas.width = width;
canvas.height = height;

// 绘制目标图像
context.fillStyle = '#aaa';
context.fillRect(0, 0, width, height);
context.fill();
context.font = "2rem Arial";
// 水平对齐
context.textAlign = "center";
// 垂直对齐
context.textBaseline = "middle";
context.fillStyle = "#666";
context.fillText("刮奖区", width / 2, height / 2 + 6);

// 新绘制和已经存在的canvas内容不重叠的部分的canvas内容会被保留,重叠的会透明掉
context.globalCompositeOperation = 'destination-out';

//PC端的处理
canvas.addEventListener("mousedown", handlerDownFn, false);
canvas.addEventListener("mousemove", handlerMoveFn, false);
canvas.addEventListener("mouseup", handlerUpFn, false);
//移动端的处理
canvas.addEventListener('touchstart', handlerDownFn, false);
canvas.addEventListener('touchmove', handlerMoveFn, false);
canvas.addEventListener('touchend', handlerUpFn, false);

var hasDown = false;

// 鼠标按下
function handlerDownFn(event) {
  event.preventDefault();
  hasDown = true;
}

// 鼠标移动
function handlerMoveFn(event) {
  event.preventDefault();
  
  if (hasDown) {
    if (event.changedTouches) {
      // changedTouches:涉及当前(引发)事件的触摸点的列表
      event = event.changedTouches[event.changedTouches.length - 1];
    }
    
    var scrollTop = document.documentElement.scrollTop || document.body.scrollTop,
    x = event.clientX - canvas.offsetLeft,
    y = scrollTop + event.clientY - canvas.offsetTop;

    context.beginPath();
    context.arc(x * ratio - fontem / 2, y * ratio - fontem / 2, fontem * 1, 0, Math.PI * 2, true);
    //设置globalCompositeOperation = 'destination-out',画出来是透明的
    context.fill();
  }
}

// 鼠标抬起
function handlerUpFn(event) {
  event.preventDefault();

  //得到canvas的全部数据
  var imageData = context.getImageData(0, 0, width, height),
  length = imageData.data.length,
  transparentCount = 0;
  
  for (var i = 3; i < length; i += 4) {
    // 判断alpha值是否为0,0为透明
    if (imageData.data[i] == 0) transparentCount++;
  }
  
  //当被刮开的区域等于四分之一时,则可以开始处理结果
  if (transparentCount >= (length / 4 / 4)) {
    alert('刮开啦');
  }
  
  hasDown = false;
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-11-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 懂点君 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【CodeBuddy】三分钟开发一个实用小功能之:九宫格图片切割&生成器
我正在参加CodeBuddy「首席试玩官」内容创作大赛,本文所使用的 CodeBuddy 免费下载链接: 腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴
Jimaks
2025/05/22
1060
【CodeBuddy】三分钟开发一个实用小功能之:九宫格图片切割&生成器
[移动端抽奖刮刮卡] Html5 Canvas 实现的可刮涂层效果
亲,像下面这种有关移动互联网迅猛发展的报告,最近见得很多吧?在座各位作为互联网行业的弄潮儿,看完是不是很有历史使命感和紧迫感呢?简直热血喷张、跃跃欲试,甚至有一种“不移动不成活”的冲动吧?!
李维亮
2021/07/09
1.2K0
强大的图片预览组件Viewer.js
Viewer.js 是一款强大的图片查看器。我们通过Viewer.js 在页面上添加强大的图片查看功能,同时,这款优秀的插件配置操作起来也非常的方便。
五月
2022/11/14
3.7K0
强大的图片预览组件Viewer.js
Canvas 进阶(四)实现一个“刮刮乐”游戏
我们创建一个 ScrapAward 类,通过传入 option 和调用其 restart() 方法实现重新开始。
小皮咖
2019/11/05
1.1K0
移动端页面自适应解决方案:rem 布局篇
假设设计妹妹给我们的设计稿尺寸为750 * 1340。结合网易、淘宝移动端首页html元素上的font-size属性,html5设计稿尺寸以及前端与设计之间协作流程一般分为下面两种。
用户1272076
2019/03/26
2.3K0
Canvas
http://www.w3c.org/TR/2dcontext/ https://html.spec.whatwg.org/
jinghong
2020/05/09
13.2K0
Canvas
《最新出炉》系列初窥篇-Python+Playwright自动化测试-64 - Canvas和SVG元素推拽
今天宏哥分享的在实际测试工作中很少遇到,比较生僻,如果突然遇到我们可能会脑大、懵逼,一时之间不知道怎么办?所以宏哥这里提供一种思路供大家学习和参考。
北京-宏哥
2024/06/29
3330
《最新出炉》系列初窥篇-Python+Playwright自动化测试-64 - Canvas和SVG元素推拽
原 canvas小案例集合(小画板、画的回
作者:汪娇娇 日期:2016.12.8 在现在这个公司呆了4个多月,也是研究了canvas将近4个月,前两周心里就痒痒的想写这方面的博客,但一直没时间。可一直拖着也不是个办法,就这样抽抽空来写吧。 c
jojo
2018/05/03
1.4K1
原                                                                                canvas小案例集合(小画板、画的回
Canvas如何实现滤镜效果
用过photoshop或者美颜相机,我们都知道滤镜可以帮助我们把图片修缮的更加完美。
terrence386
2022/07/15
1.4K0
Canvas如何实现滤镜效果
Python与HTML倾情打造情人节示爱网站:愿天下有情人终成眷属!
吸引他们在一起的,不是Python的“人缘广”,也不是HTML的“花里胡哨”,而是他们为了一件事愿意携起手来共同创造价值的魅力。
荣仔_最靓的仔
2022/01/05
4730
Python与HTML倾情打造情人节示爱网站:愿天下有情人终成眷属!
用Canvas画一个刮刮乐
Canvas 通过 JavaScript 来绘制 2D图形。Canvas 是逐像素进行渲染的。开发者可以通过javascript脚本实现任意绘图。Canvas元素是HTML5的一部分,允许脚本语言动态渲染位图像。canvas是HTML5中的新元素,使用javascript用它来绘制图形、图标、以及其它任何视觉性图像。 在国外问答网站Quora上,许多开发者对于HTML5 Canvas元素的实用性进行了一系列探讨。Canvas非常灵活,能够很好地融合JavaScript代码并在浏览器内绘制华丽的图形。 学习网
王小婷
2018/06/01
2.2K3
因业务需要,我用canvas写了一个签名板
文章链接:https://cloud.tencent.com/developer/article/2468390
一起重学前端
2024/11/21
1240
canvas动画-跟着鼠标移到的小球 原
小球可以跟着鼠标移到,点击小球时会按既定的坐标移到小球(不再跟着鼠标移到),鼠标移出canvas,此时动画停止,鼠标进入动画时动画开始
tianyawhl
2019/04/04
5110
Canvas学习系列二:Canvas的坐标系统
版权声明:本文为原创文章发布于公众号:Modeng , 你可以随意转载但请务必注明出处!!! https://blog.csdn.net/qq_32135281/article/details/73163489
六小登登
2018/09/17
6.7K0
Canvas学习系列二:Canvas的坐标系统
Canvas 进阶(三)ts + canvas 重写”辨色“小游戏
之前写过一篇文章 ES6 手写一个“辨色”小游戏, 感觉好玩挺不错。岂料评论区大神频出,其中有人指出,打开控制台,输入以下代码:
小皮咖
2019/11/05
1.1K0
Canvas 进阶(三)ts + canvas 重写”辨色“小游戏
原生H5实现观音抽签祈福效果
代码已上传至github github代码地址:https://github.com/Miofly/mio.git
用户10106350
2022/10/28
9920
原生H5实现观音抽签祈福效果
uniapp实现小程序页面自由拖拽组件
这种方式最容易想到,通过js监听触摸位置动态修改元素坐标。但是拖拽是一个实时性要求非常高的操作,你不能说在这个操作里面去设置节流函数减少setData操作,并且本身每次setData操作也是比较耗性能的,很容易造成拖拽卡顿,这个方案可以首先排除。
用户6256742
2024/07/31
1.7K0
【动效】:刮刮卡
A viewport represents a polygonal (normally rectangular) area in computer graphics that is currently being viewed. In web browser terms, it refers to the part of the document you're viewing which is currently visible in its window (or the screen, if the document is being viewed in full screen mode). Content outside the viewport is not visible onscreen until scrolled into view.
WEBJ2EE
2020/11/05
1.3K0
【动效】:刮刮卡
用 CodeBuddy 打造一张属于她的 520 刮刮乐,程序员的浪漫可以这么强大!
520 马上就要来了,作为一个程序员,除了发红包还能干点啥?你可能会觉得,发个红包是最省事的选择,可是,多少有点“没诚意”的味道。尤其是在这个仪式感爆棚的日子里,直接塞个 1314 元红包过去,虽然看起来挺大气,但终究少了点心思和惊喜。
不惑
2025/05/19
1860
用 CodeBuddy 打造一张属于她的 520 刮刮乐,程序员的浪漫可以这么强大!
h5逐步实现 <<canvas系统>>
第三:让canvas绘图可以画整个body.并且要设置线条的宽度+线条结束时候的形状+两天线条相交时的形状.+线条的颜色.
贵哥的编程之路
2020/10/28
3730
h5逐步实现 <<canvas系统>>
推荐阅读
相关推荐
【CodeBuddy】三分钟开发一个实用小功能之:九宫格图片切割&生成器
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验