首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有图标的HTML5画布粒子效应

带有图标的HTML5画布粒子效应
EN

Stack Overflow用户
提问于 2016-08-01 07:19:00
回答 1查看 862关注 0票数 1

我需要帮助这个粒子的效果与图标浮动在背景和毛斯克罗尔所有的图标应该评估到下一个屏幕与动画如下所附。

有人能帮我解决这个问题吗?

EN

回答 1

Stack Overflow用户

发布于 2016-08-01 17:24:14

这个快速演示将1+图像从各自的[startX, startY]动画到指定数量的动画帧上的单个[endX, endY]

您可以通过侦听IE上的mousewheel事件和其他浏览器上的DOMMouseScroll事件来触发它。

快速示例代码和演示:

代码语言:javascript
复制
var canvas=document.getElementById("canvas");
var ctx=canvas.getContext("2d");
var cw=canvas.width;
var ch=canvas.height;

var images=[];

var img=new Image();
img.onload=start;
img.src="https://dl.dropboxusercontent.com/u/139992952/shipSmall.jpg";
function start(){
    images.push(defineImageAnimation(img,20,20,200,100,60*2));
    requestAnimationFrame(animate);
}

function animate(time){
    ctx.clearRect(0,0,cw,ch);
    var stillAnimating=false;
    for(var i=0;i<images.length;i++){
        var img=images[i];
        if(img.durationCountdown>0){
            img.x+=img.dx;
            img.y+=img.dy;
            img.durationCountdown--;
            stillAnimating=true;
        }else{
            img.x=img.endX;
            img.y=img.endY;
        }
        ctx.drawImage(img.image,img.x,img.y);
    }
    if(stillAnimating){
        requestAnimationFrame(animate);
    }
}

// duration is expressed as how many requestAnimationFrame loops it
//     should take the animation to complete. Loops occur about every
//     1/60th of a second
function defineImageAnimation(img,startX,startY,endX,endY,duration){
    return({
        image:img,
        x:startX, y:startY,
        endX:endX, endY:endY,
        dx:(endX-startX)/duration,
        dy:(endY-startY)/duration,
        durationCountdown:duration
    });
}
代码语言:javascript
复制
body{ background-color:white; }
#canvas{border:1px solid red; }
代码语言:javascript
复制
<canvas id="canvas" width=512 height=512></canvas>

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38693017

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档