马黑黑 发表于 2025-6-22 10:55

升级一下 textcanvas 模块

测试使用中觉得,textcanvas 生成的画布成品如果可以定义 canvas 背景色、内边距,其实用性会更好一些。


关于背景,相当于给 canvas 画布着个底色,但是不是给 canvas 标签加个 CSS background 属性,那个作用有效,需要给画布画一个带颜色的矩形,生成的成品才真正被认可。当然,background 属性可以在 DOM 中生效,但想让 ThreeJS 接收为纹理贴图,那不管用。

背景在配置中的键名是bg,例如,bg: 'olive',或者用带透明的 rgba,bg: 'rgba(0, 60, 100, 0.5)',配置代码随意放在什么地方,一般建议跟在字体设置之后。

关于内边距,设计成xy两个方向,x 指向左右,y 指向上下,键名为 padding,例如,padding: { x: 35, y: 40 },这表示文本左右各留出 35px、上下各留出 40px 的空间,注意xy值是数值,不带 px 单位。

下面是代码示例,运行效果放在二楼:

<style>
        #papa { margin: 30px auto;width: 1024px; height: 640px; background: #eee; box-shadow: 2px 2px 8px #000; display: grid; place-items: center; z-index: 1; position: relative; }
        canvas { border: 1px solid gray; }
</style>

<div id="papa"></div>

<script type="module">
        import { textcanvas } from 'https://638183.freep.cn/638183/3dev/3/textcanvas1.js';

        const str = `ABCDEFG abcdefg\n0123456789\n甲乙丙丁戊己庚辛壬癸`;
        const config = {
                font: 'bold 40px "KaiTi", sans-serif',
                align: 'center', // 文本对齐,可选值 :left, center, right
                padding: { x: 30, y: 40 },
                bg: 'rgba(20,40,180,0.25)',
                gradient: {
                        type: 'radial', // 渐变类型,可选 linear 或 radial
                        value: , // 渐变坐标
                        // 渐变色标
                        color:[
                                { offset: 0, color: 'orange' },
                                { offset: 0.35, color: 'magenta' },
                                { offset: 0.7, color: 'darkgreen' },
                                { offset: 1, color: 'yellow' }
                        ]
                },

                fill: true, // 是否填充,false不填充
                shadowX: 1, // 阴影X偏移量
                shadowY: 1, // 文本Y偏移量
                shadowBlur: 2
        };

        const mycanv = textcanvas(str, config);
        //console.log(mycanv.width, mycanv.height); //查看canvas画布宽高尺寸
        papa.appendChild(mycanv);
</script>

马黑黑 发表于 2025-6-22 10:55

<style>
        #papa { margin: 30px auto;width: 100%; height: 460px; background: #eee; box-shadow: 2px 2px 8px #000; display: grid; place-items: center; z-index: 1; position: relative; }
        canvas { border: 1px solid gray; }
</style>

<div id="papa"></div>

<script type="module">
        import { textcanvas } from 'https://638183.freep.cn/638183/3dev/3/textcanvas1.js';

        const str = `ABCDEFG abcdefg\n0123456789\n甲乙丙丁戊己庚辛壬癸`;
        const config = {
                font: 'bold 40px "KaiTi", sans-serif',
                align: 'center', // 文本对齐,可选值 :left, center, right
                padding: { x: 30, y: 40 },
                bg: 'rgba(20,40,180,0.25)',
                gradient: {
                        type: 'radial', // 渐变类型,可选 linear 或 radial
                        value: , // 渐变坐标
                        // 渐变色标
                        color:[
                                { offset: 0, color: 'orange' },
                                { offset: 0.35, color: 'magenta' },
                                { offset: 0.7, color: 'darkgreen' },
                                { offset: 1, color: 'yellow' }
                        ]
                },

                fill: true, // 是否填充,false不填充
                shadowX: 1, // 阴影X偏移量
                shadowY: 1, // 文本Y偏移量
                shadowBlur: 2
        };

        const mycanv = textcanvas(str, config);
        //console.log(mycanv.width, mycanv.height); //查看canvas画布宽高尺寸
        papa.appendChild(mycanv);
