uni-app+vue2 微信小程序 使用canvas绘制折线图/波形图

这篇具有很好参考价值的文章主要介绍了uni-app+vue2 微信小程序 使用canvas绘制折线图/波形图。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

效果图:

电流波形动画 uniapp,uni-app 

1、需求:

接口返回一个数组,每一项均是一个数字,代表着y坐标,x坐标需自己处理。

我的数据是1024个浮点数,在-10到10之间

波形图需要xy轴缩放功能,用c3的 transform: scale()是不行的,至少会失真。

然后背景的格子,我这里是每个格子要求100个点,初始缩放下是11个格子,10条线(竖线)

2、绘制所需的方法

1、创建canvas实例。

按uni-app文档所说,小程序的canvas需要一个唯一的canvas-id属性(属性名不同平台可能有差异,参照官网)以区分页面中不同的canvas。this则是vue实例。

let content = uni.createCanvasContext('waveform', this);

2、绘制格子

首先,调用uni.getSystemInfo获取屏幕宽度,这样就能根据不同屏幕来计算图形的xy坐标,做到每个屏幕的显示比例的都一样。换成父容器宽度也可,看你需求。

//横线
for (let i = -80; i <= 80; i += 20) {
       content.moveTo(0, i);
       content.lineTo(1100, i)
     }
// 竖线
// 计算两条线之间的距离。windowWidth:屏幕宽度
let widthInterval = Number(this.windowWidth) / 11;
// x坐标缩放比例
let scalc = 100 / widthInterval;
for (let j = 1; j <= 10; j++) {
         content.moveTo(j * widthInterval, -100);
         content.lineTo(j * widthInterval, 100)
     }

moveTo是将画笔移动到哪里。canvas画图就像我们画画,落笔之前首先要将笔尖移动到目标点。

lineTo传入一个坐标,然后将该坐标与上一次收笔的坐标连接起来,形成一条线。

示意图:

电流波形动画 uniapp,uni-app

 注意:moveTo仅移动画笔,不会绘制。lineTo才会绘制。

完成以上,仅仅是创建路径,相当于蓝图。下面将蓝图实现。

content.setStrokeStyle("#797979");
content.translate(0, 100);
content.stroke();
content.beginPath();
content.moveTo(0, 0)

第一个应该不用多说,设置线条颜色。

第二个,因为canvas坐标轴原点默认在左上角顶点,绘制过程中所有坐标点都是相对于该原点的,如果坐标有负数,则会超出canvas,像使用position超出盒子一样。所以使用该方法移动原点,我这里将y坐标向下移了100像素。

第三个,将当前描绘好的路径画成真的线条。实现蓝图的方法

第四个,至此,格子已经 画好了,由于格子跟图形是分开的,不能互相影响。调用此方法可以新建一个路径(canvas一开始就默认帮我们调用了一次)。

第五个,将画笔重新移动至原点。

3、绘制折线图

                this.wave?.map((item, index) => {
                    content.lineTo(
                        (index / scalc),
                        (item * this.multipleList[this.currentMultiple] * 0.02)) 
                })

                content.setStrokeStyle("limegreen");
                // content.translate(0, 100);
                content.stroke();
                content.draw(false)

wave是数据源

是这样的:因为我需求是每个格子100个点,1024个点共11个格子,如果一个数据点占据一个像素,那么就需要1024个像素,但移动端显然不可能这么大。于是,获取到屏幕宽度后,计算出比例,就可以得出每个坐标点占据的像素。

至于multipleList,则是缩放功能使用到的倍数列表。可自行决定。

最后一个方法:draw : 将上面所有东西绘制至canvas。通常在末尾调用。

3、结尾

整体难度不大,但如果不了解canvas绘图原理,还是很麻烦的,如果看不懂文章,建议先去官网看看,有更好的讲述。

还有一个小地方:坐标点有无限小数也无所谓,canvas会自动处理,些许差别肉眼看不出来。

最后,这是我加班没事干写着玩的,也是第一次写博客,写的不好请见谅。文章来源地址https://www.toymoban.com/news/detail-858256.html

