Javascript JS画布分别为网格元素设置动画

Javascript JS画布分别为网格元素设置动画,javascript,html,canvas,particles,Javascript,Html,Canvas,Particles,我正在使用for循环生成一个六边形网格,我遇到了一些问题 for (var i=0; i <= rows; i++) { for (var j=0; j <= cols; j++) { ctx.save(); ctx.translate(0+i*distX, 0+j*distY); drawHexagon(ctx); ctx.fill();

我正在使用for循环生成一个六边形网格,我遇到了一些问题

    for (var i=0; i <= rows; i++) {
        for (var j=0; j <= cols; j++) {
            ctx.save();
            ctx.translate(0+i*distX, 0+j*distY);
            drawHexagon(ctx);
            ctx.fill();
            ctx.restore();
        }
    }

for(var i=0;i您的链接应用两种力:

  • 鼠标附近的粒子被排斥。更具体地说,如果粒子中心点靠近鼠标中心点,则粒子将沿两个中心点之间的线排斥

  • 不在鼠标附近的粒子被吸引回到其原始位置。更具体地说,粒子沿着其当前中心点和原始中心点之间的线向其原始中心点移动

  • 数学原理如下:

    // Given the mouse centerpoint (mx,my) & particle's centerpoint (px,py)
    
    // calculate the difference between x's & y's
    var dx=px-mx;
    var dy=py-my;
    
    // You can repel the particle by increasing the
    // particle's position by a fraction of dx & dy
    px+=dx/100;
    py+=dy/100;
    
    // And you can attract the particle by decreasing the
    // particle's position by a fraction of dx & dy
    px-=dx/100;
    py-=dy/100;
    
    以下是带注释的代码和演示(为了便于理解,请删除):

    //画布相关变量
    var canvas=document.getElementById(“canvas”);
    var ctx=canvas.getContext(“2d”);
    var cw=画布宽度;
    var ch=画布高度;
    函数reOffset(){
    var BB=canvas.getBoundingClientRect();
    offsetX=BB.left;
    offsetY=BB.top;
    }
    var offsetX,offsetY;
    reOffset();
    onscroll=函数(e){reOffset();}
    onresize=函数(e){reOffset();}
    ctx.fillStyle='skyblue';
    //鼠标相关变量
    var PI2=数学PI*2;
    var mouseRadius=75;//这是鼠标的影响半径
    var mouseRadiusSquared=mouseRadius*mouseRadius;
    var mouseIsDown=false;
    var-mx,我的;
    //定义一组存储在数组中的十六进制对象
    var-hexRadius=5;
    var=5;
    var-hexes=[];
    
    对于(var y=hexRadius;y链接应用2个力:

  • 鼠标附近的粒子被排斥。更具体地说,如果粒子中心点靠近鼠标中心点,则粒子将沿两个中心点之间的线排斥

  • 不在鼠标附近的粒子被吸引回到其原始位置。更具体地说,粒子沿着其当前中心点和原始中心点之间的线向其原始中心点移动

  • 数学原理如下:

    // Given the mouse centerpoint (mx,my) & particle's centerpoint (px,py)
    
    // calculate the difference between x's & y's
    var dx=px-mx;
    var dy=py-my;
    
    // You can repel the particle by increasing the
    // particle's position by a fraction of dx & dy
    px+=dx/100;
    py+=dy/100;
    
    // And you can attract the particle by decreasing the
    // particle's position by a fraction of dx & dy
    px-=dx/100;
    py-=dy/100;
    
    以下是带注释的代码和演示(为了便于理解,请删除):

    //画布相关变量
    var canvas=document.getElementById(“canvas”);
    var ctx=canvas.getContext(“2d”);
    var cw=画布宽度;
    var ch=画布高度;
    函数reOffset(){
    var BB=canvas.getBoundingClientRect();
    offsetX=BB.left;
    offsetY=BB.top;
    }
    var offsetX,offsetY;
    reOffset();
    onscroll=函数(e){reOffset();}
    onresize=函数(e){reOffset();}
    ctx.fillStyle='skyblue';
    //鼠标相关变量
    var PI2=数学PI*2;
    var mouseRadius=75;//这是鼠标的影响半径
    var mouseRadiusSquared=mouseRadius*mouseRadius;
    var mouseIsDown=false;
    var-mx,我的;
    //定义一组存储在数组中的十六进制对象
    var-hexRadius=5;
    var=5;
    var-hexes=[];
    
    对于(变量y=hexRadius;可以完美地解释为:)谢谢你!@markE如果是你将另一个问题重定向到这个问题,那么另一个问题的操作不是关于如何做圆点,而是关于如何清除圆点。这个答案并没有解决他的问题。@Blindman67。谢谢你的第二双眼睛!是的,我得出了一个结论…我将撤销dup标志。@markE我回答了他的清除问题问题,并在问题的其余部分引用此答案。感谢撤销,当我看到人们清除每个粒子而不是整个屏幕时,我只需要将它们设置在正确的路径上…哈哈…解释得很好:)谢谢你!@markE如果是你将另一个问题重定向到这个问题,那么另一个问题的操作不是关于如何做圆点,而是关于如何清除圆点。这个答案并没有解决他的问题。@Blindman67。谢谢你的第二双眼睛!是的,我得出了一个结论…我将撤销dup标志。@markE我回答了他的清除问题问题,并引用了这个答案为问题的其余部分。感谢撤销,当我看到人们清除每个粒子而不是整个屏幕时,我只需要将他们设置在正确的路径上…哈哈。。。