基于JS实现漫画中大雨滂沱的效果

Jennifer ·
更新时间:2024-11-14
· 848 次阅读

目录

演示

技术栈

源码

css部分

大雨滂沱

演示

技术栈

最近用canvas有点上瘾,接着上次的雨滴和流星雨的思路我们在改进一下

<canvas id='canvas' width='1280' height='720'></canvas> 源码 css部分 body { margin:0; padding:0; background: #000; overflow:hidden; } canvas { background:url('../img/maxresdefault.jpg'); background-size: cover; background-repeat: no-repeat; background-position: center center; }

background-size属性指定背景图片大小。

默认值: auto 继承: no 版本: CSS3 JavaScript 语法: object object.style.backgroundSize="60px 80px"

语法

background-size: length|percentage|cover|contain;

length 设置背景图片高度和宽度。第一个值设置宽度,第二个值设置的高度。如果只给出一个值,第二个是设置为 auto(自动)

percentage 将计算相对于背景定位区域的百分比。第一个值设置宽度,第二个值设置的高度。如果只给出一个值,第二个是设置为"auto(自动)"

cover 此时会保持图像的纵横比并将图像缩放成将完全覆盖背景定位区域的最小大小。

contain 此时会保持图像的纵横比并将图像缩放成将适合背景定位区域的最大大小。

大雨滂沱 function _pexresize() { var cw = window.innerWidth; var ch = window.innerHeight; if (cw<=ch*stgw/stgh) { loffset = 0; toffset = Math.floor(ch-(cw*stgh/stgw))/2; canvas.style.width = cw + "px"; canvas.style.height = Math.floor(cw*stgh/stgw) + "px"; } else { loffset = Math.floor(cw-(ch*stgw/stgh))/2; toffset = 0; canvas.style.height = ch + "px"; canvas.style.width = Math.floor(ch*stgw/stgh) + "px"; } canvas.style.marginLeft = loffset +"px"; canvas.style.marginTop = toffset +"px"; }

随机雨点和持续降雨

for (var l=0;l<lcount;l++) { ctx.clearRect(0,0,stgw,stgh); for (var i=0;i<count*(lcount-l)/1.5;i++) { var myx = Math.floor(Math.random()*stgw); var myy = Math.floor(Math.random()*stgh); var myh = l*6+8; var myw = myh/10; ctx.beginPath(); ctx.moveTo(myx,myy); ctx.lineTo(myx+myw,myy+myh); ctx.arc(myx, myy+myh, myw, 0, 1 * Math.PI); ctx.lineTo(myx-myw,myy+myh); ctx.closePath(); ctx.fill(); } layer[l] = new Image(); layer[l].src = canvas.toDataURL("image/png"); layery[l] = 0; } var stt = 0; var str = Date.now()+Math.random()*4000; var stact = false; function animate() { ctx.clearRect(0,0,stgw,stgh); for (var l=0;l<lcount;l++) { layery[l] += (l+1.5)*5; if (layery[l]>stgh) { layery[l] =layery[l]-stgh; } ctx.drawImage(layer[l],0,layery[l]); ctx.drawImage(layer[l],0,layery[l]-stgh); } if (Date.now()>str) { stact = true; } if (stact) { stt++; if (stt<5+Math.random()*10) { var ex = stt/30; } else { var ex = (stt-10)/30; } if (stt>20) { stt = 0; stact = false; str = Date.now()+Math.random()*8000+2000; } ctx.fillStyle = "rgba(255,255,255,"+ex+")"; ctx.fillRect(0,0,stgw,stgh); } window.requestAnimationFrame(animate); }

到此这篇关于基于JS实现漫画中大雨滂沱的效果的文章就介绍到这了,更多相关JS大雨滂沱效果内容请搜索软件开发网以前的文章或继续浏览下面的相关文章希望大家以后多多支持软件开发网!



js实现 中大 漫画 js

需要 登录 后方可回复, 如果你还没有账号请 注册新账号