echarts实用经验:tooltip悬浮框添加button按钮;toolbox添加自定义按钮;显示隐藏切换导致图表太小渲染不及时的解决办法

4 篇文章 0 订阅

一、tooltip悬浮框添加点击事件

这里我配置的是在柱状图中,echarts配置项文档

注意:
1、tooltip,默认是鼠标移动时触发(‘mousemove’)。这种情况下,是无法点击到悬浮框的,更别说点击框内的按钮。所以先修改出现方式为鼠标点击时触发(‘click’
2、设置鼠标可进入悬浮框:enterable:true
3、formatter,提示框浮层内容格式器,支持字符串模板和回调函数两种形式。这里用回调函数形式,在 trigger 为 ‘axis’ 的时候,会有多个系列的数据params[0]、params[1]

tooltip: {
	trigger: "axis",//坐标轴触发,主要在柱状图,折线图等会使用类目轴的图表中使用
    triggerOn: 'click',//可点击
    enterable:true,//鼠标是否可进入提示框浮层中,默认为false,如需详情内交互,如添加链接,按钮,可设置为 true
    alwaysShowContent: true,//总是展示
	backgroundColor:'#fff',//背景色
	borderColor:'#eee',//边框颜色
	borderWidth:'0.5',//边框宽度
       formatter: (params)=> {
       //有用到原数据的一些信息,
       //dataIndex,即为当前柱子所用数据在原数据数组中的索引
       let {dataIndex} = params[0]
       return (
         params[0].name + 
         '<button class="btn" type="button" οnclick="' +
           this.goToDetail(this.originInfo[dataIndex].id) +
           '">更多</button>'+
           '<br/>' +params[0].marker + params[0].seriesName +':'+params[0].value+'<br/>'+
           params[1].marker + params[1].seriesName +':'+params[1].value
         );
       },
	textStyle: {
		color: "#666",
		fontSize: 12
	},
	padding: [10, 5, 5, 5]
},

在页面加载后tooltip第一次显示时,goToDetail被调用了多次,导致查看按钮上绑定了多个点击事件
解决:设置addEventflag变量来控制仅当第一次goToDetail被调用时,给dom添加事件监听。这样按钮就不会被注册那么多次点击事件了

<template>
	<div id="barCharts"></div>
</template>
import echarts from 'echarts';//echarts引入
export default{
	data(){
		return{
			addEventflag:false,
		}
	}
}
methods:{
	goToDetail(id){
		if (this.addEventflag) {
			return false;
		}
		document.getElementById('barChart').addEventListener('click', ev => {
			let el = ev.target;
			if (el.tagName.toLowerCase() === 'button' && el.className === 'btn') {
				//emit一个函数,供父组件使用
				this.$emit('goToDetail',id)
			}
		});
		this.addEventflag = true;
	},
}

参考链接:
1、https://www.cnblogs.com/GoTing/p/14784461.html
2、https://blog.csdn.net/Tempta36/article/details/104591652

二、toolbox添加自定义按钮

注意:
1、配置时icon不能是空,不然不展示,我就踩了这个坑;
2、官方提示:除了各个内置的工具按钮外,还可以自定义工具按钮。注意,自定义的工具名字,只能以 my 开头,例如下例中的 myTool1,myTool2

toolbox: {
	show: true,//是否显示工具栏组件
    right: 20, // toolbox的定位位置
    feature:{
       myTool1:{
       show: true,
       title: '返回首页',
       icon:'image://https://echarts.apache.org/zh/images/favicon.png',
	       	onclick: ()=>{
        		this.backHome()
	       	}
       }
    }
},
methods:{
	backHome(){
		this.$emit('backHome')
	}
}

三、显示隐藏切换导致图表太小渲染不及时的解决办法

v-show和v-if的区别
v-show不满足条件的元素会存在在DOM树中,只是style样式上display属性改成none;
v-if不满足条件的元素不会存在在DOM树中;

<template>
	<div>
		<el-button type="info" @click="changeChart">点击切换</el-button>
		<div v-if="type==='01'" id="chart1"></div>
		<div v-if="type==='02'" id="chart2"></div>
	</div>
</template>
export default{
	data(){
		return{
			type:'01'
		}
	},
	methods:{
		changeChart(){
			this.type = this.type==='01' ? '02' :'01'
		},
	}
}

参考链接:https://blog.csdn.net/weixin_43572973/article/details/109678762

这次的分享就到这了,希望我的经验带给你帮助,下次见!
今天也要加油鸭

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值