小程序ucharts层级过高如何解决

文章介绍了在uniapp小程序中,由于canvas组件的层级最高,导致ucharts图表覆盖在弹框之上,影响了交互。解决方案是将canvas在弹框显示时转换为图片,通过v-show切换显示,从而避免层级冲突问题。
摘要由CSDN通过智能技术生成

uniapp小程序ucharts层级过高

  1. 为什么canvas组件总是会在最上层?
    由于canvas组件是原生组件,原生组件的层级是最高的,所以页面中的其他组件无论设置 z-index 为多少,都无法盖在原生组件上
  2. 在页面出现点击事件,存在弹框,ucharts的图层会会出现在弹框上层,ucharts的图层事件会超过弹框事件,导致样式出现问题。
    可以在弹框显示的时候,将ucharts图形,转换称图片的形式显示。
    使用v-show的方式,切换显示。从而不会出现层级的问题。
  3. 部分代码如下,不可以直接运行
<view class="charts-box">
					 <canvas v-show="!BugShow" canvas-id="drawxychartsmonth" id="drawxychartsmonth" class="charts" @touchend="tap"/>
					  <image v-show="BugShow" :src="canvasImg" style="width: 650rpx; height: 300rpx;" />
					</view>
//这里的 750 对应 css .charts 的 width
		this.cWidth = uni.upx2px(600);
		//这里的 500 对应 css .charts 的 height
		this.cHeight = uni.upx2px(300);
 drawCharts(id,data){
		      const ctx = uni.createCanvasContext(id, this);
			  var that=this;
		      uChartsInstance[id] = new uCharts({
		        type: "area",
		        context: ctx,
		        width: this.cWidth,
				canvas2d:true,
				canvasId: id,
		        height: this.cHeight,
		        categories: data.categories,
		        series: data.series,
		        animation: true,
		        background: "#FFFFFF",
				dataLabel:false,
		        color: ["#1890FF","#91CB74","#FAC858","#EE6666","#73C0DE","#3CA272","#FC8452","#9A60B4","#ea7ccc"],
		        padding: [15,0,0,0],
		        legend: {
					show:false,
				},
		        xAxis: {
		          disableGrid: true,
				  boundaryGap:'justify',
				  fontSize:"10",
				  formatter: function (value, index,opts) {
					  if(index=='0' || index==(opts.categories.length-1)){
						return value;  
					  }else{
						  return ""
					  }	
				  },
				  axisLabel: {//x轴文字的配置
				              show: true,
				              interval: 0,//使x轴文字显示全
				             }
		        },
		        yAxis: {
				  type: "value",
		          gridType: "solid",
				  axisTick: {
				              inside: true
				          },
				  scale: true,
				  data:[
					  {
						fontSize:"10",
						formatter: function (value, index,opts) {
							if(that.tipType=="2"){
								 return formatAmount(value, 4)
							}else if(that.ischartsPro){
							  return formatAmount(value, 3) + '%'	
							}else{
								return formatAmount(value, 4)
							}
						}, 
					  }
				  ],
				  axisLabel: {
				         margin: 2,
						 show: true,
				        },
		        },
				grid: { x: 45, y: 20, x2: 16, y2: 8, width: 'auto', height: 'auto', left: '20%' },
		        extra: {
				  tooltip:{
					  showBox:true,
					  showArrow:false,
					  borderRadius:5,
					  fontColor:"#4f9acc",
					  bgOpacity:"1",
					  bgColor:"#ffffff",
					  borderWidth:"1",
					  borderColor:"#7698ad",
					  labelBgColor: "#FFFFFF",
				  },
		          area: {
		            type: "curve",
		            opacity: 0.5,
		            addLine: true,
		            width: 2,
		            gradient: true,
		            activeType: "hollow"
		          },
		        }
		      });
		    },
  tap(e){
			  var that=this;
		      uChartsInstance[e.target.id].touchLegend(e);
		      uChartsInstance[e.target.id].showToolTip(e,{
					formatter: (item, category, index, opts) => {
					  if(that.tipType=="1" && that.ischartsPro){
						return "自定义/"+item.name + ":" + formatAmount(item.data, 3)+ '%' +'/'+'日期'+ ":" +category;
					  }else{
						return "自定义/"+item.name + ":" + formatAmount(item.data, 4) +'/'+'日期'+ ":" +category;
					  }
					
					}
				  });
		    },
// 需要让 弹窗等 出现在canvas上的事件
		handleCanvarToImg() {
		  var that=this;
		  uni.canvasToTempFilePath({
		    x: 0,
		    y: 0,
		    width: 650,
		    height: 300,
		    canvasId: 'drawxychartsmonth',
		    success: function(res) {
		      that.canvasImg=res.tempFilePath;
		    }
		  });
		},```

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值