基于JS怎么实现简易的刮卡效果,方法是什么
Admin 2022-07-08 群英技术资讯 423 次浏览
效果演示:
主要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>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
javascript中求平方的方法:1、利用“*”乘法运算符,语法“x * x”,参数“x”是需要求平方的数值;2、利用pow()方法,语法“Math.pow(x,2)”。
这篇文章给大家分享的是有关vue 动态创建组件的内容,下文给大家介绍了vue 动态创建组件并挂载到body的两种方式,有具体代码供大家参考,需要的朋友可以了解一下。
JavaScript隐藏option元素的方法是什么?对于实现隐藏option元素,首先我们需要获取指定option对象,然后在使用option对象.style.display="none语句将指定option选项隐藏即可,那么具体怎样实现呢?文中有示例供大家参考,感兴趣的朋友可以了解看看。
这篇文章主要介绍了promise封装wx.request的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
Axios 毋庸多说大家在前端开发中常用的一个发送 HTTP 请求的库,用过的都知道,篇文章主要给大家介绍了关于vue中如何简单封装axios的相关资料,需要的朋友可以参考下
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008