uniapp开发小程序中因uchart的canvas层级过高遮盖uni-datetime-picker组件的解决办法

这篇具有很好参考价值的文章主要介绍了uniapp开发小程序中因uchart的canvas层级过高遮盖uni-datetime-picker组件的解决办法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

bug描述

页面需要展示一个环形图,可以按时间段筛选数据,所以我用了uchartuni-datetime-picker组件。
uniapp开发小程序中因uchart的canvas层级过高遮盖uni-datetime-picker组件的解决办法

但uchart用到了canvas,其层级过高,当实机运行小程序时会遮盖弹出的uni-datetime-picker组件
uniapp开发小程序中因uchart的canvas层级过高遮盖uni-datetime-picker组件的解决办法

解决办法

当uni-datetime-picker组件弹出遮罩时,把canvas移到用户视野之外。

uni-datetime-picker组件本质就是普通的vue组件,进入uni-modules寻找uni-datetime-picker组件的代码,通过监听控制uni-datetime-picker组件弹出收回的属性控制canvas是否移出用户视野之外。
几经查找,选择监控uni-datetime-picker组件下的calendar组件的show属性,因为实验监控uni-datetime-picker的popup属性无法实现效果,所以找更靠谱的孙组件calendar,又因为我的uni-app版本不支持 $listen,所以被迫让中间的uni-datetime-picker中转 $emit,最终最上层自己写的组件就可以监听uni-datetime-picker的显示隐藏了。

在calendar组件里找到的控制台历显示的show属性
watch: {
			// 自己添加的控制爷组件canvas显隐的监视方法,以解决canvas层级过高问题
			show: {
				handler(newVal, oldVal) {
					if (this.show) {
						this.$emit('closeCanvas');
					}else {
						this.$emit('showCanvas');
					}
				}
			},
		}
在uni-datetime-picker组件里找到每一个用到calendar组件的地方加上自定义事件(closeCanvas,showCanvas)监听
<calendar ref="pcSingle" :showMonth="false"
	:start-date="caleRange.startDate" :end-date="caleRange.endDate" :date="defSingleDate"
	@change="singleChange" style="padding: 0 8px;" @closeCanvas="closeCanvas" @showCanvas="showCanvas"/>
<view class="popup-x-body">
	<calendar ref="left" :showMonth="false"
		:start-date="caleRange.startDate" :end-date="caleRange.endDate" :range="true"
		@change="leftChange" :pleStatus="endMultipleStatus" @firstEnterCale="updateRightCale"
		@monthSwitch="leftMonthSwitch" style="padding: 0 8px;" @closeCanvas="closeCanvas" @showCanvas="showCanvas"/>
	<calendar ref="right" :showMonth="false"
		:start-date="caleRange.startDate" :end-date="caleRange.endDate" :range="true"
		@change="rightChange" :pleStatus="startMultipleStatus" @firstEnterCale="updateLeftCale"
		@monthSwitch="rightMonthSwitch" style="padding: 0 8px;border-left: 1px solid #F1F1F1;" @closeCanvas="closeCanvas" @showCanvas="showCanvas"/>
</view>
<calendar v-show="isPhone" ref="mobile" :clearDate="false" :date="defSingleDate" :defTime="reactMobDefTime"
	:start-date="caleRange.startDate" :end-date="caleRange.endDate" :selectableTimes="mobSelectableTime"
	:pleStatus="endMultipleStatus" :showMonth="false" :range="isRange" :typeHasTime="hasTime" :insert="false"
	:hideSecond="hideSecond" @confirm="mobileChange" @closeCanvas="closeCanvas" @showCanvas="showCanvas"/>
uni-datetime-picker方法写上中转监听方法
// 监听calendar的触发,然后再向上传递
methods: {
	closeCanvas() {
		this.$emit('closeCanvas');
	},
	showCanvas() {
		this.$emit('showCanvas');
	}
}
在自己的组件用到uni-datetime-picker的地方也加上监听
<view class="datetime-picker-wrap">
	<uni-datetime-picker v-model="dateRange" type="daterange" rangeSeparator=""
		@change="dateRangeChange" @closeCanvas="closeCanvas" @showCanvas="showCanvas"/>
</view>

监听到组件的显示隐藏就好办了,写一个让canvas水平移出外面的样式,uni-datetime-picker组件弹出就加上样式,收回就去掉样式即可。

动态加上移出视野的样式代码
<view class="card-box">
	<view class="card-title-box remove-border">
		<view class="card-title title-text">食品安全检测数据统计</view>
	</view>
	<view class="card-content-box">
		<checkRingChart v-if="!isEmpty" class="check-ring-box" :class="hiddenCanvas ? 'hidden-canvas' : ''" :chartData="chartData" :title="title"
			:subtitle="subtitle" :color="color"></checkRingChart>
		<view v-if="isEmpty" class="empty-box-wrap">
			<view class="empty-box">
				<view class="empty-img"></view>
				<view class="empty-title">暂无数据</view>
			</view>
		</view>
	</view>
