【微信小程序】阶段开发总结2

news2024/12/27 14:02:00

【微信小程序】阶段开发总结2

《工欲善其事,必先利其器》

banner

一、选择器组件Picker

由于业务需求,需要比较个性化的时间Picker组件和基础Picker组件,便基于微信提供的 picker-view 自行封装了两个Picker组件。

基础Picker:
基础picker
代码示例:

<DefaultPicker pickerInitValue="{{ selectLangIndex }}"
               pickerShown="{{ selectLangShow }}"
               pickerTitle="语言能力"
               pickerArray="{{ selectLangArray }}"
               pickerStatement="title"
               pickerSubStatement="dec"
               pickerAlign="flex-start"
               bind:pickerFinish="selectLangFinish" />

支持传入初始数据、设置标题、指定对象属性、设置文本水平对齐。

当传入pickerArray数据是一个 Array 时,设置 pickerStatement 和 pickerSubStatement 可以分别指定主文本和副文本的渲染对象:

selectLangArray: [
	{
	    id: 1,
	    title: "中文及英文",
	    dec: "国外大学(英语国家)毕业,英文授课,获得学位证。(如为中外联合办学,在中国上课的,不算)",
	}
]

其他样式的picker
日期组件picker,会校验时间大小,需要传入 startTime 字段为初始值:

日期组件picker

二、文件预览

前提条件:后端返回可访问的文件路径给前端,如果是其他格式(二进制流等)就需要用到其他方法。

先判断文件名称后缀,定义一个图片文件后缀数组和视频文件后缀数组,如果正则匹配到了获取到的文件后缀是图片类型或视频类型,则调用 wx.previewImage 或者 wx.previewMedia 这两个 api 去预览。

反之,如果不是图片类型文件,则先将文件下载下来(使用 wx.downloadFile),然后调用 wx.openDocument 这个 api 去打开微信原生的预览页面。

三、文本溢出展开收起

两种方案:1、使用js动态计算;2、使用纯css实现。

我在微信小程序上暂时是使用的js动态计算的方法,因为css实现之后,在真机上会有兼容性问题(在web端反而不会),我也把实现方法贴出来:
CSS实现多行文本溢出隐藏

而js实现的效果也是没有什么问题:
文本展开收起

四、仿Boss直聘企业主页下方浮窗

浮窗的使用场景其实跟上面的picker差不多,但是内容会比picker要更加丰富,使用场景也不再单一,可以适应picker适应不了的场景,例如隐藏唤起、指势滑动唤起隐藏等:

touchPanel
这种touchPanel的组件是按照Boss直聘APP里面的动效来实现的,小程序内不容易直接实现,因此我们就地取材,采用了 movable-view 和 scroll-view 组合从而实现的这个组件。

五、仿Boss直聘个人简介富文本编辑

为什么会有这个组件呢?一开始我们只是使用了微信小程序原生的 editor 组件,但 eidtor 组件会把标签的字符也一并当作字符串传递给后端,导致后端入库爆炸失败,因此又用回原生的 textarea。

editor&textarea
但后续开发我们又有地方需要用到 editor,而且样式差别也不大,索性我们就把 editor、textarea 封装在一起,做成 editor、textarea 两种模式可选的一个编辑器组件。

我们还为我们的需求定制了一块工具栏(toolbar),这也是可选的,如上图所示。

六、Canvas图片裁剪

Canvas 图片裁剪工具,我们一开始也没想要自己开发,因为网上有很多都是现成的组件,直接拿下来用就行了,包括微信官方也有这种裁剪组件。

由于我们的需求是,先把图片走一遍算法,获得图片各种有效文字的区域,然后返回这个区域的点位给前端,前端通过canvas自己去渲染一块深色的有效区域出来。

逛了一圈hub下来之后,没有几个是满足需求的,因此就决定自己搞一个这种组件:

canvas裁剪
简单、实用。

七、使用Canvas的注意事项

