canvas实现进度条!

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <style>
        body{padding:0px;margin:0px;overflow: hidden;}
        #cas{display: block;border:1px solid;margin:auto;}
    </style>
    <title>progressBar</title>
</head>
<body>
<div class="game">
    <canvas id=‘cas‘ width="700" height="750" >您的浏览器不支持canvas,请更新浏览器</canvas>
</div>
<script>
    var canvas = document.getElementById("cas");
    var ctx = canvas.getContext("2d");
    var progress = 0;
    var flag = true;
    var booms = [];

    Array.prototype.foreach = function(callback){
        for(var i=0;i<this.length;i++){
            if(this[i]!==null) callback.apply(this[i] , [i])
        }
    }

    window.RAF = (function(){
        return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function (callback) {window.setTimeout(callback, 1000 / 60); };
    })();

    function getRandom(a , b){
        return Math.random()*(b-a)+a;
    }

    var Frag = function(centerX , centerY , radius , color ,tx , ty){   //烟火碎屑对象
        this.tx = tx;
        this.ty = ty;
        this.x = centerX;
        this.y = centerY;
        this.dead = false;
        this.centerX = centerX;
        this.centerY = centerY;
        this.radius = radius;
        this.color = color;
    }

    Frag.prototype = {
        paint:function(){
            ctx.save();
            ctx.beginPath();
            ctx.arc(this.x , this.y , this.radius , 0 , 2*Math.PI);
            ctx.fillStyle = "rgba("+this.color.a+","+this.color.b+","+this.color.c+",1)";
            ctx.fill()
            ctx.restore();
        },
        moveTo:function(index){
            this.ty = this.ty+30;
            var dx = this.tx - this.x , dy = this.ty - this.y;
            this.x = Math.abs(dx)<0.1 ? this.tx : (this.x+dx*0.1);
            this.y = Math.abs(dy)<0.1 ? this.ty : (this.y+dy*0.1);
            if(dx===0 && Math.abs(dy)<=80){
                this.dead = true;
            }
            this.paint();
        }
    }

    var stage = {

        update:function(){

                if(progress<=600){
                    ctx.save();
                    ctx.fillStyle = "rgba(0,5,24,0.1)";
                    ctx.fillRect(0,0,canvas.width,canvas.height);
                    ctx.restore();
                    ctx.save();
                    ctx.fillStyle="blue";
                    ctx.fillRect(50,300,600,50);
                    ctx.restore();

                    ctx.save();
                    var gradient=ctx.createLinearGradient(50,300,600,50);
                    gradient.addColorStop("0","grey");
                    gradient.addColorStop("0.5","black");
                    gradient.addColorStop("1.0","red");
                    ctx.fillStyle=gradient;
                    ctx.fillRect(50,300,progress,50);
                    progress += 2;
                    var  percentage= parseInt(progress/600*100)+"%";
                    ctx.font="30px Verdana";
                    ctx.fillText(percentage,200,200);
                    ctx.restore();

                    booms = [];
                    for(var i = 0;i<5;i++){
                        var  color = {
                            a:parseInt(getRandom(128,255)),
                            b:parseInt(getRandom(128,255)),
                            c:parseInt(getRandom(128,255))
                                        }    //end color
                        var fanwei = parseInt(getRandom(300, 400));
                        var a = getRandom(-Math.PI, -Math.PI*3/4);
                        var x = getRandom(0, fanwei) * Math.cos(a) + progress+50;
                        var y = getRandom(0, fanwei) * Math.sin(a) + 300;

                        var frag = new Frag( progress+50 , 300 , 2 , color , x , y );
                       booms.push(frag);
                    }//end for

                    booms.foreach(function(){
                        this.moveTo();
                    })
                }else{
                    flag =false;
                }

        },

        loop:function(){
            var _this = this;
            if(flag){
            this.update();
            }
            RAF(function(){
                _this.loop();
            });
        },

        start:function(){
            this.loop();
        }
    }
    stage.start();
</script>
</body>
</html>
时间: 2024-11-11 13:08:37

canvas实现进度条!的相关文章

用初中数学知识撸一个canvas环形进度条