</view>
data() {
	return {
		hiddenCanvas: false
	};
},
methods: {
	closeCanvas() {
		this.hiddenCanvas = true;
	},
	showCanvas() {
		this.hiddenCanvas = false;
	}
}
.hidden-canvas {
	transform: translateX(200%);
}
大功告成

uniapp开发小程序中因uchart的canvas层级过高遮盖uni-datetime-picker组件的解决办法
可以看到canvas图表在弹出框后被移走文章来源地址https://www.toymoban.com/news/detail-411006.html

到了这里,关于uniapp开发小程序中因uchart的canvas层级过高遮盖uni-datetime-picker组件的解决办法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • uniapp-app视频层级过高问题

    使用v-html动态渲染 参考:uniapp video app端层级过高的问题,滑动渲染问题。_video在app端层级过高-CSDN博客 有想过使用原生,但是太麻烦了,然后换成了弹窗播放,但是动态的src播放失败,错误提示: chunk-vendors.js:14882 Uncaught (in promise) DOMException: The element has no supported sources.  

    2024年01月21日
    浏览(62)
  • uniapp video(倍速功能、层级过高、视频第一帧做封面 等问题)

             由于上次写video组件的问题,过于划水,没讲清楚,导致自己花费了很多时间,重新踩坑,对自己很抱歉。 效果图如下:倍速的显示和隐藏,需在全屏的时候 和 显示控制组件时 代码逻辑 1. 实现倍速的核心是创建视频组件控制器,调用它的倍速方法 =》官方文档

    2024年02月08日
    浏览(41)
  • video层级过高,以及界面使用多个video时,在安卓APP上同时播放的问题(uniapp)

    问题一 : 我的界面由于是自定义导航栏,所以使用video时,上滑界面video会直在最上层,盖着  头部导航栏 解决方法 :使用cover-view,自定义头部使用cover-view替换view 问题二 :自定义导航栏上面有menu,点击会出现一个弹出层,但是弹出层会被video压到 解决方法 :使用原生窗体

    2024年02月06日
    浏览(44)
  • 解决微信小程序Echarts图表层级过高的方案

    在微信小程序中使用Echarts图表时,有时会遇到图表层级过高的问题。这可能导致图表无法正常显示或部分内容被遮挡。本文将介绍一种解决方案,通过修改Echarts图表的样式和配置,可以有效解决这个问题。 解决方案如下: 检查图表容器的样式 首先,我们需要检查图表容器

    2024年02月03日
    浏览(44)
  • 小程序 wxchart 折线图层级过高滑动遮档标题栏

    问题描述 : 标题栏背景色是渐变的,折线图用wxchart,滑动的时候标题栏被线图遮档。 分析: wxcharts是使用了canvas, 属性原来的组件,不是小程序自己的组件。 所以canvas层级权限是最高的,view不能盖在canvas上面。那么折线图就会盖在标题栏上面。 参考小程序: cover-view

    2024年02月15日
    浏览(59)
  • 微信小程序canvas层级太高,与其他非原生组件层级冲突

     官网已经提出新版本以支持同层渲染,但是实际项目中层级还是冲突的。  最后在文档中找到这样一段话,用真机打开,层级就正常了 。所以建议大家,多使用真机调试去测试!!!!

    2024年02月11日
    浏览(45)
  • 【微信小程序】解决canvas组件层级最高问题

    1、为什么canvas组件总是会在最上层? 因为canvas组件是由客户端创建的原生组件, 原生组件层级是最高的 ,所以页面中的其他组件无论设置 z-index 为多少都无法盖在原生组件上 。 2、如何解决canvas层级最高问题?                                                    wx

    2024年02月11日
    浏览(47)
  • uniapp微信小程序中基于ucharts的柱状图示例

    详细介绍请详读-ucharts官网

    2024年02月03日
    浏览(33)
  • uniapp小程序ucharts点击穿透和点击位置偏移解决方案

    加上这些,完美解决 问题如标题,解决办法是在微信小程序中添加 inScrollView=\\\"true\\\"属性。 另说明:canvas2d=\\\"true\\\"作用,开启canvas2d渲染模式,需要与canvas-id=\\\"xxx\\\" 一起使用。 如不开启会存在图表层级过高,不跟随页面滑动等问题。

    2024年02月16日
    浏览(64)
  • uniapp web-view页面层级过高,想在web-view上层再加入按钮,采用plus.nativeObj.View实现。动态创建web-view解决切换src后丢失背景问题。

    需求 :有两个web-view页面,需要添加按钮,动态切换web-view的src进行页面切换 问题 :uniapp的web-view层级很高,通过positon的z-index无法将其他元素置于web-view页面上层 解决方式 :采用底层组件plus.nativeObj.View创建视图,该视图比web-view层级高,可在web-view上层添加 按钮,图片,矩

    2024年02月11日
    浏览(76)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包