js 特效

<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>cloth</title>
  <style>
   * {
  margin: 0;
  padding: 0;
  border: 0;
  background: pink
}

canvas {
position: relative; top:50%;
left:50%;
margin-left:-50vmin;
width:100vmin;
height:100vmin;
overflow:hidden;
display: block;
}
  </style>
</head>

  
<body>
  <canvas></canvas>
  <script>
    var canvas,ctx,pt,count,wlen,gtx,gty,pq;
canvas = document.getElementsByTagName('canvas')[0];
ctx = canvas.getContext('2d');
canvas.width=canvas.height=400;
aaa();

function aaa(){
    var a,b,c,d,e,x,y,z,r,tim,max,bai,ys,yc,xs,xc,p,x1,y1,z1;
    ctx.globalCompositeOperation = "source-over";
    ctx.fillStyle="rgb(222,222,222)";
    ctx.fillStyle="rgb(0,0,0)";
    ctx.fillRect(0,0,canvas.width,canvas.height);
    ctx.globalCompositeOperation = "lighter";
    
    tim=new Date().getTime()/70;
    gtx=canvas.width/2;
    gty=canvas.height/2;
    ctx.lineWidth=2;
    wlen=1.5+Math.sin(tim/31);
    r=-tim/37;
    x=Math.cos(r*3);
    y=Math.sin(r*5);
    z=Math.sin(-r*2);
    qp=[x,y,z];
    max=70;
    pt=[];
    
    bai=0.6+Math.sin(tim/29)*0.4;
    r=tim/37;
    for(a=0;a<max;a++){
        x=Math.cos(r*3);
        y=Math.sin(r*5);
        z=Math.sin(-r*2);
        cube(x,y,z,r*7,-r*5);
        r+=Math.PI*2/max*bai;
    }
    
    a=-tim/43;
    ys=Math.sin(a);
    yc=Math.cos(a);
    a=tim/47;
    xs=Math.sin(a);
    xc=Math.cos(a);
    
    c=100;
    e=Math.sin(tim/61)*2;
    for(d=0;d<pt.length;d++){
        p=pt[d];
        for(a=0;a<p.length;a++){
            b=p[a];
            x=b[0];y=b[1];z=b[2];
            y1=yc*y-ys*z;
            z1=ys*y+yc*z;
            x1=xc*x-xs*z1;
            z1=xs*x+xc*z1;
            z=Math.pow(1.4,z1/1+e);
            b[0]=x1*c*z+gtx;
            b[1]=y1*c*z+gty;
            b[2]=z;
        }
    }
    
    for(d=0;d<pt.length;d++){
        p=pt[d];
        ctx.strokeStyle="hsla(244,60%,60%,0.6)";
        for(e=0;e<2;e++){
            for(b=0;b<2;b++){
                c=b*4;
                ctx.beginPath();
                for(a=0;a<4;a++)ctx.lineTo(p[a+c+e*8][0],p[a+c+e*8][1]);
                ctx.closePath();
                ctx.stroke();
            }
            
            for(a=0;a<4;a++){
                ctx.beginPath();
                ctx.lineTo(p[a+e*8][0],p[a+e*8][1]);
                ctx.lineTo(p[a+4+e*8][0],p[a+4+e*8][1]);
                ctx.stroke();
            }
        }
        
        ctx.strokeStyle="hsla(344,60%,60%,0.3)";
        for(a=0;a<8;a++){
            ctx.beginPath();
            ctx.lineTo(p[a][0],p[a][1]);
            ctx.lineTo(p[a+8][0],p[a+8][1]);
            ctx.stroke();
        }
    }
    requestAnimationFrame(aaa);
}

function cube(tx,ty,tz,xr,yr){
    var a,b,c,p,xc,xs,yc,ys,x,y,z,x1,y1,z1,x2,y2,z2,x3,y3,z3;
    p=[
        [-1,-1,-1],[-1,1,-1],[1,1,-1],[1,-1,-1],
        [-1,-1,1],[-1,1,1],[1,1,1],[1,-1,1],
    ];   
        xc=Math.cos(xr);
        xs=Math.sin(xr);
        yc=Math.cos(yr);
        ys=Math.sin(yr);
        
        c=0.1;
        for(a=0;a<8;a++){
        b=p[a];
    x=b[0];y=b[1];z=b[2];
    y1=yc*y-ys*z;
    z1=ys*y+yc*z;
    x1=xc*x-xs*z1;
    z1=xs*x+xc*z1;
    x2=x1*c+tx;
    y2=y1*c+ty;
    z2=z1*c+tz;
    b[0]=x2;
    b[1]=y2;
    b[2]=z2;
    px=x2-qp[0];
    py=y2-qp[1];
    pz=z2-qp[2];
    e=Math.pow(px*px+py*py+pz*pz,0.5);
    e=wlen/e;
    x3=qp[0]+px*e;
    y3=qp[1]+py*e;
    z3=qp[2]+pz*e;
    p.push([x3,y3,z3]);
}
pt.push(p);
}
    
  </script>
</body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值