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 相关文章推荐
jquery的ajax和getJson跨域获取json数据的实现方法
Feb 04 Javascript
JavaScript数据结构和算法之二叉树详解
Feb 11 Javascript
yui3的AOP(面向切面编程)和OOP(面向对象编程)
May 01 Javascript
JQuery插件jcarousellite的参数中文说明
May 11 Javascript
jQuery实现可展开合拢的手风琴面板菜单
Sep 15 Javascript
vue动态组件实现选项卡切换效果
Mar 08 Javascript
详解angularJs模块ui-router之状态嵌套和视图嵌套
Apr 28 Javascript
Vue项目webpack打包部署到Tomcat刷新报404错误问题的解决方案
May 15 Javascript
koa2的中间件功能及应用示例
Mar 05 Javascript
js实现简单放大镜效果
Mar 07 Javascript
JS实现手风琴特效
Nov 08 Javascript
React中的Context应用场景分析
Jun 11 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
PHP5.4中json_encode中文转码的变化小结
2013/01/30 PHP
ThinkPHP实现带验证码的文件上传功能实例
2014/11/01 PHP
php实现cookie加密的方法
2015/03/10 PHP
php制作文本式留言板
2015/03/18 PHP
php基于自定义函数记录log日志方法
2017/07/21 PHP
js简易namespace管理器 实例代码
2013/06/21 Javascript
js实现按钮加背景图片常用方法
2014/11/01 Javascript
javascript实现选中复选框后相关输入框变灰不可用的方法
2015/08/11 Javascript
jQuery form插件的使用之处理server返回的JSON, XML,HTML数据
2016/01/26 Javascript
JS之相等操作符详解
2016/09/13 Javascript
浅谈angularjs module返回对象的坑(推荐)
2016/10/21 Javascript
JQuery和PHP结合实现动态进度条上传显示
2016/11/23 Javascript
解决vue2.x中数据渲染以及vuex缓存的问题
2017/07/13 Javascript
layui-select动态选中值的例子
2019/09/23 Javascript
jQuery利用cookie 实现本地收藏功能(不重复无需多次命名)
2019/11/07 jQuery
JavaScript遍历数组的方法代码实例
2020/01/14 Javascript
vue实现匀速轮播效果
2020/06/29 Javascript
[00:37]DOTA2上海特级锦标赛 Secert 战队宣传片
2016/03/03 DOTA
[06:53]2018DOTA2国际邀请赛寻真——为复仇而来的Newbee
2018/08/15 DOTA
菜鸟使用python实现正则检测密码合法性
2016/01/05 Python
详解Python import方法引入模块的实例
2017/08/02 Python
python 读取dicom文件,生成info.txt和raw文件的方法
2019/01/24 Python
Django 内置权限扩展案例详解
2019/03/04 Python
详解Python_shutil模块
2019/03/15 Python
Python 高效编程技巧分享
2020/09/10 Python
python实现数学模型(插值、拟合和微分方程)
2020/11/13 Python
目前不被任何主流浏览器支持的CSS3属性汇总
2014/07/21 HTML / CSS
韩国江南富人区高端时尚百货商场:Galleria(格乐丽雅)
2018/03/27 全球购物
高中毕业生登记表自我鉴定范文
2014/03/18 职场文书
幼儿教师暑期培训方案
2014/08/27 职场文书
低碳环保演讲稿
2014/08/28 职场文书
六年级小学生评语
2014/12/26 职场文书
高一军训决心书
2015/02/05 职场文书
学校党支部承诺书
2015/04/30 职场文书
垂直极限观后感
2015/06/08 职场文书
写一个Python脚本下载哔哩哔哩舞蹈区的所有视频
2021/05/31 Python