阅读 165

echarts图表缩放时,怎么让文字也跟着缩放?

前言

echarts将roam属性设置成 scale 或者 true,就开启鼠标缩放的效果。但是缩放过程中会发现字体并不会随着缩放变化。如下图所示。本文要解决的问题就是,让echarts缩放时文字也跟着缩放。 1.gif

问题难点

echarts支持的鼠标事件包括 'click''dblclick''mousedown''mousemove''mouseup''mouseover''mouseout''globalout''contextmenu'。echarts缩放是鼠标滚动触发的,echarts并没有支持mousewheel。直接使用echartsInstance注册mousewheel是不起作用的。

使用getZr()注册和取消mousewheel事件

getZr是啥我也不清楚,百度发现有一个这样的函数,能够支持事件的注册和取消。有清楚的小伙伴可以留言共享。

注册事件: echartsInstance.getZr().on('eventName', callback)

取消事件: echartsInstance.getZr().off('eventName', callback)

原生echarts图表,实现字体缩放

根据缩放后的zoom值,动态变化标签label的fontsize

//注册之前先取消事件 hotWordCloud.getZr().off("mousewheel") //设置文字(缩放文字) hotWordCloud.getZr().on("mousewheel", function () {     let option2 = hotWordCloud.getOption();     if(option2.series[0]){         let zoom = option2.series[0].zoom;         wordsArr.forEach(item => {             item.label.fontSize = item.label.fontSize * zoom;             item.symbolSize = item.symbolSize * zoom;             return item;         })         option.series[0].force.edgeLength = option.series[0].force.edgeLength * zoom         option.series[0].force.repulsion = option.series[0].force.repulsion * zoom         option.series[0].data = wordsArr         hotWordCloud.setOption(option);     } }); 复制代码

react-for-echarts组件图表,实现字体缩放

由于react-for-echarts把echarts进行了封装,getZr函数被封装在了this.refs.myEcharts.getEchartsInstance()._api里面了。

<ReactEcharts ref="myEcharts" className="echarts-warpper" option={this.state.option}/> let hotWordCloud = this.refs.myEcharts.getEchartsInstance()._api; hotWordCloud.getZr().off("mousewheel") //设置文字(缩放文字) hotWordCloud.getZr().on("mousewheel",  () => {     let option2 = hotWordCloud.getOption();     if(option2.series[0]){         let zoom = option2.series[0].zoom;         option2.series[0].data.forEach(item => {             item.label.normal.fontSize = item.label.normal.fontSize * zoom;             item.symbolSize = item.symbolSize * zoom;             return item;         })         let option = {...this.state.option};         //@ts-ignore         option.series[0].force.edgeLength *=  zoom         //@ts-ignore         option.series[0].force.repulsion *= zoom         //@ts-ignore         option.series[0].data = option2.series[0].data         this.setState({option})         //@ts-ignore         this.refs.myEcharts.rerender()     } }); 复制代码

看下效果吧

2.gif


作者:邓惠子本尊
链接:https://juejin.cn/post/7028144309853487134


文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