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 相关文章推荐
JS模拟的QQ面板上的多级可展开的菜单
Oct 10 Javascript
浅谈轻量级js模板引擎simplite
Feb 13 Javascript
jQuery遍历页面所有CheckBox查看是否被选中的方法
Apr 14 Javascript
详解JavaScript的Polymer框架中的通知交互
Jul 29 Javascript
使用BootStrap实现悬浮窗口的效果
Dec 13 Javascript
关于JS Lodop打印插件打印Bootstrap样式错乱问题的解决方案
Dec 23 Javascript
常用的javascript设计模式
Jan 11 Javascript
node安装--linux下的快速安装教程
Mar 21 Javascript
全面解析Node.js 8 重要功能和修复
Jun 02 Javascript
Angular2之二级路由详解
Aug 31 Javascript
一文快速详解前端框架 Vue 最强大的功能
May 21 Javascript
uniapp微信小程序:key失效的解决方法
Jan 20 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中新增stdClass 内部保留类
2011/06/13 PHP
PHP中实现Bloom Filter算法
2015/03/30 PHP
PHP 获取客户端 IP 地址的方法实例代码
2018/11/11 PHP
XML+XSL 与 HTML 两种方案的结合
2007/04/22 Javascript
JS判断不能为空实例代码
2013/11/26 Javascript
Javascript基础教程之while语句
2015/01/18 Javascript
js实现瀑布流的三种方式比较
2020/06/28 Javascript
判断数组是否包含某个元素的js函数实现方法
2016/05/19 Javascript
jQuery自定义插件详解及实例代码
2016/12/29 Javascript
bootstrap模态框示例代码分享
2017/05/17 Javascript
使用Vue开发一个实时性时间转换指令
2018/01/17 Javascript
解决vue-router中的query动态传参问题
2018/03/20 Javascript
JavaScript去掉数组重复项的方法分析【测试可用】
2018/07/19 Javascript
详解nuxt路由鉴权(express模板)
2018/11/21 Javascript
Windows下支持自动更新的Electron应用脚手架的方法
2018/12/24 Javascript
javascript导出csv文件(excel)的方法示例
2019/08/25 Javascript
浅谈Vue.set实际上是什么
2019/10/17 Javascript
JQuery表单元素取值赋值方法总结
2020/05/12 jQuery
vue 使用class创建和清除水印的示例代码
2020/12/25 Vue.js
[01:07:02]DOTA2-DPC中国联赛 正赛 iG vs PSG.LGD BO3 第三场 2月26日
2021/03/11 DOTA
利用Python为iOS10生成图标和截屏
2016/09/24 Python
Python自动化运维之IP地址处理模块详解
2017/12/10 Python
Python即时网络爬虫项目启动说明详解
2018/02/23 Python
Python 经典面试题 21 道【不可错过】
2018/09/21 Python
python对视频画框标记后保存的方法
2018/12/07 Python
Flask框架请求钩子与request请求对象用法实例分析
2019/11/07 Python
提高python代码运行效率的一些建议
2020/09/29 Python
Julep官网:美容产品和指甲油
2017/02/25 全球购物
一套C++笔试题面试题
2012/06/06 面试题
网站设计师的岗位职责
2013/11/21 职场文书
师范生个人推荐信
2013/11/29 职场文书
大学校运会广播稿
2014/02/03 职场文书
2014年个人技术工作总结
2014/12/08 职场文书
年会主持人开场白台词
2015/05/29 职场文书
nginx location优先级的深入讲解
2021/03/31 Servers
只用Python就可以制作的简单词云
2021/06/07 Python