基于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大雨滂沱效果内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
BootStrap Fileinput插件和Bootstrap table表格插件相结合实现文件上传、预览、提交的导入E
这篇文章主要介绍了BootStrap Fileinput插件和Bootstrap table表格插件相结合实现文件上传、预览、提交的导入Excel数据操作步骤,需要的朋友可以参考下2017-08-08
JavaScript中定时控制Throttle、Debounce和Immediate详解
大家可能都知道JavaScript遵循事件驱动的编程范例,这意味着一些行为可以激活一些响应,并且这些响应仅在发生特定的行为时才被激活。这篇文章将给大家详细介绍JavaScript中的定时控制Throttle、Debounce和Immediate,有需要的朋友们可以参考借鉴,下面来一起看看吧。2016-11-11
console.log()与console.dir()的区别及说明
这篇文章主要介绍了console.log()与console.dir()的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2024-01-01


最新评论