0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【JavaScript】半角全角を考慮してテキストを改行させる方法

Last updated at Posted at 2021-04-18

Canvasで意外と手こずった部分なので復習も兼ねて、似たようなものを作る人に少しでも参考になればと。Canvasに限らず使えると思う。

//改行して分割された文字列を入れるための配列
var textArray = [];
var text = '';
//改行させたい半角での長さ
const kaigyou = 8;
//文字列のバイト数を取得
const ByteCount = (string) =>{
    var byte = 0;
    for (i = 0; i < string.length; i++){
        if(string[i].match(/[ -~]/)){
            byte += 1; //半角の場合
        }else{
            byte += 2; //全角の場合
        }
    }
    return byte ;
}
//何文字目で改行するかを取得
const SliceCount = (string) =>{
    var count = 0;
    var byte = kaigyou; 
    for (i = 0; byte > 0; i++){
        if(string[i].match(/[ -~]/)){
            byte -= 1; //半角の場合
        }else{
            byte -= 2; //全角の場合
        }
        count++;
    }
    //byteが0になった時点で何文字カウントされたかを戻り値として返す
    return count;
}
const InputTextA = () =>{
  var byteRest = byte //残りのバイト数という変数
  var row = 0; 
  //HTMLでidをTextに設定してある項目の文字列を代入
  text = document.getElementById("Text").value;
  byte = ByteCount(text);

  textArray[0] = text; 
    //残りのバイト数が一行分より長い間はぐるぐる回す
    while(byteRest > kaigyou){
        var sliceNum = SliceCount(text);
        textArray[row] = text.slice(0,sliceNum);
        textArray[row + 1] = text.slice(sliceNum);

        text = textArray[row + 1];
        byteRest -= kaigyou; //1行分のバイト数を引く
        row ++;
    }
    DisplayText();

}
//テキストを描画
const DisplayText = () =>{
    if(text != ""){
        ctx.font = "23px 'MS ゴシック'";
        var row = 0;
        var byteRest = byte
        while(byteRest > 0){

            ctx.fillStyle = 'black';
            ctx.textBaseline = 'top';
            //30pxずつずらすことで改行している
            ctx.fillText(textArray[row],0, row * 30);

            row++;
            byteRest -= kaigyou;
        }
    }
}

下の画像で8バイトで改行できることが確認できます。
benzumaker (6).png
benzumaker (7).png
benzumaker (8).png

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?