导航

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

侧边栏
热门文章
1页面
程序员老黄历&求签
热度
455
2推文
一开始还以为是2.5次元的舞台剧,结果仔细一看是音乐剧!?有一丢丢的兴趣,到时候看看能不能搞到门票。 《FateZero》真人音乐剧 定妆照预告:https://www.bilibili.com/video/BV1RqSoYmEzJ
热度
207
3博文
探访《蜡笔小新》老家——春日部游记
热度
104
4博文
《孤独摇滚》圣地巡礼——下北泽&下北泽咖喱节2023
热度
91
5推文
知道这套道具的人年纪应该都不小了吧。
热度
78
6推文
刚发完对《冒险岛Online》R区的遗憾没多久,韩服那边又开始搞事情了,做出了如下的修改: 1、删除持有金币,主要消耗、其他道具; 2、可使用拍卖、个人件交易、金币市场功能; 3、装备卷轴强化和可用附加潜能,但是该效果在3个月内不生效,R区的终伤BUFF仍旧保存3个月; 4、删除R区被动中BOSS装备掉率增加属性等全部属性; 5、现有装备道具均变为永久不可交易道具。 ※主要删除道具:金币、红魔方、黑魔方、痕迹、强大火花、核心宝石、可获得装备的部分消耗道具、可通过金币购买的道具等。 这可真是至R区于死地啊...要说修改游戏的模式也就算了,现在不仅没有任何补充,还把先前的劳动成果给删除了是不是太过分了!? 日服到时候肯定二话不说跟进,国际服那边如果没了韩服对R区的技术支持,个人觉得服软也是时间的问题。
热度
52
7博文
谈谈这次《冒险岛Online》日服R区的削弱事件
热度
52
8推文
发现《爱上火车》的完全版仅售280日元就果断入了!虽然Lose解散了,但是留下了巨大的财富。
热度
52
9博文
记录第一次在日本进行携号转网(MNP)
热度
52
10博文
冒险岛日服(JMS)台服(TMS)64位客户端语言区域转区教程
热度
52
最新评论
广树
2024-11-21 16:04
@hikari:BGM也许是吧,歌曲部分感觉不一定
hikari
2024-11-21 09:52
居然是音乐剧!真是没想到,难道说会用梶浦大妈的配乐吗?看预告片里就用的是fz里最扣人心弦的bgm。🥰
广树
2024-11-20 08:18
@石樱灯笼:这应该是受众的年龄层的问题吧
石樱灯笼
2024-11-20 06:57
@广树:承太郎抽根烟,整张嘴都被打码。
广树
2024-11-20 06:48
@石樱灯笼:不是挺符合人设吗?为什么会离谱?
正在攻略

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