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,一经查实,立即删除!

相关文章

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

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

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…

基于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…

基于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…

基于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…

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

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

linux lanmp 安装教程,Linux 安装 lanmp

Lanmp介绍lanmp一键安装包是wdlinux官网2010年底开始推出的web应用环境的快速简易安装包.执行一个脚本&#xff0c;整个环境就安装完成就可使用&#xff0c;快速,方便易用,安全稳定lanmp一键安装包是用shell脚本编写,且是开源的,你也可以根据业务需求,做相应的调整,来安装自己所…

基于Echarts+HTML5可视化数据大屏展示—交通大数据分析平台

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