Html
1 2 3 4 | <section id= "ci-particles" > <canvas id= "canvas" ></canvas> <h1 id= "headline" >jQuery</h1> </section> |
CSS样式
为页面添加基本样式。
1 2 3 4 5 6 | body { background-color : #000000 ; margin : 0 ; overflow : hidden ; font-size : 0 ; } |
Javascript
然后通过下面的js代码来生成canvas粒子文字和交互动画。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 | var canvas = document.querySelector( "#canvas" ), ctx = canvas.getContext( "2d" ), link = document.createElement( 'link' ); particles = [], amount = 0, mouse = { x: -9999, y: -9999 }, radius = 1, colors = [ "rgba(252,248,254,0.85)" , //粒子颜色在这里修改rgb格式 "rgba(220,203,255,0.75)" , "rgba(154,112,124,0.85)" , "rgba(192,213,255,0.85)" , "rgba(244,223,254,0.75)" ], headline = document.querySelector( "#headline" ), ww = window.innerWidth, wh = window.innerHeight; function Particle(x, y) { this .x = Math.random() * ww; this .y = Math.random() * wh; this .dest = { x: x, y: y }; this .r = Math.random() * 2 * Math.PI; this .vx = (Math.random() - 0.5) * 25; this .vy = (Math.random() - 0.5) * 25; this .accX = 0; this .accY = 0; this .friction = Math.random() * 0.025 + 0.94; this .color = colors[Math.floor(Math.random() * 2.75)]; } Particle.prototype.render = function () { this .accX = ( this .dest.x - this .x) / 1000; this .accY = ( this .dest.y - this .y) / 1000; this .vx += this .accX; this .vy += this .accY; this .vx *= this .friction; this .vy *= this .friction; this .x += this .vx; this .y += this .vy; ctx.fillStyle = this .color; ctx.beginPath(); ctx.arc( this .x, this .y, this .r, Math.PI * 2, false ); ctx.fill(); var a = this .x - mouse.x; var b = this .y - mouse.y; var distance = Math.sqrt(a * a + b * b); if (distance < (radius * 75)) { this .accX = ( this .x - mouse.x) / 100; this .accY = ( this .y - mouse.y) / 100; this .vx += this .accX; this .vy += this .accY; } } function onMouseMove(e) { mouse.x = e.clientX; mouse.y = e.clientY; } function onTouchMove(e) { if (e.touches.length > 0) { mouse.x = e.touches[0].clientX; mouse.y = e.touches[0].clientY; } } function onTouchEnd(e) { mouse.x = -9999; mouse.y = -9999; } function initScene() { ww = canvas.width = window.innerWidth; wh = canvas.height = window.innerHeight; ctx.clearRect(0, 0, canvas.width, canvas.height); link.rel = 'stylesheet' ; link.type = 'text/css' ; document.getElementsByTagName( 'head' )[0].appendChild(link); ctx.font = 'bold 26vw "Abril Fatface"' ; ctx.textAlign = "center" ; ctx.fillText(headline.innerHTML, ww / 2, wh / 1.6); var data = ctx.getImageData(0, 0, ww, wh).data; ctx.clearRect(0, 0, canvas.width, canvas.height); ctx.globalCompositeOperation = "screen" ; particles = []; for ( var i = 0; i < ww; i += Math.round(ww / 200)) { for ( var j = 0; j < wh; j += Math.round(ww / 200)) { if (data[((i + j * ww) * 4) + 3] > 200) { particles.push( new Particle(i, j)); } } } amount = particles.length; } |
特别申明:
本站所有资源都是由网友投稿发布,或转载各大下载站,请自行检测软件的完整性!
本站所有资源仅供学习与参考,请勿用于商业用途,否则产生的一切后果将由您自己承担!
如有侵权请联系我们删除下架,联系方式:lei1294551502@163.com