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 防止表单重复提交代码
Jan 21 Javascript
优化innerHTML操作(提高代码执行效率)
Aug 20 Javascript
Ajax同步与异步传输的示例代码
Nov 21 Javascript
Js实现双击鼠标自动滚动屏幕的示例代码
Dec 14 Javascript
可恶的ie8提示缺少id未定义
Mar 20 Javascript
jQuery循环动画与获取组件尺寸的方法
Feb 02 Javascript
基于JavaScript如何实现ajax调用后台定义的方法
Dec 29 Javascript
使用jQuery监听DOM元素大小变化
Feb 24 Javascript
关于在Servelet中如何获取当前时间的操作方法
Jun 28 Javascript
AngularJs Dependency Injection(DI,依赖注入)
Sep 02 Javascript
spring+angular实现导出excel的实现代码
Feb 27 Javascript
解决vue 给window添加和移除resize事件遇到的坑
Jul 21 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
linux php mysql数据库备份实现代码
2009/03/10 PHP
PHP实现提取一个图像文件并在浏览器上显示的代码
2012/10/06 PHP
浅析PHP Socket技术
2013/08/02 PHP
PHP静态成员变量
2017/02/14 PHP
利用PHP实现开心消消乐的算法示例
2017/10/12 PHP
laravel通过a标签从视图向控制器实现传值
2019/10/15 PHP
document.open() 与 document.write()的区别
2007/08/13 Javascript
jquery获取特定name所有选中的checkbox,支持IE9标准模式
2013/03/18 Javascript
JavaScript实现DOM对象选择器
2016/09/24 Javascript
微信小程序 wxapp内容组件 icon详细介绍
2016/10/31 Javascript
js 数据存储和DOM编程
2017/02/09 Javascript
Vue下的国际化处理方法
2017/12/18 Javascript
JS div匀速移动动画与变速移动动画代码实例
2019/03/26 Javascript
Node.js实现简单管理系统
2019/09/23 Javascript
JS中类的静态方法,静态变量,实例方法,实例变量区别与用法实例分析
2020/03/14 Javascript
[03:46]DOTA2英雄基础教程 维萨吉
2013/12/11 DOTA
Python httplib,smtplib使用方法
2008/09/06 Python
python 获取文件列表(或是目录例表)
2009/03/25 Python
python编写暴力破解zip文档程序的实例讲解
2018/04/24 Python
Django 使用Ajax进行前后台交互的示例讲解
2018/05/28 Python
python实现顺序表的简单代码
2018/09/28 Python
python读取txt文件中特定位置字符的方法
2018/12/24 Python
Python 3.3实现计算两个日期间隔秒数/天数的方法示例
2019/01/07 Python
python多线程并发让两个LED同时亮的方法
2019/02/18 Python
python matplotlib实现将图例放在图外
2020/04/17 Python
最新pycharm安装教程
2020/11/18 Python
复古服装:RetroStage
2019/05/10 全球购物
Agoda中文官网:安可达(低价预订全球酒店)
2021/01/18 全球购物
高中微机老师自我鉴定
2014/02/16 职场文书
安全生产实施方案
2014/02/23 职场文书
讲文明树新风公益广告宣传方案
2014/02/25 职场文书
团队激励口号
2014/06/06 职场文书
做一个有道德的人活动方案
2014/08/25 职场文书
销售工作决心书
2015/02/04 职场文书
党支部季度考核意见
2015/06/02 职场文书
MySQL如何修改字段类型和字段长度
2022/06/10 MySQL