HTML+CSS+JS实现美女canvas仿ps橡皮擦刮刮卡

 🍅 作者主页:Java李杨勇 

🍅 简介:Java领域优质创作者🏆、Java李杨勇公号作者✌  简历模板、学习资料、面试题库、技术互助【关注我,都给你】

🍅 欢迎点赞 👍 收藏 ⭐留言 📝   

效果演示: 文末获取源码 

代码目录:

主要代码实现:

CSS样式:

body {margin: 0;padding: 0;}.box {position: absolute;left: 0;top: 0;bottom: 0;right: 0;background: url("girl1.jpg") no-repeat;background-size: 100% 100%;backface-visibility: hidden;overflow: hidden;}#cas {width: 100%;height: 100%;opacity: 1;-webkit-transition: opacity .5s;-ms-transition: opacity .5s;-moz-transition: opacity .5s;}.noOp {opacity: 0 !important;}

HTML代码 :

 <div class="box" id="bb"><canvas id="cas" width="1366" height="651"></canvas></div><script type="text/javascript" charset="utf-8">var canvas = document.getElementById("cas"),ctx = canvas.getContext("2d");var x1, y1, a = 30,timeout, totimes = 100,jiange = 30;canvas.width = document.getElementById("bb").clientWidth;canvas.height = document.getElementById("bb").clientHeight;var img = new Image();img.src = "sha.jpg";img.onload = function() {ctx.drawImage(img, 0, 0, canvas.width, canvas.height)//ctx.fillRect(0,0,canvas.width,canvas)tapClip()}//通过修改globalCompositeOperation来达到擦除的效果function tapClip() {var hastouch = "ontouchstart" in window ? true : false,tapstart = hastouch ? "touchstart" : "mousedown",tapmove = hastouch ? "touchmove" : "mousemove",tapend = hastouch ? "touchend" : "mouseup";ctx.lineCap = "round";ctx.lineJoin = "round";ctx.lineWidth = a * 2;ctx.globalCompositeOperation = "destination-out";canvas.addEventListener(tapstart, function(e) {clearTimeout(timeout)e.preventDefault();x1 = hastouch ? e.targetTouches[0].pageX : e.clientX - canvas.offsetLeft;y1 = hastouch ? e.targetTouches[0].pageY : e.clientY - canvas.offsetTop;ctx.save();ctx.beginPath()ctx.arc(x1, y1, 1, 0, 2 * Math.PI);ctx.fill();ctx.restore();canvas.addEventListener(tapmove, tapmoveHandler);canvas.addEventListener(tapend, function() {canvas.removeEventListener(tapmove, tapmoveHandler);timeout = setTimeout(function() {var imgData = ctx.getImageData(0, 0, canvas.width, canvas.height);var dd = 0;for (var x = 0; x < imgData.width; x += jiange) {for (var y = 0; y < imgData.height; y += jiange) {var i = (y * imgData.width + x) * 4;if (imgData.data[i + 3] > 0) {dd++}}}if (dd / (imgData.width * imgData.height / (jiange * jiange)) < 0.4) {canvas.className = "noOp";}}, totimes)});function tapmoveHandler(e) {clearTimeout(timeout)e.preventDefault()x2 = hastouch ? e.targetTouches[0].pageX : e.clientX - canvas.offsetLeft;y2 = hastouch ? e.targetTouches[0].pageY : e.clientY - canvas.offsetTop;ctx.save();ctx.moveTo(x1, y1);ctx.lineTo(x2, y2);ctx.stroke();ctx.restore()x1 = x2;y1 = y2;}})}//使用clip来达到擦除效果function otherClip() {var hastouch = "ontouchstart" in window ? true : false,tapstart = hastouch ? "touchstart" : "mousedown",tapmove = hastouch ? "touchmove" : "mousemove",tapend = hastouch ? "touchend" : "mouseup";canvas.addEventListener(tapstart, function(e) {clearTimeout(timeout)e.preventDefault();x1 = hastouch ? e.targetTouches[0].pageX : e.clientX - canvas.offsetLeft;y1 = hastouch ? e.targetTouches[0].pageY : e.clientY - canvas.offsetTop;ctx.save()ctx.beginPath()ctx.arc(x1, y1, a, 0, 2 * Math.PI);ctx.clip()ctx.clearRect(0, 0, canvas.width, canvas.height);ctx.restore();canvas.addEventListener(tapmove, tapmoveHandler);canvas.addEventListener(tapend, function() {canvas.removeEventListener(tapmove, tapmoveHandler);timeout = setTimeout(function() {var imgData = ctx.getImageData(0, 0, canvas.width, canvas.height);var dd = 0;for (var x = 0; x < imgData.width; x += jiange) {for (var y = 0; y < imgData.height; y += jiange) {var i = (y * imgData.width + x) * 4;if (imgData.data[i + 3] > 0) {dd++}}}if (dd / (imgData.width * imgData.height / (jiange * jiange)) < 0.4) {canvas.className = "noOp";}}, totimes)});function tapmoveHandler(e) {e.preventDefault()x2 = hastouch ? e.targetTouches[0].pageX : e.clientX - canvas.offsetLeft;y2 = hastouch ? e.targetTouches[0].pageY : e.clientY - canvas.offsetTop;var asin = a * Math.sin(Math.atan((y2 - y1) / (x2 - x1)));var acos = a * Math.cos(Math.atan((y2 - y1) / (x2 - x1)));var x3 = x1 + asin;var y3 = y1 - acos;var x4 = x1 - asin;var y4 = y1 + acos;var x5 = x2 + asin;var y5 = y2 - acos;var x6 = x2 - asin;var y6 = y2 + acos;ctx.save()ctx.beginPath()ctx.arc(x2, y2, a, 0, 2 * Math.PI);ctx.clip()ctx.clearRect(0, 0, canvas.width, canvas.height);ctx.restore();ctx.save()ctx.beginPath()ctx.moveTo(x3, y3);ctx.lineTo(x5, y5);ctx.lineTo(x6, y6);ctx.lineTo(x4, y4);ctx.closePath();ctx.clip()ctx.clearRect(0, 0, canvas.width, canvas.height);ctx.restore();x1 = x2;y1 = y2;}})}</script><script type="text/javascript">window.setTimeout('CountDown()', 100);// End</script>

上面的图片文件需要引入

源码获取

大家点赞、收藏、关注、评论我啦 、查看下方微信公众号获取~!

打卡 文章 更新 53  /  100天

精彩推荐更新中:

HTML5大作业实战案例《100套》

Java毕设项目精品实战案例《100套》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/561927.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

oracle 并行用索引,分区索引并行导致的性能问题

问题现象;生产环境报ORA-17144statement handle not executed然后我把sql抓出来手工运行一遍执行计划如下&#xff1a;----------------------------------------------------------Plan hash value: 644608605--------------------------------------------------------------…

HTML+CSS+JS实现 ❤️贪吃蛇游戏、你能吃过我?❤️【源码送给你一起来玩-建议收藏】

&#x1f345; 作者主页&#xff1a;Java李杨勇 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java李杨勇公号作者✌ 简历模板、学习资料、面试题库、技术互助【关注我&#xff0c;都给你】 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f…

ORACLE 12C 插入数据遇到 Error getting generated key or setting result to parameter object错误

今天用springboot和oracle的时候遇到以前的老项目保存数据的时候显示报错 Error getting generated key or setting result to parameter object 根据这句话的字面理解意思就是 获取生成的键或将结果设置为参数对象时出错 看了下网上的解决方法主要是这样 第一种方式&am…

oracle02070,ORA-02070:database does not support semijoin错误 | 信春哥,系统稳,闭眼上线不回滚!...

前段时间小姨子遇到了ORA-02070:database does not support semijoin错误:--以下是应用程序报错&#xff1a;at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138) at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:204)at com.ibm.io.async.Resul…

基于Echarts+HTML5可视化数据大屏展示——智慧物流服务中心

&#x1f345; 作者主页&#xff1a;Java李杨勇 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java李杨勇公号作者✌ 简历模板、学习资料、面试题库、技术互助【关注我&#xff0c;都给你】 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f…

基于Echarts+HTML5可视化数据大屏展示—大数据管理平台中心

&#x1f345; 作者主页&#xff1a;Java李杨勇 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java李杨勇公号作者✌ 简历模板、学习资料、面试题库、技术互助【关注我&#xff0c;都给你】 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f…

数据从一个Oracle导到另一个,oracle拷贝数据导另一个用户

exp web_hs/web_hsJIUHUA fileD:\abcd.dmp alter user web_esky identified by web_esky; (修改用户密码)imp web_esky/web_eskyJIUHUA fully filed:\abcde.dmp ignorey //东华的数据库1 先从svn上下载下来 我的svn用户名&#xff1a;wy 密码&#xff1a;wy9302422 用任意…

基于Echarts+HTML5可视化数据大屏展示—大数据管理平台中心(二)

&#x1f345; 作者主页&#xff1a;Java李杨勇 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java李杨勇公号作者✌ 简历模板、学习资料、面试题库、技术互助【关注我&#xff0c;都给你】 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f…

提示未检测到 oracle,Oracle RAC [INS-40406] 未检测到现有的 Oracle Grid Infrastructure 软件...

[INS-40406] 未检测到现有的Oracle Grid Infrastructure 软件问题描述&#xff1a;升级过程中强制中断升级导致的[INS-40406]报错信息如下[INS-40406] 安装程序在系统中未检测到现有的 Oracle Grid Infrastructure 软件。原因 - 安装程序未检测到任何要升级的现有 Oracle Clust…

基于Echarts+HTML5可视化数据大屏展示—新能源车联网综合大数据平台

&#x1f345; 作者主页&#xff1a;Java李杨勇 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java李杨勇公号作者✌ 简历模板、学习资料、面试题库、技术互助【关注我&#xff0c;都给你】 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f…

oracle模糊查询很慢,采用全文索引解决模糊查询速度慢的问题

众所周知&#xff0c;使用 like 进行模糊查询速度极差&#xff0c;包括 like AAA% &#xff0c;like %AAA&#xff0c;like %AAA%&#xff0c;like %A%A%以及采用“_”进行单字符匹配的那些模糊查询。网上有很多文章讲到如何提高like查询&#xff0c;提到 like AAA%能够使用到索…

基于Echarts+HTML5可视化数据大屏展示—大屏数据统计

&#x1f345; 作者主页&#xff1a;Java李杨勇 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java李杨勇公号作者✌ 简历模板、学习资料、面试题库、技术互助【关注我&#xff0c;都给你】 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f…

oracle10g支持数据泵么,Oracle 10g使用数据泵(EXPDP和IMPDP)。

1.1.1 expdp使用使用EXPDP工具时,其转储文件只能被存放在DIRECTORY对象对应的OS目录中,而不能直接指定转储文件所在的OS目录.因此使用EXPDP工具时,必须首先建立DIRECTORY对象.并且需要为数据库用户授予使用DIRECTORY对象权限.首先得建DIRECTORY:SQL> conn /as sysdbaSQL>…

基于Echarts+HTML5可视化数据大屏展示—大数据统计展示大屏

&#x1f345; 作者主页&#xff1a;Java李杨勇 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java李杨勇公号作者✌ 简历模板、学习资料、面试题库、技术互助【关注我&#xff0c;都给你】 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f…

sqlserver oracle对比,sqlserver和oracle常用函数对比

sqlserver和oracle常用函数对比数学函数1.绝对值S:select abs(-1) valueO:select abs(-1) value from dual2.取整(大)S:select ceiling(-1.001) valueO:select ceil(-1.001) value from dual3.取整(小)S:select floor(-1.001) valueO:select floor(-1.001) value from dual4.取…

基于Echarts+HTML5可视化数据大屏展示—大数据运维总览图

&#x1f345; 作者主页&#xff1a;Java李杨勇 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java李杨勇公号作者✌ 简历模板、学习资料、面试题库、技术互助【关注我&#xff0c;都给你】 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f…

基于Echarts+HTML5可视化数据大屏展示—物联网平台数据统计平台

&#x1f345; 作者主页&#xff1a;Java李杨勇 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java李杨勇公号作者✌ 简历模板、学习资料、面试题库、技术互助【关注我&#xff0c;都给你】 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f…

windos 2008安装php5.3,windows 2008 + php 5.3.29配置

windows 2008 php的教程网上一大堆&#xff0c;也很详细&#xff0c;主要步骤就是配置IIS&#xff0c;配置PHP环境。参照下面这两篇文章把IIS和PHP安装好。http://www.phpabc.cn/win2008r2-iis7-php5-fastcgi-mysql5-install-howto.html一、环境说明&#xff1a;操作系统&…

基于Echarts+HTML5可视化数据大屏展示—运营大数据平台

&#x1f345; 作者主页&#xff1a;Java李杨勇 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java李杨勇公号作者✌ 简历模板、学习资料、面试题库、技术互助【关注我&#xff0c;都给你】 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f…

基于Echarts+HTML5可视化数据大屏展示—设备环境监测平台大数据平台

&#x1f345; 作者主页&#xff1a;Java李杨勇 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java李杨勇公号作者✌ 简历模板、学习资料、面试题库、技术互助【关注我&#xff0c;都给你】 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f…