周末好,今天给大家带来一款接地气的环形进度条组件vue-awesome-progress.近日被设计小姐姐要求实现这么一个环形进度条效果,大体由四部分组成,分别是底色圆环,进度弧,环内文字,进度圆点.设计稿截图如下: 我的第一反应还是找现成的组件,市面上很多组件都实现了前3点,独独没找到能画进度圆点的组件,不然稍加定制也能复用.既然没有现成的组件,只有自己用vue + canvas撸一个了. 效果图 先放个效果图,然后再说下具体实现过程,各位看官且听我慢慢道来. 安装与使用 源码地址,欢迎sta

HTML5动画(二):Canvas 实现圆形进度条并显示数字百分比

实现效果 1.首先创建html代码 <canvas id="canvas" width="500" height="500" style="background:#000;"></canvas> 2.创建canvas环境 var canvas = document.getElementById('canvas'), //获取canvas元素 context = canvas.getContext('2d

canvas 绘制圆形进度条

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>canvas 圆形进度条效果</title> <style> *{margin:0;padding:0;} body{text-align:center;background-color:#000;} </style> </he

HTML5 Canvas绘制环形进度条

最近比较迷恋canvas,加之做了一个个人网站,有用到环形进度条,记录下来. canvas中没有直接绘制圆的方法,但有一个绘制弧线的context.arc方法, 下面讲下用该方法如何绘制出图片效果. arc()方法介绍 context.arc(x,y,r,sAngle,eAngle,counterclockwise); 参数说明: x: 圆的中心的 x 坐标 y: 圆的中心的 y 坐标 r: 圆的半径 sAngle: 起始角,以弧度计.(弧的圆形的三点钟位置是 0 度) eAngle: 结束角,

【笔记】canvas图片预加载及进度条的实现

/*star *loading模块 *实现图片的预加载,并显示进度条 *参数:图片数组对象,加载完成的回调函数 */ function loadImages(sources,callback){ var loadedImages = 0; var numImages = 0; ctx.font='14px bold'; ctx.lineWidth=5; var clearWidth=canvas.width; var clearHeight=canvas.height; // get num o

HTML5 canvas绘制倒计时+环形进度条

需求: 1.页面在进入时后台会提供一个固定时间和固定百分比,例如:18小时16分30秒,25%2.页面要求在进入时,有环形进度条从0推进到25%的效果,进度条旁的显示进度的黄色方块要始终保持跟随进度条最前方如图3.环形进度条中间计时器,要从获取到 具体时间后开始倒计时 设计图: JS代码如下: //补零function setDigit(num, n){ var str=''+num; if(str.length<n) { str='0'+str; } return str;}//设定时间fun

HTML5 canvas带渐变色的圆形进度条动画

query-circle-progress是一款带渐变色的圆形进度条动画特效jQuery插件.该圆形进度条使用的是HTML5 canvas来绘制圆形进度条及其动画效果,进度条使用渐变色来填充,效果非常的酷. 效果演示:http://www.htmleaf.com/Demo/201505271919.html 下载地址:http://www.htmleaf.com/html5/html5-canvas/201505271918.html

Android的下拉刷新带进度条效果

首先看一下运行效果图,程序的下拉刷新参考了视频,在视频页面也提供了源码下载, http://www.imooc.com/learn/135 本篇主要说在此基础上增加了进度条的快速旋转和递增递减处理,在文章最后也会给出源码,这里主要描述一下所用的一个类 RoundProgressBar package com.cayden.listview; import android.content.Context; import android.content.res.TypedArray; import

App更新之dialog数字进度条

App更新之dialog数字进度条 前言:现在一般的Android软件都是需要不断更新的,当你打开某个app的时候,如果有新的版本,它会提示你有新版本需要更新.当有更新时,会弹出一个提示框,点击下载,则在通知来创建一个数字进度条进行下载,下载成功后才到安装界面. 效果: 开发环境:AndroidStudio2.2.1+gradle-2.14.1 涉及知识: 1.Handler机制 2.自定义控件+Canvas绘画 3.自定义dialog 部分代码: public class NumberProg