JS实现canvas仿ps橡皮擦刮卡效果详解
2021-11-28 04:06
1001 查看
目录
效果演示:
主要JS代码实现
<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) }); 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++ } } } }, totimes) }); } </script> <script type="text/javascript"> window.setTimeout('CountDown()', 100); // End </script>
以上就是JS实现canvas仿ps橡皮擦刮卡效果详解的详细内容,更多关于JS 的资料请关注脚本之家其它相关文章!
您可能感兴趣的文章:相关文章推荐
- 用canvas实现图片滤镜效果详解之视频效果
- JS+Canvas 实现下雨下雪效果
- html5 canvas+js实现ps钢笔抠图
- js canvas画布实现高斯模糊效果
- JS基于ocanvas插件实现的简单画板效果代码(附demo源码下载)
- jquery插件canvaspercent.js实现百分比圆饼效果
- js实现图片局部放大效果详解
- 原生js实现canvas气泡冒泡效果
- 详解照片瀑布流效果(js,jquery分别实现与知识点总结)
- 详解Bootstrap中JS插件实现下拉菜单效果
- js canvas实现写字动画效果
- js canvas实现画图、滤镜效果
- js通过canvas实现动画效果
- 用canvas实现图片滤镜效果详解之灰度效果
- JS基于HTML5的canvas标签实现炫目的色相球动画效果实例
- 用canvas实现图片滤镜效果详解之灰度效果
- JS+html5 canvas实现的简单绘制折线图效果示例
- JS实现仿PS的调色板效果完整实例
- 使用particles.js实现知乎首页Canvas粒子效果,多边形,圆形粒子
- JS实现焦点图轮播效果的方法详解