微信小程序+echart

一、加载echart特定区域地图

1、下载echarts小程序组件并放置到具体项目

组件下载地址

将代码拉取到本地,复制 ec-canvas 文件夹到小程序项目中(可在项目最外层创建component文件夹,后期如有其他组件引入,也可放入该文件夹下)

2、下载特定区域地图——JSON数据

地图数据下载地址

将山西省的JSON数据在浏览器中打开,CTRL+A,CTRL+C复制到js文件中,可在需要加载地图的页面文件夹下新建shanxi.js文件,使用module.exports = 页面上复制的内容将数据导出。

3、需求页面使用组件

修改需要使用地图页面的json文件,引入组件地址

{"usingComponents": {"ec-canvas" : "../../component/ec-canvas/ec-canvas"}
}

修改需要使用地图页面的js文件,将echarts组件及导出的JSON数据引入

import * as echarts from '../../component/ec-canvas/echarts';
import sxData from './shanxi';

4、在页面wxml文件添加canvas地图容器

<view class="map-content"><ec-canvas id="mychart-dom-map" canvas-id="mychart-map" ec="{{ ecMap }}" force-use-old-canvas="true"></ec-canvas>
</view>

样式根据需要自行调整
force-use-old-canvas="true"是为了解决echarts在滑动屏幕时不跟随scroll滑动

图表不跟随父元素及页面滑动
(1)增加force-use-old-canvas="true"属性
(2)看是否在 config里设置了config = {“disableScroll”:true},如果设置了需去掉
(3)看是否给外层标签定义了height:100%的属性或者overflow相关属性,如果设置了需去掉
(4)检查canvas的所有父级元素是否设置了height:100%,overflow相关属性(visible除外),以及position相关的属性(relative,static除外),如果设置了需去掉

5、定义初始化方法 initChart 并在data中声明参数 ecMap

