1. 程式人生 > >canvas實現分散對齊

canvas實現分散對齊

canvas水平對齊方式有:

描述
start 預設,文字在指定的位置開始
end 文字在指定的位置結束
center 文字的中心被放置在指定的位置
left 文字左對齊
right 文字右對齊

JS呼叫:

ctx.textAlign = "center | end | left | right | start";

那麼問題來了,如果我們要實現左右分散對齊呢?
我有個不成熟的辦法,僅供參考,如果有更好的辦法,請在評論區告訴我。

主要思想:我們先看看ctx.textAlign = "center"

的含義:文字的中心位置放置在指定的位置,那我們現在假設canvas的寬度為L,需要居中的字串length為N,然後我們將寬度分為N+1,每個放在每一段的中間,可能解釋的有點不好理解,看看示意圖:
這裡寫圖片描述

廢話不多說了,直接上程式碼:
需要引用Jquery的:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<!--
    描述:canvas文字左右居中對齊
    條件:保證文字在一行放的下的條件
-->
<canvas id="canvas"></canvas> <script src="http://code.jquery.com/jquery-latest.js"></script> <script type="text/javascript"> $(function(){ var objStr = "13564"; canvasJustify(objStr,400,200); }); /* * str:需要居中對齊的字串 * cw:canvas的寬度 * ch:canvas的高度 * */ function canvasJustify
(str,cw,ch){
var c = $("#canvas")[0]; c.width = cw; c.height = ch; var ctx = c.getContext("2d"); ctx.fillStyle = "#1fb8dc" ctx.fillRect(0,0,cw,ch); var strL = str.length; var everyL = Math.floor(cw/(strL+1));//每一段的寬度 var remainL = cw - everyL*(strL+1); //沒有整除剩餘的長度 ctx.fillStyle = "blue"; ctx.font="18px Arial"; ctx.textAlign = "center";//設定文字居中對齊 $.each(str.split(''),function(index,element){ ctx.fillText(element,(remainL/2 + (index+1)*everyL), ch/2); }); }
</script> </body> </html>

原生:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<!--
    描述:canvas文字左右居中對齊
    條件:保證文字在一行放的下的條件
--> 
<canvas id="canvas"></canvas>
<script type="text/javascript">
window.onload = function(){
    var objStr = "13564";
    canvasJustify(objStr,400,200);
}
/*
 * str:需要居中對齊的字串
 * cw:canvas的寬度
 * ch:canvas的寬度
 * */
function canvasJustify(str,cw,ch){
    var c = document.getElementById("canvas");
    c.width = cw;
    c.height = ch;

    var ctx = c.getContext("2d");
    ctx.fillStyle = "#1fb8dc"
    ctx.fillRect(0,0,cw,ch);

    var strL = str.length;
    var everyL = Math.floor(cw/(strL+1));//每一段的寬度
    var remainL = cw - everyL*(strL+1); //沒有整除剩餘的長度

    ctx.fillStyle = "blue";   
    ctx.font="18px Arial";  
    ctx.textAlign = "center";//設定文字居中對齊
    for(var i = 0; i<strL; i++){
        ctx.fillText(str[i],(remainL/2 + (i+1)*everyL), ch/2);
    }
}
</script>   
</body>
</html>