我们在小程序中,使用canvas需要注意的点就会比较多,可能有些时候日常的开发并不会遇到,但还是需要了解一下的:

  1. 画布大小问题

canvas元素上有width和height属性,canvas元素的style属性上也有width和height属性,两者要保持一致(1:1),否则会出现canvas元素被拉伸的问题。

  1. 裁剪像素问题

裁剪时的区域要计算好与原图的比例,否则裁剪出的新图片会有像素模糊的问题。

  1. base64问题

在我们canvas中绘画base64图片时,是获取不到base64图片的尺寸的,我们需要先获取base64图片的尺寸,再重新绘制canvas的比例尺寸。否则绘画出来的图片可能会导致canvas元素尺寸太大,形成屏幕触摸滚动,更有可能导致绘画失败。

  1. 没有blob对象

跟上面第3点的情况差不多,当后端返回的文件是二进制流时,我们需要将二进制流转换为图片。微信小程序是没有web的blob对象的,要实现这点很困难,因此我们只能使用微信官方提供的 bufferToBase64 方法去实现。
不过要是图片太大,转换的效率也会很低,这点也是需要注意的。

八、文件缓存系统

微信小程序文件缓存系统

微信小程序的文件缓存机制跟web端完全不同,这也因为是跟微信小程序的底层实现有关,它的本地文件是从调用接口本地产生,或通过网络下载下来,存储到本地的。分别分为:

  • 本地临时文件

本地临时文件只能通过调用特定接口产生,不能直接写入内容。本地临时文件产生后,仅在当前生命周期内保证有效,重启之后不一定可用。如果需要保证在下次启动时无需下载,可通过 FileSystemManager.saveFile() 或 FileSystemManager.copyFile() 接口把本地临时文件转换成本地缓存文件或本地用户文件。
临时文件的清理策略为:小程序退出后系统会检查该小程序的临时文件占用,若不超过2GB则不进行清理,超过上限则以文件为维度按照最近使用时间从远到近进行清理。同时也会检查所有小程序的临时文件占用,若超过6GB则以小程序为维度进行清理。
因此,开发者在下载临时文件时,可先通过FileSystemManager.access()检查该文件是否存在,减少重复文件下载,提升用户体验。

  • 本地缓存文件

本地缓存文件只能通过调用特定接口产生,不能直接写入内容。本地缓存文件产生后,重启之后仍可用。本地缓存文件只能通过 FileSystemManager.saveFile() 接口将本地临时文件保存获得。
缓存文件的清理策略为:跟本地用户文件共计,小程序(含小游戏)最多可存储 200MB,只有在代码包被清理的时会被清理。

  • 本地用户文件

本地用户文件是从 1.7.0 版本开始新增的概念。我们提供了一个用户文件目录给开发者,开发者对这个目录有完全自由的读写权限。通过 wx.env.USER_DATA_PATH 可以获取到这个目录的路径。
缓存文件的清理策略为:跟本地用户文件共计,小程序(含小游戏)最多可存储 200MB,只有在代码包被清理的时会被清理。

九、获取base64图片的尺寸

<image bindload="imgBindload" src="{{base64}}" mode="widthFix"></image>
imgBindload(e) {
	this.data.pdfwidth = e.detail.width
	this.data.pdfHeight = e.detail.height
}

十、组件库

最后,上面所提及的这些组件,我们都把它们集成到一个组件库里面了,过一段时间整理好了将会全部外放出来,敬请期待!

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

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

相关文章

低代码平台这5大选型要素值得参考

伴随低代码的流行&#xff0c;选购低代码成为越来越多人需要面临的挑战。选平台容易&#xff0c;换平台难。不同的企业场景不同&#xff0c;对低代码平台的需求也不一样。因此在做出技术选型时&#xff0c;有五个关键要素需要考虑。 要点1&#xff1a;是否符合自身需求 这是最核…

[JavaWeb]【四】web后端开发-SpringBootWeb入门

目录 一 Spring 二 SpringBootWeb入门 2.1 入门需求 2.2 分析 2.3 开始创建SpringBootWeb 2.4 创建类实现需求 2.5 启动程序 2.6 访问 三 HTTP协议 3.1 HTTP-概述 3.2 HTTP-请求协议 3.3 HTTP-响应协议 3.3.1 响应状态码 && 响应类型 3.4 HTTP-协议解析 前言…

【一】ubuntu20.04上搭建containerd版( 1.2.4 以上)k8s及kuboard V3

k8s 部署全程在超级用户下进行 sudo su本文请根据大纲顺序阅读&#xff01; 一、配置基础环境&#xff08;在全部节点执行&#xff09; 1、安装docker 使用apt安装containerd 新版k8s已经弃用docker转为containerd&#xff0c;如果要将docker改为containerd详见&#xff1a…

6、Mysql免安装版本的配置与使用(2023-08)

1、下载 官网&#xff1a;https://www.mysql.com/downloads/ 点击前往 1.1 官网首页 1.2 首页往下翻&#xff0c;到达下图点击 1.3 选择如图Mysql Cimmunity Server 1.4 选择版本 1.5 点击开始下载 2、安装 2.1 配置环境变量 打开电脑环境变量&#xff0c;在环境变量path中…

抖音矩阵系统源代码部署开发详解

一、引言 抖音矩阵系统是一款基于抖音平台的自动化短视频创作和发布工具。通过对源代码的部署和开发&#xff0c;可以实现大规模、高效率的短视频生产和发布&#xff0c;提高抖音账号的曝光量和关注度。本文将详细介绍抖音矩阵系统源代码的部署和开发过程&#xff0c;帮助读者…

centos安装pandoc

1、首先从官网下载安装包(Release pandoc 3.1.6 jgm/pandoc GitHub) 2、上传到服务器(这里放到 /root目录下了)&#xff0c;进行解压 tar -zxvf pandoc-3.1.6-linux-amd64.tar.gz&#xff0c;解压后的文件 3、然后使用命令 ln -s /root/pandoc-3.1.6/bin/pandoc /usr/bin/p…

JavaScript 进阶 第四天

深浅拷贝异常处理处理this性能优化 一. 深浅拷贝 深浅拷贝只针对引用类型 1.1 浅拷贝 拷贝的是地址常见方法 &#xff08;1&#xff09;拷贝对象&#xff1a;Object.assign() / 展开运算符 {...obj} &#xff08;2&#xff09;拷贝数组&#xff1a;Array.prototype.c…

蓝桥杯每日N题(杨辉三角形)

大家好 我是寸铁 希望这篇题解对你有用&#xff0c;麻烦动动手指点个赞或关注&#xff0c;感谢您的关注 不清楚蓝桥杯考什么的点点下方&#x1f447; 考点秘籍 想背纯享模版的伙伴们点点下方&#x1f447; 蓝桥杯省一你一定不能错过的模板大全(第一期) 蓝桥杯省一你一定不…

Hbase的列式存储到底是什么意思?一篇文章让你彻底明白

一、 HBase 定义 Apache HBase™ 是以 hdfs 为数据存储的&#xff0c;一种分布式、可扩展的 NoSQL 数据库。 二、 HBase 数据模型 HBase 的设计理念依据 Google 的 BigTable 论文&#xff0c;论文中对于数据模型的首句介绍。 Bigtable 是一个稀疏的、分布式的、持久的多维排…

性能优化的重要性

性能优化的重要性 性能优化的重要性摘要引言注意事项代码示例及注释性能优化的重要性 性能优化的重要性在 Java 中的体现响应速度资源利用效率扩展性与可维护性并发性能合理的锁策略线程安全的数据结构并发工具类的应用避免竞态条件和死锁 总结代码示例 博主 默语带您 Go to Ne…

【Java】常用工具——字符串

1. String的创建 String s1 "Katnisss Blog"; String s2 new String(); //空的字符串 String s3 new String("Katnisss Blog");2. String的常用方法 方法解释int length()返回字符串长度int indexOf(char c)返回字符c出现的第一个位置int indexOf(Str…

十、RabbitMQ集群

一、clustering 1、 使用集群的原因 单台RabbitMQ遇到内存崩溃、机器故障等情况会导致服务不可用单台RabbitMQ只能满足每秒1000条的消息吞吐量 2、搭建步骤 1、准备三台虚拟机 2、修改3台机器的主机名称 分别为node1、node2、node3 vi /etc/hostname 3、配置节点的hosts文…

【第三阶段】kotlin语言中的数字安全转换函数(String转Int)

字符串有整形相关的转换&#xff0c;尽量使用toIntOrNull&#xff08;&#xff09;函数 fun main() {//String转Intvar num1"666"println(num1.toInt())//Double不能自动转换为Int,会崩溃&#xff0c;解决崩溃如下&#xff1a;toIntOrNull()如果转换失败会转为nullv…

ATF(TF-A) 威胁模型汇总

安全之安全(security)博客目录导读 目录计划如下&#xff0c;相关内容补充中&#xff0c;待完成后进行超链接&#xff0c;敬请期待&#xff0c;欢迎您的关注 1、通用威胁模型 2、SPMC威胁模型 3、EL3 SPMC威胁模型 4、fvp_r 平台威胁模型 5、RSS-AP接口威胁模型 威胁建模是安全…

290页12万字数字乡村项目规划建设方案WORD

导读&#xff1a;原文《290页12万字数字乡村项目规划建设方案WORD》&#xff08;获取来源见文尾&#xff09;&#xff0c;本文精选其中精华及架构部分&#xff0c;逻辑清晰、内容完整&#xff0c;为快速形成售前方案提供参考。 目录 第一章总体概述1 1.1.建设背景1 1.1.1.数…

马斯克又出昏招、最疯狂的举动之一

马斯克正在限制他不喜欢的新闻网站和竞争对手的流量。在 X&#xff08;原 Twitter&#xff09;上点击纽约时报、路透社、Facebook、Instagram、Threads、Bluesky 和 Substack 的链接&#xff0c;X 故意增加 5 秒钟的开启延迟。 5 秒延迟&#xff0c;新的降权举措&#xff1f; …

VisualStudio打包项目文件为.exe安装包

前言&#xff1a; 使用扩展&#xff1a;install Projects 注意事项&#xff1a;打包项目前&#xff0c;确保项目能正常运行&#xff0c;不然打包毫无意义。 一、安装扩展 打开vs软件->扩展->管理扩展->搜索install Projects->安装->重启软件 二、制作安装包&a…

抖音小程序SEO关键词布局开发文档

一、概述 抖音小程序SEO关键词布局是指在小程序中合理地安排关键词&#xff0c;以提高小程序的搜索排名和用户流量。本开发文档旨在提供关于抖音小程序SEO关键词布局的指导&#xff0c;帮助开发者有效实施关键词布局策略。 二、数据分析 在实施抖音小程序SEO关键词布局之前&a…

SOLIDWORKS镜向是什么?

在现代工程设计中&#xff0c;使用CAD软件是必不可少的。SOLIDWORKS作为一款功能强大的三维建模软件&#xff0c;提供了众多的工具和功能&#xff0c;帮助工程师以更高的效率进行设计。其中&#xff0c;SOLIDWORKS 镜向功能被广泛应用于设计过程中&#xff0c;为用户带来了许多…

园艺照明设备植物生长灯UL8800亚马逊美国站审核标准

美国是一个对安全要求非常严格的国家&#xff0c;美国本土的所有电子产品生产企业早在很多年前就要求有相关安规检测。而随着亚马逊在全球商业的战略地位不断提高&#xff0c;境外的电子设备通过亚马逊不断涌入美国市场&#xff0c;美国对境外的电子产品生产企业并没有强制性的…