</script>

梦江南 发表于 2025-6-22 11:25

马黑黑 发表于 2025-6-22 10:55
#papa { margin: 30px auto;width: 100%; height: 460px; background: #eee; box-shadow: 2px 2px 8px ...

谢谢老师详细讲解。辛苦了!

马黑黑 发表于 2025-6-22 12:50

梦江南 发表于 2025-6-22 11:25
谢谢老师详细讲解。辛苦了!

{:4_191:}

红影 发表于 2025-6-22 13:22

升级后就可以有背景色和内边距了,可以跟文字一起设置了{:4_187:}

马黑黑 发表于 2025-6-22 13:26

红影 发表于 2025-6-22 13:22
升级后就可以有背景色和内边距了,可以跟文字一起设置了

可定义的项目多了两个。缺省内边距是10,缺省背景是透明,第一个版本也是这样。

杨帆 发表于 2025-6-22 14:14

谢谢老师,这个预览显示正常{:4_191:}

马黑黑 发表于 2025-6-22 17:45

杨帆 发表于 2025-6-22 14:14
谢谢老师,这个预览显示正常

原来那个也没问题的。有时候,硬刷新是必要的:Ctrl +F5,然后在软刷新:F5

杨帆 发表于 2025-6-22 18:22

马黑黑 发表于 2025-6-22 17:45
原来那个也没问题的。有时候,硬刷新是必要的:Ctrl +F5,然后在软刷新:F5

好,我再看看

红影 发表于 2025-6-22 21:05

马黑黑 发表于 2025-6-22 13:26
可定义的项目多了两个。缺省内边距是10,缺省背景是透明,第一个版本也是这样。

嗯,有这样可定义的好多了,可以按照需要做调整了。

马黑黑 发表于 2025-6-22 23:57

红影 发表于 2025-6-22 21:05
嗯,有这样可定义的好多了,可以按照需要做调整了。

是啊。最初的想法是适应文字尺寸。

红影 发表于 2025-6-23 11:35

马黑黑 发表于 2025-6-22 23:57
是啊。最初的想法是适应文字尺寸。

后来想到的跟多了吧。

马黑黑 发表于 2025-6-23 23:21

红影 发表于 2025-6-23 11:35
后来想到的跟多了吧。

这个 padding、bg 原来也是有计划的,只是先完成适应文字尺寸的,然后在一点点扩展。到目前止,模块的函数其实还是没有增加,只是内部的算法加入了 bg、padding 相关的因素

红影 发表于 2025-6-24 09:15

马黑黑 发表于 2025-6-23 23:21
这个 padding、bg 原来也是有计划的,只是先完成适应文字尺寸的,然后在一点点扩展。到目前止,模块的函 ...

嗯嗯,内部增加了,而且还有对外的接口,便于操作。
越来越完善了。{:4_187:}

马黑黑 发表于 2025-6-24 13:03

红影 发表于 2025-6-24 09:15
嗯嗯,内部增加了,而且还有对外的接口,便于操作。
越来越完善了。

{:4_190:}

花飞飞 发表于 2025-7-2 17:36

看来教程一天不能看多个,我还是先灌会水去缓缓。。{:4_170:}

马黑黑 发表于 2025-7-2 18:15

花飞飞 发表于 2025-7-2 17:36
看来教程一天不能看多个,我还是先灌会水去缓缓。。

有些东东是理解核心的就行,具体实现的细节恐怕有一定的难度

花飞飞 发表于 2025-7-2 21:23

马黑黑 发表于 2025-7-2 18:15
有些东东是理解核心的就行,具体实现的细节恐怕有一定的难度

那这个补充版算是周边了。。{:4_173:}

马黑黑 发表于 2025-7-2 22:07

花飞飞 发表于 2025-7-2 21:23
那这个补充版算是周边了。。

是的吧

花飞飞 发表于 2025-7-3 13:09

马黑黑 发表于 2025-7-2 22:07
是的吧

上午外出,下午还要跑一趟,晚上再来瞅瞅
页: [1] 2
查看完整版本: 升级一下 textcanvas 模块