点击上方 前端Q,关注公众号

回复加群,加入前端Q技术交流群

前言

今天在一个彩票网站看到了一个刮刮乐的效果,觉得挺有意思的就打算来仿写一个,经过一番简单的思考大概就有了基本都想法。总体效果使用Canvas制作设置抽奖概率的刮刮乐,制作过程不算繁琐,非常简单。

制作

html

一个居中的标题和刮卡区域。

<h1 style="text-align: center;">刮刮乐</h1>
<div id="ggk"><div class="jp">不抽大嘴巴子</div><canvas id="canvas" width="400" height="100"></canvas>
</div>

css

添加样式

#ggk {width: 400px;height: 100px;position: relative;left: 50%;transform: translate(-50%, 0);
}.jp,
canvas {position: absolute;width: 400px;height: 100px;left: 0;top: 0;text-align: center;font-size: 25px;line-height: 100px;color: deeppink;
}

默认

鼠标拖拽不会选中文字。

document.addEventListener("selectstart", function (e) {e.preventDefault();
})

canvas

设置Canvas画布。

let canvas = document.querySelector("#canvas");
let ctx = canvas.getContext('2d');
ctx.fillStyle = 'darkgray';
ctx.fillRect(0, 0, 400, 100);

绘制

判断鼠标是否按下。

let isDraw = false;
canvas.onmousedown = function () {isDraw = true;
}

鼠标按下isDraw为true的话,才可以涂抹,把Canvas的灰色涂抹掉。

let ggkDom = document.querySelector('#ggk');
let jp = document.querySelector('.jp');
canvas.onmousemove = function (e) {if (isDraw) {let x = e.pageX - ggkDom.offsetLeft + ggkDom.offsetWidth / 2;let y = e.pageY - ggkDom.offsetTop;ctx.beginPath();ctx.arc(x, y, 30, 0, 2 * Math.PI);ctx.globalCompositeOperation = 'destination-out';ctx.fill();ctx.closePath();}
}

鼠标弹起时,isDraw为flase

document.onmouseup = function () {isDraw = false;
}

奖品

设置奖品,p是中奖率。

let arr = [{ content: '一等奖:一个大嘴巴子', p: 0.1 },{ content: '二等奖:两个大嘴巴子', p: 0.2 },{ content: '三等奖:三个大嘴巴子', p: 0.3 }
];

创建一个随机数

let sj = Math.random();

随机数去判断,判断成功后,返回成功的值。

if (sj < arr[0].p) {jp.innerHTML = arr[0].content;
} else if (sj < arr[1].p) {jp.innerHTML = arr[1].content;
} else if (sj < arr[2].p) {jp.innerHTML = arr[2].content;
}

最后

其实使用这个还可以利用这个制作签名,绘画等功能,因为都是涂抹或者绘画东西,大概是差不多的,有兴趣可以去学习了解一下。

关于本文

来自:WebW0rld

https://juejin.cn/post/7142839691203575838

往期推荐

10 个可以副业赚钱的网站,总有一个适合你

推荐20个开源的前端低代码项目

用 Three.js 做个兔吉宝箱给大家拜个年

最后

  • 欢迎加我微信,拉你进技术群,长期交流学习...

  • 欢迎关注「前端Q」,认真学前端,做个专业的技术人...

点个在看支持我吧

