20行JS代码实现网页刮刮乐效果


Posted in Javascript onJune 23, 2017

分享一段用canvas和JS制作刮刮乐的代码,JS部分去掉注释不到20行代码

效果如下

20行JS代码实现网页刮刮乐效果

盖伦.jpg

20行JS代码实现网页刮刮乐效果

刮刮乐.gif

HTML部分

<body>
  ![](img/gailun.jpg)
  <canvas id="canvas" width="400" height="300"></canvas>
 </body>

没什么要特别注意的

为了效果加了些CSS样式

CSS部分

<style type="text/css">
  *{
   margin: 0;
   padding: 0;
  }
   img{
    width: 400px;
    height: 300px;
    left: 200px;
    position: absolute;
    z-index: -1;
   }
   canvas{
    margin-left:200px;
   }
  </style>

注意

1.为了清除浏览器自带效果加了

*{
   margin: 0;
   padding: 0;
  }

2.img需要在灰布下面,加了z-index;

3.图片绝对定位

js部分

分析下逻辑

1.鼠标按下移动相应区域刮开

2.鼠标抬起改变鼠标位置不接着刮开

js代码

<script type="text/javascript">
  var canvas = document.getElementById("canvas");
  var context = canvas.getContext('2d');
   //画蒙布
  context.beginPath();
  context.fillStyle= 'grey'
  context.fillRect(0,0,400,300);
  //鼠标按下开刮
  canvas.onmousedown=function(){
   canvas.onmousemove = function(){
    //获取鼠标坐标
    var x = event.clientX;
    var y = event.clientY;
    //destination-out    显示原来的不在后来区域的部分
    context.globalCompositeOperation = "destination-out";
    context.beginPath();
    context.arc(x-200,y,30,0,Math.PI*2);
    context.fill();  
   }
  }
  //鼠标抬起不刮开
  canvas.onmouseup=function(){
   canvas.onmousemove = function(){ 
   }
  } 
  </script>

需要注意的是

1.图片和画布左移了200px,所以圆的起点坐标相对于获取位置减了200px;

2.globalCompositeOperation是画布的一个功能作用是设置或返回如何将一个源(新的)图像绘制到目标(已有)的图像上,还有其余10种写法

以上这篇20行JS代码实现网页刮刮乐效果就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
prototype.js的Ajax对象
Sep 23 Javascript
基于jquery实现一个滚动的分步注册向导-附源码
Aug 26 Javascript
原生ajax处理json格式数据的实例代码
Dec 25 Javascript
jQuery操作DOM_动力节点Java学院整理
Jul 04 jQuery
bootstrap table实现x-editable的行单元格编辑及解决数据Empty和支持多样式问题
Aug 10 Javascript
解决vue.js在编写过程中出现空格不规范报错的问题
Sep 20 Javascript
Windows下Node爬虫神器Puppeteer安装记
Jan 09 Javascript
layui table动态表头 改变表格头部 重新加载表格的方法
Sep 21 Javascript
vue element自定义表单验证请求后端接口验证
Dec 11 Javascript
js实现无缝轮播图特效
May 09 Javascript
Express 配置HTML页面访问的实现
Nov 01 Javascript
解决vue watch数据的方法被调用了两次的问题
Nov 07 Javascript
w3c编程挑战_初级脚本算法实战篇
Jun 23 #Javascript
微信小程序 获取二维码实例详解
Jun 23 #Javascript
详谈表单格式化插件jquery.serializeJSON
Jun 23 #jQuery
angularJs的ng-class切换class
Jun 23 #Javascript
关于使用js算总价的问题
Jun 23 #Javascript
angular select 默认值设置方法
Jun 23 #Javascript
获取当前按钮或者html的ID名称实例(推荐)
Jun 23 #Javascript
You might like
PHP Warning: PHP Startup: Unable to load dynamic library \ D:/php5/ext/php_mysqli.dll\
2012/06/17 PHP
php类常量的使用详解
2013/06/08 PHP
ThinkPHP使用心得分享-分页类Page的用法
2014/05/15 PHP
示例详解Laravel的注册重构
2016/08/14 PHP
php操纵mysqli数据库的实现方法
2016/09/18 PHP
解决laravel-admin 自己新建页面里 js 需要刷新一次的问题
2019/10/03 PHP
老鱼 浅谈javascript面向对象编程
2010/03/04 Javascript
jQuery操作 input type=checkbox的实现代码
2012/06/14 Javascript
解释&amp;&amp;和||在javascript中的另类用法
2014/07/28 Javascript
jquery的总体架构分析及实现示例详解
2014/11/08 Javascript
jQuery控制Div拖拽效果完整实例分析
2015/04/15 Javascript
JavaScript在网页中画圆的函数arc使用方法
2015/11/13 Javascript
javascript实现添加附件功能的方法
2015/11/18 Javascript
js canvas实现擦除动画
2016/07/16 Javascript
AngularJS 工作原理详解
2016/08/18 Javascript
JS实现图片高斯模糊切换效果的焦点图实例
2017/01/21 Javascript
easyUI下拉列表点击事件使用方法
2017/05/18 Javascript
H5+C3+JS实现五子棋游戏(AI篇)
2020/05/28 Javascript
浅谈express.js框架中间件(middleware)
2019/04/07 Javascript
微信小程序mpvue点击按钮获取button值的方法
2019/05/29 Javascript
layui的布局和表格的渲染以及动态生成表格的方法
2019/09/18 Javascript
javascript实现滚轮轮播图片
2020/12/13 Javascript
[01:02:05]LGD vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
Python计算回文数的方法
2015/03/11 Python
全面了解Python环境配置及项目建立
2016/06/30 Python
Python的Tornado框架实现异步非阻塞访问数据库的示例
2016/06/30 Python
Python简单实现的代理服务器端口映射功能示例
2018/04/08 Python
python 实现Flask中返回图片流给前端展示
2020/01/09 Python
Python sqlite3查询操作过程解析
2020/02/20 Python
如何用Matlab和Python读取Netcdf文件
2021/02/19 Python
VELTRA台湾:世界自由行专家
2017/08/15 全球购物
Antler英国官网:购买安特丽行李箱、拉杆箱
2019/08/25 全球购物
英文自荐信
2013/12/15 职场文书
医药类个人求职的自我评价
2014/02/12 职场文书
公司员工安全协议书
2014/11/21 职场文书
义卖募捐活动总结
2015/05/09 职场文书