html5杂音,HTML5/Canvas使用简单噪声算法模拟海平面波浪动画

JavaScript

语言:

JaveScriptBabelCoffeeScript

确定

const $ = {};

/*========================================

Utility

========================================*/

$.PI = Math.PI;

$.TAU = $.PI * 2;

$.rand = function( min, max ) {

if ( !max ) {

var max = min;

min = 0;

}

return Math.random() * ( max - min ) + min;

};

/*========================================

Initialize

========================================*/

$.init = () => {

$.c = document.querySelector( 'canvas' );

$.ctx = $.c.getContext( '2d' );

$.simplex = new SimplexNoise();

$.events();

$.reset();

$.loop();

};

/*========================================

Reset

========================================*/

$.reset = () => {

$.w = window.innerWidth;

$.h = window.innerHeight;

$.cx = $.w / 2;

$.cy = $.h / 2;

$.c.width = $.w;

$.c.height = $.h;

$.count = Math.floor( $.w / 50 );

$.xoff = 0;

$.xinc = 0.05;

$.yoff = 0;

$.yinc = 0.003;

$.goff = 0;

$.ginc = 0.003;

$.y = $.h * 0.66;

$.length = $.w + 10;

$.amp = 40;

};

/*========================================

Event

========================================*/

$.events = () => {

window.addEventListener( 'resize', $.reset.bind( this ) );

};

/*========================================

Wave

========================================*/

$.wave = () => {

$.ctx.beginPath();

let sway = $.simplex.noise2D( $.goff, 0 ) * $.amp;

for( let i = 0; i <= $.count; i++ ) {

$.xoff += $.xinc;

let x = $.cx - $.length / 2 + ( $.length / $.count ) * i;

let y = $.y + $.simplex.noise2D( $.xoff, $.yoff ) * $.amp + sway;

$.ctx[ i === 0 ? 'moveTo' : 'lineTo' ]( x, y );

}

$.ctx.lineTo( $.w, $.h );

$.ctx.lineTo( 0, $.h );

$.ctx.closePath();

$.ctx.fillStyle = 'hsla(210, 90%, 50%, 0.2)';

$.ctx.fill();

};

/*========================================

Loop

========================================*/

$.loop = () => {

requestAnimationFrame( $.loop );

$.ctx.clearRect( 0, 0, $.w, $.h );

$.xoff = 0;

$.wave();

$.wave();

$.wave();

$.wave();

$.yoff += $.yinc;

$.goff += $.ginc;

};

/*========================================

Start

========================================*/

$.init();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值