到了这里,关于uni-app+vue2 微信小程序 使用canvas绘制折线图/波形图的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • uni-app 微信小程序 图文生成图片 wxml-to-canvas

    在做的小程序要增加一个将文字与图片生成图片不可修改的功能,第一次做,在网上找了不少资料。参考了wxml-to-canvas | 微信开放文档  ,又看了一些相关事例,尝试写了一下。   需要准备的文件及配置项: 1、先把代码片段下载到本地 2、创建wxcomponents目录,把代码片段中的

    2024年02月09日
    浏览(50)
  • 在 WebStorm 中开发 uni-app - 用vue2实现手机APP(apk) + 微信小程序项目开发方案 webstorm开发的uniapp + hbuilderx进行app 小程序打包

    我们主要分析了如下小程序开发框架,主要包括: 框架 技术栈 案例 微信小程序 支付宝小程序 百度小程序 头条小程序 H5 App uni-app Vue 丰富 ⭕ ⭕️ ⭕️ ⭕ ⭕️ ⭕ Taro React 丰富 ⭕ ⭕ ⭕ ⭕ ⭕ ⭕ wepy Vue 丰富 ⭕ ❌ ❌ ❌ ❌ ❌ mpvue Vue 丰富 ⭕ ❌ ❌ ❌ ⭕️ ❌  首先,就要排

    2024年02月05日
    浏览(96)
  • 在 WebStorm 中开发 uni-app - 用vue2实现手机APP(apk) + 微信小程序项目开发方案 webstorm开发的uniapp + hbuilderx进行app 小程序打包

    我们主要分析了如下小程序开发框架,主要包括: 框架 技术栈 案例 微信小程序 支付宝小程序 百度小程序 头条小程序 H5 App uni-app Vue 丰富 ⭕ ⭕️ ⭕️ ⭕ ⭕️ ⭕ Taro React 丰富 ⭕ ⭕ ⭕ ⭕ ⭕ ⭕ wepy Vue 丰富 ⭕ ❌ ❌ ❌ ❌ ❌ mpvue Vue 丰富 ⭕ ❌ ❌ ❌ ⭕️ ❌  首先,就要排

    2023年04月15日
    浏览(80)
  • uni-app:vue3 + uni-app 在微信小程序中无法使用app.component全局注册组件

    按上文中的代码执行后,会发现在微信小程序开发中全局注册的组件是无法显示的,这是uniapp的一个未解决bug, 在uniapp中出了可以通过vue实例的component方法注册全局组件外,uniapp支持另一种全局注册的方式,就是通过 easycom 扫描注册,步骤如下 easycom 的扫描流程是:通过代码

    2024年02月16日
    浏览(98)
  • WebStorm开发uni-app ,用vue2实现手机APP(apk) + 微信小程序多端项目开发方案 webstorm开发的uniapp + hbuilderx进行app 小程序打包

    我们主要分析了如下小程序开发框架,主要包括: 框架 技术栈 案例 微信小程序 支付宝小程序 百度小程序 头条小程序 H5 App uni-app Vue 丰富 ⭕ ⭕️ ⭕️ ⭕ ⭕️ ⭕ Taro React 丰富 ⭕ ⭕ ⭕ ⭕ ⭕ ⭕ wepy Vue 丰富 ⭕ ❌ ❌ ❌ ❌ ❌ mpvue Vue 丰富 ⭕ ❌ ❌ ❌ ⭕️ ❌  首先,就要排

    2024年02月11日
    浏览(75)
  • 语法速通 uni-app随笔【uni-app】【微信小程序】【vue】

    其中, pages 目录/ index 目录【必有】: index.js 编写业务逻辑 【初始数据,生命周期函数】 index.json 编写配置 index.wxml 编写模板 【可理解为本页html】 index.wxss 【可理解为本页css】 直接输入敲回车,连尖括号都不需要就可以标签补全 1)初始数据写死 在 index.wxml 引入变

    2024年02月12日
    浏览(173)
  • uni-app+vue3微信小程序切换主题皮肤

    思路来源: https://blog.csdn.net/qq_42611074/article/details/128236458 引用store做全局css变量替换; store.js 添加全局的监听函数 common/themeMixin.js main.js 给要切换的页面加上css变量 login.vue 升级版 在base.css写好主题配色; 引用store做全局css变量替换; store.js 添加全局的监听函数 common/themeM

    2024年02月12日
    浏览(65)
  • uni-app微信小程序分享微信好友与分享到朋友圈功能【vue3+ts+uni-app+vite】

    微信小程序开发结束之后,点击右上角三个点显示: 1、创建share.ts文件 2、全局使用, 在 main.ts 里面 添加全局的 mixin 这样配置结束之后整个小程序所有页面点击右上角转发分享都走的这个文件,如果需要单个页面可以转发,可以看第三点 3、在需要的页面进行调用就行啦 a.

    2024年02月14日
    浏览(75)
  • uni-app微信小程序使用echarts

    前言:本来是使用的ucharts,但因为无法监听图例点击交互,满足不了需求,所以只能放弃。 首先,下载echart组件。可以先随便建个文件夹,然后 npm init。接着下载依赖 然后找到 node_modulesmpvue-echarts下的文件,如图 只留下src,其他的删掉(没有用到)。然后复制 mpvue-echart

    2024年02月10日
    浏览(73)
  • THREEJS 在 uni-app 中使用(微信小程序)

    threejs 主要是用来开发web端的3D世界,源生包无法适配 微信小程序(会报 document.createElementNS 的错),需要使用 github 上经过大佬改写的 threejs 包。 将源码下载到本地后,找到 将 以上三个文件 复制到自己的 uni-app 项目中 (任意路径下,这里我放在了自己的 utils 下,好像一般

    2024年02月07日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包