lufy's legend

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 12046|回复: 32
打印 上一主题 下一主题

LTextField 多行文本实际宽度超出width属性

[复制链接]

14

主题

0

好友

132

积分

士兵

Rank: 1

跳转到指定楼层
楼主
发表于 2013-12-13 13:26:17 |只看该作者 |倒序浏览
LTextField 多行文本实际宽度超出width属性
回复

使用道具 举报

14

主题

0

好友

132

积分

士兵

Rank: 1

沙发
发表于 2013-12-13 14:32:00 |只看该作者
我这边已经找到原因并做了修改。
LTextField.prototype.getHeight = function(){
    var s = this,c = LGlobal.canvas;
    if(s.wordWrap){
        c.font = s.weight + " " + s.size+"pt "+s.font;
        var i,l,j=0,k=0,m=0;
        var cW; //要绘制的字符串宽度。
        for(i=0,l=s.text.length;i<l;i++){
            j = c.measureText(s.text.substr(k,i-k)).width;
            cW = c.measureText(s.text.substr(i,1)).width;
            if(j + cW > s.width){
                j = 0;
                k = i;
                m++;
            }
        }
        s.height = (m+1)*s.wordHeight;
        return s.height;
    }
    c.font = s.weight + " " + s.size+"pt "+s.font;
    return c.measureText("O").width*1.2;
};
回复

使用道具 举报

14

主题

0

好友

132

积分

士兵

Rank: 1

板凳
发表于 2013-12-13 14:36:34 |只看该作者
c.measureText(s.text.substr(k,i-k)).width

这句返回的是当前字符之前字符串的宽度,不包括当前字符,所以,下面的判断肯定是错误的,这样绘制出来的文本会超出限制的宽度
回复

使用道具 举报

14

主题

0

好友

132

积分

士兵

Rank: 1

地板
发表于 2013-12-13 14:54:36 |只看该作者


我这边添加了一个换行功能上去。

if(s.wordWrap){
        var i,l,j=0,k=0,m=0;
        var char, cW; //要绘制的字符串宽度。
        // 此处他是一个字一个字绘制。
        for(i=0,l=s.text.length;i<l;i++){
            // 新字符位置
            j = c.measureText(s.text.substr(k,i-k)).width;
            char = lbl.substr(i,1);
            cW = c.measureText(char).width;
            if(char == "\n"){
                j = 0;
                k = i + 1;
                m++;
                continue;
            }else if(j + cW > s.width){
                j = 0;
                k = i;
                m++;
            }
            d.apply(c,[char,j,m*s.wordHeight,c.measureText(lbl).width]);
        }
        // 此处已做修改,原组件缺少了一行。
        s.height = (m + 1)*s.wordHeight;
    }else{
        d.apply(c,[lbl,0,0,c.measureText(lbl).width]);
    }
回复

使用道具 举报

14

主题

0

好友

132

积分

士兵

Rank: 1

5#
发表于 2013-12-13 15:00:54 |只看该作者
建议有空加些如缩退等的功能。
回复

使用道具 举报

37

主题

8

好友

9312

积分

诸侯王

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

6#
发表于 2013-12-13 21:33:47 |只看该作者
陈前帆 发表于 2013-12-13 14:54
我这边添加了一个换行功能上去。

if(s.wordWrap){
       // 此处已做修改,原组件缺少了一行。
        s.height = (m + 1)*s.wordHeight;

getHeight的时候会计算文本的高的,这里加不加都一样的
不回答与技术和引擎不相关的问题
回复

使用道具 举报

37

主题

8

好友

9312

积分

诸侯王

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

7#
发表于 2013-12-13 21:34:32 |只看该作者
多谢提醒了,我抽时间改一下
不回答与技术和引擎不相关的问题
回复

使用道具 举报

8#
无效楼层,该帖已经被删除
9#
无效楼层,该帖已经被删除
10#
无效楼层,该帖已经被删除
您需要登录后才可以回帖 登录 | 立即注册

防止垃圾广告,请填写任意字符

Archiver|lufy's legend

GMT+8, 2024-5-5 18:42 , Processed in 0.056160 second(s), 21 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部