微信小程序利用canvas画出根据文字自适应的边框

本文介绍如何在微信小程序中使用canvas画出基于文字自适应的中空边框标签。通过计算文字宽度和设置固定高度,实现了圆角边框与文字填充。代码示例展示了调用方法和调整文字位置的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.需求

生成海需要画出一个中空带边框的的tag,如下图。众所周知,微信小程序里的canvas画图都是需要自己一点点画出来,不像html有htmlToCanvas,直接写HTML就可以转成canvas.

 2.实现

参考链接

首先要实现圆角边框,再把字体填充进去,我在网上找到一个方法,直接拿过来改了一下,代码如下:

//画圆角边框
  roundRect(ctx, x, y, w, h, r, fillColor, strokeColor) {
    // 画圆角 ctx、x起点、y起点、w宽度、y高度、r圆角半径、fillColor填充颜色、strokeColor边框颜色
    // 开始绘制
    ctx.beginPath()

    // 绘制左上角圆弧 Math.PI = 180度
    // 圆心x起点、圆心y起点、半径、以3点钟方向顺时针旋转后确认的起始弧度、以3点钟方向顺时针旋转后确认的终止弧度
    ctx.arc(x + r, y + r, r, Math.PI, Math.PI * 1.5)

    // 绘制border-top
    // 移动起点位置 x终点、y终点
    ctx.moveTo(x + r, y)
    // 画一条线 x终点、y终点
    ctx.lineTo(x + w - r, y)
    // ctx.lineTo(x + w, y + r)

    // 绘制右上角圆弧
    ctx.arc(x + w - r, y + r, r, Math.PI * 1.5, Math.PI * 2)

    // 绘制border-right
    ctx.lineTo(x 
### LineCanvas 的基本概念与实现 `LineCanvas` 是一种基于 HTML5 Canvas 技术的绘图工具,主要用于绘制折线图或其他图形化表示的数据可视化方案。以下是关于 `lineCanvas` 的具体实现方法和技术细节。 #### 1. 获取 Canvas 元素并初始化上下文 通过 JavaScript 获取页面中的 `<canvas>` 元素,并设置其宽度和高度以便后续操作。 ```javascript var lineCanvas = document.querySelector('#canvas-lines'); var ctx = lineCanvas.getContext('2d'); // 设置布大小 ctx.canvas.width = window.innerWidth; ctx.canvas.height = 200; ``` 上述代码片段展示了如何获取指定 ID 的 `<canvas>` 元素以及创建一个二维渲染上下文对象[^1]。 #### 2. 绘制基础线条 利用 Canvas 提供的方法可以轻松完成简单的线条绘制功能。下面是一个完整的例子来展示如何定义起点、终点坐标并通过调用路径命令生成一条直线: ```javascript function drawLine(ctx, startX, startY, endX, endY){ ctx.beginPath(); ctx.moveTo(startX,startY); ctx.lineTo(endX,endY); ctx.stroke(); } drawLine(ctx, 50, 150, 300, 50); ``` 此函数接受五个参数:第一个为上下文环境变量;后面四个分别代表起始位置(x,y) 和结束位置 (x',y') 坐标值[^2]。 #### 3. 自定义样式属性 为了使图表更加美观或者满足特定需求,在绘制过程中还可以调整颜色填充、边框粗细等视觉效果选项。例如更改线条颜色及厚度如下所示: ```javascript ctx.strokeStyle = '#FF5733'; // 设置线条颜色为橙红色 ctx.lineWidth = 4; // 定义线条宽为4像素 drawLine(ctx, 50, 180, 350, 80); ``` 以上修改会影响之后所有的 stroke() 调用直到再次改变这些属性为止。 #### 4. 结合 CSS 控制布局 对于更复杂的场景来说仅仅依靠 JS 来控制尺寸可能不够灵活,因此可以通过外部CSS文件进一步优化整体外观设计。比如让容器自适应屏幕宽度的同时保持固定的高度比例不变 : ```css .canvas-container { width: 98%; height: 200px; overflow: auto; } .canvas-container canvas{ min-width: 100%; height: inherit !important; } ``` 这样即使窗口大小发生变化也能保证内部元素按预期排列整齐[^3]。 #### 5. 集成第三方库扩展功能 如果希望快速构建交互性强且支持多种配置项的专业级统计报表,则可以直接引入现有的开源框架如 ECharts 或 Chart.js 。而对于微信小程序开发者而言,“wx-charts” 就是非常适合的选择之一。它允许用户自由定制主题配色方案从而更好地融入产品风格之中[^4]。 ```javascript const wxcharts = require('./wxcharts-min.js'); let chartData = { ... }; // 数据源结构需参照官方文档说明准备 new wxcharts({ canvasId:'myChart', type:'line', categories:[...], series:[...], yAxis:{format:(val)=>`${val}%`} }); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值