anime实现canvas鼠标点击爆炸动画效果代码
代码语言:html
所属分类:动画
代码描述:anime实现canvas鼠标点击爆炸动画效果代码
代码标签: anime canvas 鼠标 点击 爆炸 动画
下面为部分代码预览,完整代码请点击下载或在bfwstudio webide中打开
<!DOCTYPE html> <html lang="en" > <head> <meta charset="UTF-8"> <style> canvas { display: block; width: 100vw; height: 100vh; } </style> </head> <body > <canvas id="c"></canvas> <script type="text/javascript" src="//repo.bfw.wiki/bfwrepo/js/anime-min.js"></script> <script > var c = document.getElementById("c"); var ctx = c.getContext("2d"); var cH; var cW; var bgColor = "#FF6138"; var animations = []; var circles = []; var colorPicker = (function() { var colors = ["#FF6138", "#FFBE53", "#2980B9", "#282741"]; var index = 0; function next() { index = index++ < colors.length-1 ? index : 0; return colors[index]; } function current() { return colors[index] } return { next: next, current: current } })(); function removeAnimation(animation) { var index = animations.indexOf(animation); if (index > -1) animations.splice(index, 1); } function calcPageFillRadius(x, y) { var l = Math.max(x - 0, cW - x); var h = Math.max(y - 0, cH - y); return Math.sqrt(Math.pow(l, 2) + Math.pow(h, 2)); } function addClickListeners() { document.addEventListener("touchstart", handleEvent); document.addEventListener("mousedown", handleEvent); }; function handleEvent(e) { if (e.touches) { e.preventDefault(); e = e.touches[0]; } var currentColor = colorPicker.current(); var nextColor = colorPicker.next(); var targetR = calcPageFillRadius(e.pageX, e.pageY); var rippleSize = Math.min(200, (cW * .4)); var minCoverDuration = 750; var pageFill = new Circle({ x: e.pageX, y: e.pageY, r: 0, fill: nextColor }); var fillAnimation = anime({ targets: pageFill, r: targetR, duration: Math.max(targetR / 2 , minCoverDuration ), easing: "easeOutQuart", complete: function(){ bgColor = pageFill.fill; removeAnimation(fillAnimation); } }); var ripple = new Circle({ x: e.pageX, y: e.pageY, r: 0, fill: currentColor, stroke: { width: 3, color: currentColor }, opacity: 1 }); var rippleAnimation = anime({ targets: ripple, r: rippleSize, opacity: 0, easing: "easeOutExpo", duration: 900, complete: removeAnimation }); var particles = []; for (var i=0; i<32; i++) { var particle = new Circle({ x: e.pageX, y: e.pageY, fill: currentColor, r: anime.random(24, 48) }) particles.push(particle); } var particlesAnimation = anim.........完整代码请登录后点击上方下载按钮下载查看
网友评论0