文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-07-02 08:29

关注

这篇文章主要讲解了“基于JS如何实现漫画中大雨滂沱的效果”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“基于JS如何实现漫画中大雨滂沱的效果”吧!

演示

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

技术栈

最近用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如何实现漫画中大雨滂沱的效果这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