html5 canvas繪制環形進度條,環形漸變色儀表圖


html5 canvas繪制環形進度條,環形漸變色儀表圖

html5 canvas繪制環形進度條,環形漸變色儀表圖                                           html5 canvas繪制環形進度條,環形漸變色儀表圖

在繪制圓環前,我們需要知道canvas arc() 方法。

html5 canvas繪制環形進度條,環形漸變色儀表圖

 

html5 canvas繪制環形進度條,環形漸變色儀表圖

 

 

 

一:繪制環形進度條

<canvas id="myCanvas1" data-percent="60">  
	您的瀏覽器不支持canvas標簽。  
</canvas> 

  

       var pper=0;  
	    var pper_interal;   
	    var dushu=document.getElementById('dushu');
	  
	    var aaa=drawCanvanPercent('myCanvas1','rem',2,'#93BF55',0.2,'#fff', dushu);   
	  
	    function drawCanvanPercent(ele_id,dw,cir_r,cir_color,line_w,fill_color,dushu_ele){  
	        if(dw=="rem"){  
	            cir_r=cir_r*($(".charts").width()/5);  
	            line_w=line_w*(window.screen.width/5);  
	        }  
	        var canvas = document.getElementById(ele_id);  
	        var circle = {  
	            r : cir_r/2,      //圓的半徑  
	            per : canvas.getAttribute('data-percent'),      //百分比分子  
	            color : cir_color,      //圓環的顏色  
	            lineWidth : line_w      //圓環的寬度  
	        };  
	        canvas.width=canvas.height=circle.r*2;  
	        canvas.style.borderRadius="50%";  
	        if(canvas.getContext){  
	            var ctx2 = canvas.getContext("2d");  
	            ctx2.fillStyle = fill_color;  
	            ctx2.arc(circle.r, circle.r, circle.r-circle.lineWidth/2, 0, Math.PI*2, false);  
	            ctx2.fill();  
	            var ctx = canvas.getContext("2d");  
	            pper_interal= setInterval(function () {  //間隔10ms調用一次drawmove
	                drawMove(ctx,circle,dushu_ele);  
	            }, 10); 

	            var ctx3 = canvas.getContext("2d");  //繪制底色為灰色的圓圈
	            ctx3.beginPath();  
		    ctx3.strokeStyle = "#ddd";  
		    ctx3.lineWidth=circle.lineWidth;  
		    ctx3.arc(circle.r, circle.r, circle.r, Math.PI*0, Math.PI*2, false);  
		    ctx3.stroke(); 
	        }  
	    }  
	  
	    function drawMove(ctx,circle,dushu_ele){   //根據data-percent的值,實現遞進效果
	        if(pper>=circle.per){  
	            pper=circle.per;  
	            clearTimeout(pper_interal);  
	        }else{  
	            pper++;  
	        }  
	        dushu_ele.innerText=pper+'%';  
	        ctx.beginPath();  
	        ctx.strokeStyle = circle.color;  
	        ctx.lineWidth=circle.lineWidth;  
	        ctx.arc(circle.r, circle.r, circle.r, 0, Math.PI*(pper/100)*360/180, false);  
	        ctx.stroke();  
	    }

 

 

二:繪制環形漸變色儀圖:

<canvas id="myCanvas1" data-percent="85">  
	 您的瀏覽器不支持canvas標簽。  
</canvas>

  

       var pper=0;  
	    var pper_interal;  
	    var dushu=document.getElementById('dushu'); 
	  
	    var aaa=drawCanvanPercent('myCanvas1','rem',2,'#93BF55',0.2,'#fff', dushu);   
	  
	    function drawCanvanPercent(ele_id,dw,cir_r,cir_color,line_w,fill_color,dushu_ele){  
	        if(dw=="rem"){  
	            cir_r=cir_r*($(".charts").width()/5);  
	            line_w=line_w*(window.screen.width/5);  
	        }  
	        var canvas = document.getElementById(ele_id);  
	        var circle = {  
	            r : cir_r/2.5,      //圓的半徑  
	            r2 : cir_r/2,
	            per : canvas.getAttribute('data-percent'),      //百分比分子  
	            color : cir_color,      //圓的顏色  
	            lineWidth : line_w      //圓的顏色  
	        };  
	        canvas.width=canvas.height=circle.r*2;  
	        canvas.style.borderRadius="50%";  
	        if(canvas.getContext){  
	            var ctx2 = canvas.getContext("2d");  
	            ctx2.fillStyle = fill_color;  
	            ctx2.arc(circle.r, circle.r, circle.r-circle.lineWidth/2, Math.PI*0, Math.PI*2, true);  
	            ctx2.fill();  
	            var ctx = canvas.getContext("2d");  
	            pper_interal= setInterval(function () {  
	               drawMove(ctx,circle,dushu_ele);  
	            }, 10); 

	            var ctx3 = canvas.getContext("2d");  
	            ctx3.beginPath();  
		    ctx3.strokeStyle = "#ddd";  
		    ctx3.lineWidth=circle.lineWidth;  
		    ctx3.arc(circle.r, circle.r, circle.r, Math.PI*0.15, Math.PI*0.85, true);  //以逆時針的方式,從0.15PI的位置畫到0.85PI。總角度為234度
		    ctx3.stroke();

	        }  
	    }  
	  
	    function drawMove(ctx,circle,dushu_ele){  
	        if(pper>=circle.per){  
	            pper=circle.per;  
	            clearTimeout(pper_interal);  
	        }else{  
	            pper++;  
	        }  
	        dushu_ele.innerText=pper+'%';  
	        ctx.beginPath(); 
	        var g = ctx.createLinearGradient(0,0,180,0);  //創建漸變對象  漸變開始點和漸變結束點
		g.addColorStop(0, '#A9D25B'); //添加顏色點 
		g.addColorStop(1, '#FA5A2D'); //添加顏色點 
		ctx.strokeStyle = g;     //使用漸變對象作為圓環的顏色
	 
	        ctx.lineWidth=circle.lineWidth;  
	        ctx.arc(circle.r, circle.r, circle.r, Math.PI*0.85, Math.PI*((pper/100)*234/180 + 0.85), false); //這里的儀表盤總度數為234。即(2-0.85)*Math.PI
	        ctx.stroke();  
	    }  

  繪制刻度:

function drawTicks(ele,cir_r){ 
	     						var  cir_r=cir_r*($(".charts").width()/5); 
	     						var circle = {  
				            r : cir_r/2.5,      //圓的半徑  ,
				       		 }; 
			        	  var _canvas = document.getElementById(ele); 
			         		var context0= _canvas.getContext("2d"); 
			         		for(var i=7;i<34;i++){  
                    //保存當前狀態  
                    context0.save();  
                    //刻度粗細  
                     context0.lineWidth=2;  
                    //刻度顏色  
                    context0.strokeStyle="#666"  
                    //設置00點,以畫布中心為00  
                    context0.translate(circle.r,circle.r);  
                    //設置旋轉角度 參數是弧度,角度 0--360 弧度角度*Math.PI/180  
                    context0.rotate(i*9*Math.PI/180);  
                    context0.beginPath();  
                    //刻度起始點  
                    context0.moveTo(0,circle.r-15);  
                    //刻度結束點  
                    context0.lineTo(0,circle.r-17);  
                    context0.closePath();  
                    context0.stroke();  
                    //將旋轉后的圖片返回原畫布  
                    context0.restore();  
                } 
			            //利用半徑與半徑與x軸夾角繪制單個刻度  
			            
			  }  
			  drawTicks("myCanvas1",2);

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM