微信小程序 canvas层级过高覆盖原生组件

news2024/11/29 2:38:42

一、背景

微信小程序中使用signature第三方插件完成签名效果,但真机调试时发现canvas层级过高遮挡了按钮

二、具体问题

问题原因:签名后点击按钮无法生效

问题代码:

<template>
  <view class="sign_page" v-cloak>
    <view class="sign_body">
      <view class="cover">
        <view class="cover_text"
          :style="'transform: rotate( '+ rotate + 'deg);text-shadow: 10rpx 10rpx 5rpx ' + font_color+ ';'">{{uname}}
        </view>
      </view>
      <canvas class="sign_canvas" disable-scroll="true" canvas-id="handWriting"
        :style="bgImg ? 'background: url(' + bgImg + ');background-size:100% 100%;' : ''"
        @touchstart.stop="handWritingStart" @touchmove.stop="handWritingMove" @touchend.stop="handWritingEnd"></canvas>
    </view>
    <view class="sign_footer" :class="{'rotate': rotate == 90}">
      <view class="btn" @click="retDraw">清除</view>
      <view class="btn" @click="exportImg">确认</view>
    </view>
  </view>
</template>

真机调试效果:

说明:

canvas层级过高,遮住了按钮,签字后点击确认或清除按钮都无法触发选中事件

三、问题分析

在小程序中,canvas组件是由客户端创建的原生组件,原生组件层级是最高的。所以在页面中即使将 Z-index 设置很高都无法盖在canvas组件上

四、解决方法

该问题我想到了两种解决方法

方法1:将画布和按钮按需分配视图比例

原代码画布和按钮的宽度都为100%,将画布和按钮按需分配视图比例,如画布占页面的75%,按钮占页面的25%,解决画布遮挡按钮问题

方法2:使用 cover-view 实现覆盖

将需要覆盖在 Canvas 上的元素使用 cover-view 组件包裹起来,cover-view 可以覆盖在 Canvas 上方显示。

cover-view 可覆盖的原生组件包括 map、video、canvas、camera、live-player、live-pusher

小程序官方文档地址:cover-view | 微信开放文档

改造代码:

<template>
  <view class="sign_page" v-cloak>
    <view class="sign_body">
      <view class="cover">
        <view class="cover_text"
          :style="'transform: rotate( '+ rotate + 'deg);text-shadow: 10rpx 10rpx 5rpx ' + font_color+ ';'">{{uname}}
        </view>
      </view>
      <canvas class="sign_canvas" disable-scroll="true" canvas-id="handWriting"
        :style="bgImg ? 'background: url(' + bgImg + ');background-size:100% 100%;' : ''"
        @touchstart.stop="handWritingStart" @touchmove.stop="handWritingMove" @touchend.stop="handWritingEnd"></canvas>
    </view>
	<cover-view class="sign_footer" :class="{'rotate': rotate == 90}">
		<cover-view class="btn" @click="retDraw">清除</cover-view>
		<cover-view class="btn" @click="exportImg">确认</cover-view>
	</cover-view>
  </view>
</template>

css样式增加z-index解决兼容安卓机失效问题 

    .sign_footer {
      flex-shrink: 0;
      width: 100%;
      box-sizing: border-box;
      display: flex;
      justify-content: space-between;
	  align-items: center;
      position: fixed;
      bottom: 30rpx;
      left: 0;
      height: 170rpx;
	  line-height: 170rpx;
	  z-index: 999;

      &.rotate {
        transform: rotate(90deg);
        bottom: 200rpx;
        left: -124rpx;
        width: 400rpx;
      }

      .btn {
        width: 150rpx;
        background: #0eb543;
        border-radius: 30rpx;
		text-align: center;
        color: #fff;
		padding: 25rpx 0;

        &:nth-child(1) {
          background-color: #c3c3c3;
          color: #000000;
        }
      }
    }

最终实现效果:无论签名文字书写的有多长,按钮都是在画布之上,签名完可以点击按钮触发事件

 最后:👏👏😊😊😊👍👍 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1529972.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

nodejs基于vue超市信息管理系统flask-django-php

互联网的快速发展&#xff0c;使世界各地的各种组织的管理方式发生了根本性的变化&#xff0c;我国政府、企业等组织在上个世纪90年代就已开始考虑使用互联网来管理信息。由于以前的种种因素&#xff0c;比如网络的普及率不高&#xff0c;用户对它的认知度不够&#xff0c;以及…

计算机网络:数据交换方式

计算机网络&#xff1a;数据交换方式 电路交换分组交换报文交换传输对比 本博客介绍计算机之间数据交换的三种方式&#xff0c;分别是电路交换、分组交换以及报文交换。 电路交换 我们首先来看电路交换&#xff0c;在电话问世后不久&#xff0c;人们就发现要让所有的电话机都…

基于Spring Boot网络相册设计与实现

摘 要 网络相册设计与实现的目的是让使用者可以更方便的将人、设备和场景更立体的连接在一起。能让用户以更科幻的方式使用产品&#xff0c;体验高科技时代带给人们的方便&#xff0c;同时也能让用户体会到与以往常规产品不同的体验风格。 与安卓&#xff0c;iOS相比较起来&am…

【OCR】OCR开源文字识别工具

在日常的工作中&#xff0c;例如自动化测试开展时&#xff0c;经常涉及到一些验证码识别、文本识别、图像识别的场景&#xff0c;市面上虽也有很多识别工具&#xff0c;但质量、准确性参差不齐。 今天给大家推荐一个开源OCR项目:Umi-OCR&#xff0c;功能很强大&#xff0c;而且…

jquery 列表框可以手动修改(调用接口修改)

类似于这种 直接上代码 列表框 <td>//目的主要是获取属性名的(要更改的属性名) 在下面juqery的这一行(var field $(thisobj).prev(input).attr(name);)有体现<input type"hidden" name"voyage" value"${M_PSI_PERIOD_INFO.port}">…

Vulnhub - Hacker_Kid

希望和各位大佬一起学习&#xff0c;如果文章内容有错请多多指正&#xff0c;谢谢&#xff01; 个人博客链接&#xff1a;CH4SER的个人BLOG – Welcome To Ch4sers Blog Hacker_Kid 靶机下载地址&#xff1a;https://www.vulnhub.com/entry/hacker-kid-101,719/ WP 参考&…

路由器里如何设置端口映射?

在互联网时代&#xff0c;我们经常需要将内部网络的服务暴露到公网以便其他人访问。直接将内部网络暴露在公网上存在一定的安全风险。为了解决这个问题&#xff0c;我们可以利用路由器里设置端口映射来实现将特定端口的访问请求转发到内部网络的特定设备上。 端口映射的原理 端…

机器人离散化阻抗控制

机器人离散化阻抗控制是一种控制策略&#xff0c;它结合了阻抗控制的思想与离散化方法&#xff0c;以实现对机器人运动与外力之间动态关系的精细调节。这种控制方法旨在使机器人在与环境交互时能够表现出期望的阻抗特性&#xff0c;从而实现对接触力和位置的精确控制。 在离散…

AnyGo for Mac最新激活版:位置模拟软件打破地域限制

AnyGo for Mac&#xff0c;一款专为Mac用户打造的位置模拟软件&#xff0c;让您能够轻松打破地域限制&#xff0c;畅享无限可能。 软件下载&#xff1a;AnyGo for Mac v7.0.0最新激活版 通过AnyGo&#xff0c;您可以随时随地模拟出任何地理位置&#xff0c;无论是国内热门景点还…

轻松解锁微博视频:基于Perl的下载解决方案

引言 随着微博成为中国最受欢迎的社交平台之一&#xff0c;其内容已经变得丰富多彩&#xff0c;特别是视频内容吸引了大量用户的关注。然而&#xff0c;尽管用户对微博上的视频内容感兴趣&#xff0c;但却面临着无法直接下载这些视频的难题。本文旨在介绍一个基于Perl的解决方…