var dataGeo = []; //散点图数据,可在请求接口成功后赋值
// 定义初始化方法 initChart
function initChart(canvas, width, height) {chart = echarts.init(canvas, null, {width: width,height: height});canvas.setChart(chart);echarts.registerMap('sx', sxData);var mapOption = {geo: {map: "sx",// roam: true, //拖拽及缩放zoom: 1.1,silent: true, //图形是否不响应和触发鼠标事件,默认为 false,即响应和触发鼠标事件top: 20,bottom: 20,scaleLimit: {//滚轮缩放的极限控制min: 0.5,max: 20,},label: {normal: {show: true,fontSize: "10",color: "rgba(0,0,0,0.7)",},},itemStyle: {normal: {areaColor:"#E6F3FF", // 地图填充颜色borderColor: "#1E9EFF", //边线颜色},emphasis: {areaColor: "#C9E2FC", //高亮状态(鼠标移入后)颜色},},},series: [{name: '项目散点图',type: 'scatter', //散点图coordinateSystem: 'geo',showAllSymbol: true,// 点颜色设置itemStyle: {color: '#FFC730'},symbolSize: 8,  // 散点的大小data: dataGeo, //一般为接口返回数据}],};chart.setOption(mapOption);return chart;}
Page({data:{ecMap: {onInit: initChart }}
})

6、其他

(1)如需添加事件,如点击事件(可在initChart初始化时添加)

chart.on('click',function(params){console.log(params)// TODO 需要执行的方法
});

(2)地图容器内添加按钮,可在mapOption中新增graphic属性

graphic: [{type: 'group',right: 20,top: 5,children: [{type: 'rect', //矩形外框left: 'center',top: 'middle',shape: {width: 60,height: 30,},style: {fill: '#1E9EFF',}},{type: 'text', //框内文字z: 100,left: 'center',top: 'middle',style: {fill: '#fff',text: ['框内文字'],font: '10px Microsoft YaHei'}}],}
]

如需添加事件:

graphic[0]..onclick = ()=>{// TODO点击后需要执行的方法
}

(3)控制台报echarts颜色识别报错 非法颜色: none
旧版本 canvas 中会出现该报错
解决办法——在 echarts 的 ec-canvas 目录下找到 wx-canvas.js 文件,在该文件的 _initStyle 方法中加入如下代码:

var styles = ["fillStyle", "strokeStyle", "globalAlpha", "textAlign", "textBaseAlign", "shadow", "lineWidth", "lineCap", "lineJoin", "lineDash", "miterLimit", "fontSize",];
styles.forEach((style) => {Object.defineProperty(ctx, style, {set: (value) => {if ((style !== "fillStyle" && style !== "strokeStyle") ||(value !== "none" && value !== null)) {ctx["set" + style.charAt(0).toUpperCase() + style.slice(1)](value);}},});
});

二、加载echart柱状图折线图

引入及样式同上,不再赘述,不同之处仅在mapOption配置

1、柱状图

option = {type: 'column',animation: true,height: 180, // 高度,单位为pxdataZoom: [{   // 这个dataZoom组件,默认控制x轴,该参数用来控制图表滑动,数据展示较多时使用。type: 'inside', // 设置为inside则不显示滑块,表示内置start: 0,      // 左边在 0% 的位置。end: 40         // 右边在 40% 的位置。}],legend: {data: ['图例1', '图例2'], // 对应图例即折线数textStyle: {// 图例文字样式fontSize: 10,},itemWidth: 15, // 每个图例宽度},xAxis: [{type: 'category', disableGrid: true,axisLabel: {formatter: function (value) {//x轴的文字改为竖版显示var str = value.split("");return str.join("\n");}},axisTick: {show: false, // 是否显示坐标轴刻度},data: ['小店区','迎泽区','杏花岭区','尖草坪区','万柏林区','晋源区','清徐县','阳曲县','娄烦县','古交市'], // x轴值}],yAxis:[ {type: 'value',interval: 20,  //y轴间隔min: 0,max: 100,name: '(个)', //y轴单位}],series: [{name: '图例1', //需要与图例中的data对应,否则不能正确显示type: 'bar',data: [23.2, 25.6, 76.7, 95.6, 62.2, 32.6, 20.0, 85, 45, 93], // 需要与x轴值数量一致},{name: '图例2',type: 'bar',data: [26.4, 28.7, 70.7, 75.6, 82.2, 48.7, 18.8, 95, 35, 63],}]}

2、折线图

option = {type: 'column',animation: true,height: 180, // 高度,单位为pxextra: {column: {width: 20, // 柱状图每项的图形宽度,单位为px},},dataZoom: [{   // 这个dataZoom组件,默认控制x轴,用于数据过多时滑动展示type: 'inside', start: 0,      // 左边在 0% 的位置。end: 50         // 右边在 50% 的位置。}],legend: {data: ['图例1', '图例2'],textStyle: {// 图例文字样式fontSize: 10,},itemWidth: 35,},xAxis: [{type: 'category',disableGrid: true,axisLabel: {interval: 0,formatter: function (value) {// 月前添加换行,使月份竖排展示return value.split("月").join("\n月");}},axisTick: {show: false, // 是否显示坐标轴刻度},data: ['1月','2月','3月','4月','5月','6月','7月','8月','9月','10月','11月','12月',],}],yAxis:[ {type: 'value',interval: 200,min: 0,max: 999,name: '(个)',}],series: [{name: '图例1', type: 'line',symbol: 'circle', //不设置折线拐点为空心点,设置后为实心点data: [120, 132, 101, 134, 90, 230, 210, 85, 45, 93, 800, 680],},{name: '图例2',type: 'line',symbol: 'circle',data: [680, 120, 132, 550, 134, 430, 230, 820, 85, 450, 930, 800 ],}]}

改变折线点和折线的颜色

series: [{name: "温度",//鼠标放在折线点上显示的名称type: "line",//折线图symbol: 'circle',//折线点设置为实心点symbolSize: 4,   //折线点的大小itemStyle: {normal: {color: "#386db3",//折线点的颜色lineStyle: {color: "#386db3"//折线的颜色}}},
]

3、显示不全问题

(1)坐标轴数据超出显示范围(数值超过999的时候会显示不全)
添加grid配置:

grid:{left:'18',containLabel:true,
}

官方文档
(2)坐标轴刻度标签显示不全,比如1-12月只隔一个月才显示月份刻度
添加axisLabel配置:

axisLabel: {interval: 0,
}

官方文档

三、微信小程序跳转页面问题

1、跳转至tabBar(菜单页)页面,并关闭其他所有非 tabBar页面

wx.switchTab({url: '路径' // 同app.json中配置的tabBar路径
})

2、跳转至其他页面(非tabBar页面),该方法会关闭当前页面,左上角不会有返回按钮。

wx.redirectTo({url: '../'      //url默认为本页面
})

3、此方法不会关闭当前页面,且页面最多层叠10层(非tabBar页面)

wx.navigateTo({url: '路径'
})

注: switchTab 只能跳转到带有 tabBar 的页面,不能跳转到不带 tabBar的页面,跳转不带 tabBar的页面用 redirectTo 或者 navigateTo。

四、实现小程序image图片根据宽度自适应

在对应wxss设置image宽度,如width:50%

<image src="图片地址" mode="widthFix" show-menu-by-longpress>

show-menu-by-longpress可实现长按保存并分享,存在版本兼容的问题
在JS文件中添加如下代码,可查看是否支持使用该属性,该属性要求小程序的最低基础库版本号是2.7.0

wx.canIUse('image.show-menu-by-longpress')

五、小程序中的事件

使用bind在WXML组件中绑定事件,使用data-*绑定事件参数:

<button id="btn" data-dj="WeChat" bindtap="test"> Click</button>

.js文件中添加事件方法

Page({test: function(e) {console.log(e)}
})

id为btn的按钮被点击后,事件处理函数test会被执行,点击按钮时将会传入event

微信小程序+echart相关推荐

  1. 微信小程序echart图

    一.文件后缀构成 JSON: 1.app.json小程序配置 page--小程序所有的页面路径 window--小程序所有页面的顶部背景颜色,文字颜色 1 { 2 "pages": ...

  2. 微信小程序内使用echart实现中国地图,点击省跳转省地图,再点击市跳转到市区详情

    目的:在微信小程序内实现一张中国地图,上面要写上一些全国数据,点击省 => 省地图,并请求数据,点击市区 => 跳转到市区地图这样一个功能,具体实现效果如下: 思路:  1.首先我们要先画 ...

  3. 微信小程序中使用echart、动态加载几条折线

    一.示例 echart小程序示例 gitub地址:GitHub - ecomfe/echarts-for-weixin: Apache ECharts 的微信小程序版本 在小程序中放入 效果 二. 小 ...

  4. api 定位 微信小程序 精度_小程序的api是什么

    微信小程序API(Application Programming Interface),应用程序编程接口,也是程序员口中常说的接口.其实api并不专属于小程序,任何编程语言或程序形态都有相对应的api ...

  5. 微信小程序APP(商超营销类)经验总结

    项目介绍 这是一款主打门店营销的小程序.包括首页.门店.营销.个人设置.登录.数据统计展示.营销设置等. 本来要独立完成整个项目,包括前后端一套的,有些意外因素,项目临时收尾(说明:只完成了前端的部分 ...

  6. 微信小程序给echarts图表动态赋值

    微信小程序给echarts图表动态赋值 接上一篇:微信小程序引入echart图表 直接上例子(运行需要结合上一篇,拉至文章顶部进入): import * as echarts from '../../ ...

  7. 微信小程序iOS系统上echarts不能滑动的问题

    在微信小程序中使用echarts插件的时候,遇到了一个问题:当系统是iOS时,如果手指先是长按图表,然后页面会无法滑动,其中南丁格尔玫瑰图尤其明显.作为一个微信小程序的新手开发,这个问题属实难倒我了. ...

  8. 微信小程序使用echarts

    前期准备: 1.echarts提供了一个微信小程序原生组件,下载地址:ecomfe/echarts-for-weixin ,拿到 ec-canvas 文件夹 2. 到 echarts官网 在线定制组件 ...

  9. php考勤系统微信小程序

    下载地址:https://mp.csdn.net/mp_download/manage/download/UpDetailed 项目介绍 php考勤系统微信小程序 系统说明 考勤小程序,通俗来讲&qu ...

最新文章

  1. 浅谈C/C++中的static和extern关键字
  2. 【Android 异步操作】手写 Handler ( Handler 发送与处理消息 | Handler 初始化 | 完整 Handler 代码 )
  3. 图标适配大小_主题真的是大吃一鲸适配全EMUI
  4. [android] 新闻客户端实现左侧导航点击切换
  5. java 画笔跟swing组件_Java学习教程(基础)--Java版本历史(二)
  6. 求首位相连一维数组最大子数组的和
  7. JavaScript习题(数组去重、有序数组乱序排列)
  8. 简述java的异常机制_JAVA异常机制简述
  9. 达索系统成立“大土木工程达索系统BIM技术推进联盟”深化应用、共享经验
  10. 你是否适合当一个Java程序员?一文看清
  11. 关于如何打开一张jpg图片文件并存放到vector unsigned char中的讨论
  12. Atitit 安全措施流程法 目录 1. 常见等安全措施方法 2 1.1. 安全的语言 代码法,编译型 java 2 1.2. 安全编码法 2 1.3. 安全等框架类库 api 2 1.4. 加密法
  13. python打印万年历_你会用Python打印一个万年历吗?像月历一样好看!
  14. WordPress缩略图出现A TimThumb error has occured解决办法
  15. Azure NSG网络安全组日志分析
  16. auto.js 快手自动评论脚本 引流操作
  17. 微信网站被误封,不知道为何被封,站长认证一直失败该如何解决?
  18. 苹果X 顶部和底部留白问题
  19. unity2D动画和图片切割
  20. XSSF:POI IndexedColors 编码 与 颜色 对照(本想自定义颜色,不方便实现。先尽量找个能用的)

热门文章

  1. 深入浅出单点登录---2、解决方案
  2. 微信小程序-封装原生垂直滚动菜单(类似外卖商品菜单)
  3. 不会整理收纳的人的思维方式和行为模式
  4. Linux 内核同步(七):RCU机制
  5. C++ 的各种库--收藏
  6. 陕西初中计算机考试知识点,陕西省初中信息技术学业水平考试核心复习材料.docx...
  7. 启用批次分割物料更改评估类别
  8. 免费出行保险 意外保险api
  9. 什么是贪财型人格,如何改变贪财型性格
  10. 在目前权利类资产低迷的背景下