使用Canvas制作刮刮乐,看看你能刮出什么奖品来?相关推荐

  1. html刮奖特效,jQuery+HTML5手机刮刮乐刮奖代码

    jQuery+HTML5手机刮刮乐刮奖代码 jQuery+HTML5手机刮刮乐刮奖代码 var _htmlFontSize = (function () { var clientWidth = doc ...

  2. Android 自定义控件实现刮刮卡效果 真的就只是刮刮卡么

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/40162163 , 本文出自:[张鸿洋的博客] 很久以前也过一个html5的刮刮卡 ...

  3. html根据字段制作曲线图,canvas制作简单的HTML图表,折线或者矩形统计(原创)

    插件描述:canvas制作简单的HTML图表,折线或者矩形统计 使用canvas制作简单的HTML图表,折线或者矩形统计. 使用canvas制作简单的HTML图表,折线或者矩形统计,简单而实用.图形由 ...

  4. [译]怎样用HTML5 Canvas制作一个简单的游戏

    这是我翻译自LostDecadeGames主页的一篇文章,原文地址:How To Make A Simple HTML5 Canvas Game. 下面是正文: 自从我制作了一些HTML5游戏(例如C ...

  5. html制作动态坐标轴,HTML5 canvas制作动态随机星图

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 本篇将会介绍如何用canvas制作动态随机移动的星图啦啦啦 小白在远离小白道路上的第一步就是搭个博客 前言 这次的博文不 ...

  6. Canvas制作的下雨动画

    简介 在codepen上看到一个Canvas做的下雨效果动画,感觉蛮有意思的.就研究了下,这里来分享下,实现技巧.效果可以见下面的链接. 霓虹雨: http://codepen.io/natewile ...

  7. [html] 使用canvas制作一个印章

    [html] 使用canvas制作一个印章 <!DOCTYPE html> <html lang="en"> <head><meta ch ...

  8. html制作状态栏数字时钟,html5 canvas制作15种数字时钟样式代码

    特效描述:html5 canvas制作 数字时钟样式.html5 canvas数字时钟代码 代码结构 1. 引入CSS 2. 引入JS 3. HTML代码 clockd1_={ "indic ...

  9. 飞机大战HTML5游戏源码,基于Canvas制作的网页版飞机大战游戏+飞机大战手机端

    简介: 飞机大战HTML5游戏源码是一款基于Canvas制作的网页版飞机大战游戏,画质精美的飞机大战手机端游戏源码 网盘下载地址: http://kekewangLuo.net/W1S2LQcqAT2 ...

最新文章

  1. 世界首部AI创作漫画正式发表:StyleGAN神还原《铁臂阿童木》画风,继承手冢治虫衣钵...
  2. 准备搭建经营分析前端试验型平台
  3. Material Design控件使用学习 TabLayout+SwipeRefreshlayout
  4. Win2003下Exchange2003部署图解之六
  5. 树莓派一键备份脚本 备份为img镜像 可用于量产 可选备份位置 适配Debian/Ubuntu
  6. 开发运维效率提升 80%,计算成本下降 50%,分众传媒的 Serverless 实践
  7. php接收arduino向服务器发来的请求
  8. openresty 环境搭建
  9. Python可变参数、关键字参数及命名关键字参数
  10. 软件_搭建rtsp视频推送环境
  11. python查看函数源代码
  12. 德语翻译器在线翻译中文-德语翻译器支持各大语言翻译
  13. 傅里叶分析原理——非常好的一篇讲解文章
  14. 曝光!中国知名互联网公司背后的风投
  15. Nmap扫描和识别服务
  16. Android 拍照、选择图片并裁剪
  17. 资深SRE带你看阿里云香港故障
  18. 省份对应拼音(MicroStrategy)
  19. 微信小程序云开发学习指南(一)
  20. javascript中函数参数是evt详解

热门文章

  1. 领导提拔你,还是干掉你,从来都不是看能力!
  2. halcon_halcon图像处理基本运算
  3. javascript组合模式创建对象
  4. 壹度婚礼邀请函请帖小程序免费制作
  5. EFR32 gecko 2生产烧录
  6. 小学计算机课教师教学笔记,小学信息技术教师读书笔记
  7. Could not find a version that satisfies the requirement cryptography (from pymysql) (from versions:
  8. 传感器采集数据 Python123
  9. CDS TABLE FUNCTOIN传参,指定客户端
  10. 【目标跟踪】基于UKF实现自行车状态估计含Matlab源码