导航

萌即是正义!时不时分享一些ACG活动记录与有趣代码的小站!

侧边栏
热门文章
1推文
一晃眼正式进入2025年的蛇年春节了呢。祝各位大佬新春快乐!
热度
700
2博文
探访《蜡笔小新》老家——春日部游记
热度
195
3推文
博客的评论可以撤回啦!在维基萌博客系统0.24.0版本中,如果遇到评论内容有不妥的情况,可以在5分钟内进行撤回操作(当然博主还是会知道你撤回了什么内容🤭),这样就不怕奇怪的评论被发到网上啦! 这评论系统做的越来越像是聊天系统了呢😅。 另外,既然可以撤回了,那么评论者自然也就可以看到自己还在审核中的评论了。对比之前的弹窗提示,这样用户能更直观的确认到自己刚才的评论是否发送成功了,从而防止出现重复发送评论的现象。 维基萌博客系统0.24.0版本现已发布,具体更新内容详见:https://github.com/eeg1412/wikimoeNodeJSBlog/releases/tag/v0.24.0
热度
169
4页面
游戏
热度
117
5博文
手把手从零开始搭建《泰拉瑞亚》(Terraria)服务器
热度
104
6页面
关于
热度
91
7博文
历经多重考验的第一天——《摇曳露营△》圣地巡礼之伊豆高原大室山和仙人掌动物公园
热度
78
8博文
【RPG Maker MV】插件脚本指令文档 | Script Calls
热度
78
9推文
今日份的秋叶原。
热度
65
10推文
看《间谍×过家家·代号:白》的时候亚马逊还顺带给我推荐了《铃芽之旅》,这才想起来我《铃芽之旅》也还没看呀!于是又抽空在亚马逊上把《铃芽之旅》给看完了。 可以说是相继《你的名字》、《天气之子》之后的集大成之作。画面依旧是那么的漂亮,剧情依旧是那个女孩遇见男孩。相比较前几作,这作在男女主的感情描绘上确实生硬了一些,有一种男主仅凭一张脸就让女主出生入死的感觉😅。不过相对的,这一作对于"灾难"的描绘比前几作要强上很多。伏笔也还不错,只不过感觉剧中有挺多我觉得应该是伏笔的地方结果居然不是,不知道是不是因为篇幅原因给删减了? 这时间一晃《铃芽之旅》已经是2022年的电影了,不知道新海诚的下一部作品什么时候出呀!
热度
65
最新评论
广树
2025-01-31 20:37
@tongnixcv:撤了吗?
tongnixcv
2025-01-31 19:42
哈哈哈,我撤我撤
广树
2025-01-31 12:31
@laffey:大佬新年快乐
广树
2025-01-31 12:31
@小彦:新年快乐! 哈哈哈,一年可能也就几次发短推文。
laffey
2025-01-31 12:23
新年快乐
正在攻略

logo_kai.jpg


PSN奖杯卡

PSN奖杯卡

赞助商广告

用canvas描绘容器注水的效果(如果没灌满会有波浪效果)

作者:广树时间:2018-02-02 16:19:02分类:JavaScript/jQuery/Vue

其实原理就是控制正弦波的幅度。

CSS:

html, body {
  height: 100%;
  text-align: center;
  background-color: #323436;
}

canvas#sineCanvas {
  width:500px;
  height:500px;
  overflow:hidden;
  background:#5b5d5e;
}

HTML:

<div id="canvas-container">
    <canvas id="sineCanvas"></canvas>
</div>

JS:

(function () {

var unit = 100,
    canvas, context, canvas2, context2,
    height, width, xAxis, yAxis,
    draw;
var percentMax = 0.6;//液体占容器的百分比
var percentMin = 0;
var maxHeight = 1;
if(percentMax>=1){
	maxHeight = 0.95;
}
var wavePower = 3;
//初始化
function init() {
	window.requestAnimFrame = (function(){
	  return  window.requestAnimationFrame       ||
			  window.webkitRequestAnimationFrame ||
			  window.mozRequestAnimationFrame    ||
			  function( callback ){
				window.setTimeout(callback, 1000/60);
			  };
	})();
    
    canvas = document.getElementById("sineCanvas");
    
    canvas.width = 1000; 
    canvas.height = 1000;
    
    context = canvas.getContext("2d");
    
    height = canvas.height;
    width = canvas.width;
    yAxis = 0;
    
    draw();
	
}
function draw() {
    
    // 清理canvas画板
    context.clearRect(0, 0, width, height);

    //描绘波浪
    drawWave(['#cea155','#e8c183'], 1, 1.5);
	
	if(percentMin<=percentMax){
    	percentMin = percentMin+0.002;
    	xAxis = Math.floor(height*(maxHeight-percentMin));
    }
    if(percentMin>0.80){
    	if(wavePower<=36*percentMax){
        	wavePower = wavePower+0.05
        }
    }
    
    // 更新时间然后重新绘制
    draw.seconds = draw.seconds + .009;
    draw.t = draw.seconds*Math.PI;
    window.requestAnimFrame(draw);
};
draw.seconds = 0;
draw.t = 0;

/**
* 描绘波浪
* drawWave([渐变左侧颜色,右侧颜色], 不透明度, 波浪的幅度)
*/
function drawWave(color, alpha, zoom) {
    context.globalAlpha = alpha;
	var linearGrad = context.createLinearGradient(0, 0, width, 0);
	linearGrad.addColorStop(0.0, color[0]);  
    linearGrad.addColorStop(1.0, color[1]); 
	context.fillStyle = linearGrad;
	
    context.beginPath(); //开始路径
    drawSine(draw.t / 0.5, zoom);
    context.lineTo(width + 10, height); //路径朝canvas右下
    context.lineTo(0, height); //路径朝canvas左下
    context.closePath() //封闭路径
    context.fill(); //涂色
}

/**
 * 画正弦
 * drawSine(时间, 波浪的浮动)
 */
function drawSine(t, zoom) {

    var x = t; //将时间转换为x轴
    var y = Math.sin(x)/zoom;
    context.moveTo(yAxis, unit*y+xAxis); //在开始位置放置路径
    
    // 绘制波浪、横向幅度 
    for (var i = yAxis; i <= width + 10; i += 10) {
        x = t+(-yAxis+i)/unit/zoom;
        y = Math.sin(x - 0)/wavePower;
        context.lineTo(i, unit*y+xAxis);
    }
}

init();
    
})();


donate.png

1210 x 50(蓝底).png

cloudcone