3D开发工具HOOPS如何助力3D项目实现扩展现实技术?

在当今数字化时代&#xff0c;扩展现实&#xff08;Augmented Reality&#xff0c;AR&#xff09;技术的应用已经逐渐深入到各行各业&#xff0c;为用户带来了前所未有的沉浸式体验。而在实现这种技术的开发过程中&#xff0c;HOOPS技术的运用无疑是一种强大的助力。HOOPS是一种…

WPF按钮相关

跟着官网敲的按钮相关的内容,还涉及了wpf很多其他的知识 1.创建基本按钮 <Grid><StackPanel HorizontalAlignment"Left"><Button>Button1</Button><Button>Button2</Button><Button>Button3</Button></StackPan…

WebMvcConfigurationSupport 注册自定义拦截器 Java SpringBoot

WebMvcConfigurationSupport 注册自定义拦截器 Java SpringBoot 说明 定义拦截器 拦截器&#xff08;Interceptor&#xff09;类&#xff0c;用于在处理请求之前进行一些操作。 实现方式&#xff0c;让类实现HandlerInterceptor。 在preHandle方法中进行请求拦截的逻辑操作…

海外社交营销为什么用云手机?不用普通手机?

海外社交营销作为企业拓展海外市场的重要手段&#xff0c;正日益受到企业的青睐。云手机以其成本效益和全球性特征&#xff0c;成为海外社交营销领域的得力助手。那么&#xff0c;究竟是什么特性使得越来越多的企业选择利用云手机进行海外社交营销呢&#xff1f;下文将对此进行…

31-Java前端控制器模式(Front Controller Pattern)

Java前端控制器模式 实现范例 前端控制器模式&#xff08;Front Controller Pattern&#xff09;是用来提供一个集中的请求处理机制&#xff0c;所有的请求都将由一个单一的处理程序处理该处理程序可以做认证/授权/记录日志&#xff0c;或者跟踪请求&#xff0c;然后把请求传给…

32位ARM微控制器: TLE9877QTW40XUMA1、CY9BF416NPMC-G-JNE2、CY9BF316NPMC-G-JNE2描述、器件参数

1、TLE9877QTW40 IC MCU 32BIT 64KB FLASH 48TQFP 描述&#xff1a;TLE9877QTW40属于TLE987x产品系列。TLE9877QTW40是一款单芯片三相电机驱动器&#xff0c;集成了行业标准的Arm Cortex -M3内核&#xff0c;能够实现先进的电机控制算法&#xff0c;例如磁场定向控制。它包括六…

使用 ArcGIS Pro 和 Google Earth Engine 可视化地表温度

在这项研究中,利用 Landsat 热数据通过各种方法检查了 2013 年和 2023 年恰纳卡莱省的地表温度变化。使用了 NDVI、大气层顶部、亮度温度、植被比例和地表温度等公式。研究结果表明,从热图像中获得的数据,特别是地表温度(LST),是土地解释的重要资源。 研究区域:恰纳卡莱…

Android14之selinux报错:ERROR: end of file in comment(一百九十七)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

NLP---Bert分词

目录&#xff1a; Q&#xff1a;bert分词步骤1&#xff1a;构建N * N 的相关性矩阵&#xff0c;计算相邻两个字的相关性&#xff0c;低的话&#xff08;<阈值&#xff09;就切割。2&#xff1a;将A词进行mask计算出A的embedding&#xff0c;然后将AB两个词一起mask&#xff…

力扣日记3.19-【贪心算法篇】55. 跳跃游戏

力扣日记&#xff1a;【贪心算法篇】55. 跳跃游戏 日期&#xff1a;2024.3.19 参考&#xff1a;代码随想录、力扣 55. 跳跃游戏 题目描述 难度&#xff1a;中等 给你一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃…