javascript - 你将如何制作波浪动画 div css/js

标签 javascript jquery css animation

我能想到的一种方法是使用动画 svg,但可能还有更好的方法。如果您必须为这些波浪形 Blob 制作动画(移动兼容),您会怎么做

Link to the only pin I've found similar

var wave = document.createElement("div");
wave.className += " wave";
docFrag.appendChild(wave);
wave.style.left = i * waveWidth + "px";
wave.style.webkitAnimationDelay = (i / 100) + "s";

触摸交互也不错。 canvas 的东西会有什么问题吗?

The design

最佳答案

这是@DA. 的好答案的实现:

enter image description here

var canvas=document.getElementById('canvas');
var ctx=canvas.getContext('2d');
var cw=canvas.width;
var ch=canvas.height;

ctx.textAlign='center';
ctx.textBaseline='middle';
ctx.font='16px verdana';
ctx.lineWidth=5;
ctx.strokeStyle='white';
ctx.fillStyle='white';
var offsetX=0;

var bk=makeWave(canvas.width,canvas.height-120,10,2,'lightskyblue','cornflowerblue');

requestAnimationFrame(animate);

function animate(time){
    ctx.clearRect(0,0,cw,ch);
    ctx.drawImage(bk,offsetX,0);
    ctx.fillStyle='white';
    ctx.font='18px verdana';
    ctx.fillText('Multiple Lists',cw/2,30);
    ctx.strokeRect(cw/2-50,85,100,50);
    ctx.fillStyle='gray';
    ctx.font='12px verdana';
    ctx.fillText('You can create and save multiple ...',cw/2,250);
    offsetX-=1;
    if(offsetX< -bk.width/2){offsetX=0;}
    requestAnimationFrame(animate);
}

function makeWave(width,midWaveY,amplitude,wavesPerWidth,grad0,grad1){
    var PI2=Math.PI*2;
    var totValue=PI2*wavesPerWidth;
    var c=document.createElement('canvas');
    var ctx=c.getContext('2d');
    c.width=width*2;
    c.height=midWaveY+amplitude;
    var grad=ctx.createLinearGradient(0,0,0,midWaveY);
    grad.addColorStop(0.00,grad0);
    grad.addColorStop(1.00,grad1);
    //
    ctx.beginPath();
    ctx.moveTo(0,0);
    for (x=0;x<=200;x++) {
        var n=totValue*x/100;
        ctx.lineTo(width*x/100,Math.sin(n)*amplitude+midWaveY);
    }
    ctx.lineTo(c.width,0);
    ctx.closePath();
    ctx.fillStyle=grad;
    ctx.fill();
    return(c);
}
body{ background-color:white; }
canvas{border:1px solid red; margin:0 auto; }
<canvas id=canvas width=300 height=300></canvas>

关于javascript - 你将如何制作波浪动画 div css/js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37624557/

相关文章:

javascript - 使用 Marionette.js 访问 Eco 模板中的实例方法

javascript - 通过 JQuery Ajax Post 请求提交表单

javascript - 使用 jQuery 缩放与背景覆盖成比例的元素

javascript - $.ajax 第一次不工作

jquery - 将 jquery 1.4.2 更新到 1.5.2

javascript - 实例化 Ext.form.CompositeField

css - Struts 2 磁贴的滚动条

javascript - Jquery 验证插件不验证整个表单

jQuery:分层选项卡用户界面

jquery - 带 Bootstrap 选择的输入组插件