当前位置: 首页 > news >正文

66.Harmonyos NEXT 图片预览组件使用指南

温馨提示:本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦!

Harmonyos NEXT 图片预览组件使用指南

文章目录

  • Harmonyos NEXT 图片预览组件使用指南
    • 效果预览
    • 一、组件使用概述
      • 1. 组件功能特点
      • 2. 组件依赖关系
    • 二、基本使用方法
      • 1. 引入组件
      • 2. 准备图片数据
      • 3. 使用组件
    • 三、组件参数说明
      • 1. PicturePreview组件参数
      • 2. 内部状态说明
    • 四、使用示例
      • 1. 基本示例
      • 2. 网络图片示例
      • 3. 垂直滑动示例
    • 五、交互操作说明
      • 1. 图片缩放
      • 2. 图片旋转
      • 3. 图片拖动
      • 4. 图片切换
      • 5. 背景切换
    • 六、性能优化建议
      • 1. 图片资源优化
      • 2. 懒加载配置
      • 3. 内存管理
    • 七、常见问题解答
      • 1. 图片加载失败怎么处理?
      • 2. 如何自定义图片预览的背景色?
      • 3. 如何实现更多的手势操作?
    • 八、总结

效果预览

一、组件使用概述

图片预览组件是一个功能完善的图片查看器,支持图片的缩放、旋转、滑动切换等功能。本文将详细介绍如何在HarmonyOS应用中集成和使用图片预览组件,帮助开发者快速实现高质量的图片预览功能。

1. 组件功能特点

功能说明实现方式
图片缩放支持双指缩放和双击缩放PinchGesture和TapGesture
图片旋转支持双指旋转,自动对齐到90度倍数RotationGesture
图片拖动支持单指拖动,边界约束PanGesture
图片切换支持水平和垂直方向滑动切换List和ListScroller
懒加载支持图片的懒加载,提高性能CommonLazyDataSourceModel

2. 组件依赖关系

使用图片预览组件需要以下依赖:

  • 组件文件:PicturePreview.ets、PicturePreviewImage.ets
  • 数据模型:ScaleModel.ets、RotateModel.ets、OffsetModel.ets、CommonLazyDataSourceModel.ets
  • 工具类:Constrain.ets、FuncUtils.ets、Managers.ets
  • 常量定义:ImageViewerConstants.ets

二、基本使用方法

1. 引入组件

import { PicturePreview } from "../../components/ImagePreview/PicturePreview";

2. 准备图片数据

@State imageList: string[] = [];aboutToAppear(): void {let imageSource: string = $r("app.media.02") as ESObject;this.imageList.push(imageSource,imageSource,imageSource)
}

3. 使用组件

build() {RelativeContainer() {PicturePreview({ imageList: this.imageList, listDirection: Axis.Horizontal })}.height('100%').width('100%')
}

三、组件参数说明

1. PicturePreview组件参数

参数名类型默认值说明
imageListstring[]必填图片数据列表,支持资源引用和网络URL
listDirectionAxisAxis.Vertical图片预览的主轴方向,支持水平和垂直滑动

2. 内部状态说明

状态名类型说明
listBGColorColor背景颜色,点击可切换黑白背景
lazyImageListCommonLazyDataSourceModel图片懒加载数据源
listIndexnumber当前视图下标
listMaxLengthnumber图片数量

四、使用示例

1. 基本示例

@Entry
@Component
struct PicturePreviewSample {@State imageList: string[] = [];@State listDirection: Axis = Axis.Horizontal;aboutToAppear(): void {let imageSource: string = $r("app.media.02") as ESObject;this.imageList.push(imageSource,imageSource,imageSource)}build() {RelativeContainer() {PicturePreview({ imageList: this.imageList, listDirection: this.listDirection })}.height('100%').width('100%')}
}

2. 网络图片示例

@Entry
@Component
struct PicturePreviewNetworkSample {@State imageList: string[] = [];@State listDirection: Axis = Axis.Horizontal;aboutToAppear(): void {// 添加网络图片URLthis.imageList.push("https://example.com/image1.jpg","https://example.com/image2.jpg","https://example.com/image3.jpg")}build() {RelativeContainer() {PicturePreview({ imageList: this.imageList, listDirection: this.listDirection })}.height('100%').width('100%')}
}

3. 垂直滑动示例

@Entry
@Component
struct PicturePreviewVerticalSample {@State imageList: string[] = [];@State listDirection: Axis = Axis.Vertical; // 设置为垂直滑动aboutToAppear(): void {let imageSource: string = $r("app.media.02") as ESObject;this.imageList.push(imageSource,imageSource,imageSource)}build() {RelativeContainer() {PicturePreview({ imageList: this.imageList, listDirection: this.listDirection })}.height('100%').width('100%')}
}

五、交互操作说明

1. 图片缩放

  • 双指缩放:使用两指捏合或分开可缩小或放大图片
  • 双击缩放:双击图片可在默认大小和适配屏幕大小之间切换

2. 图片旋转

  • 双指旋转:使用两指旋转可旋转图片,释放后会自动对齐到最接近的90度角

3. 图片拖动

  • 单指拖动:使用单指可拖动图片,当图片放大时可查看图片的不同区域
  • 边界约束:图片不会被完全拖出视口范围

4. 图片切换

  • 滑动切换:当图片处于默认大小时,可通过滑动切换到上一张或下一张图片
  • 预览效果:滑动到边缘时会显示下一张图片的预览

5. 背景切换

  • 点击切换:点击图片区域可在黑色和白色背景之间切换

六、性能优化建议

1. 图片资源优化

  • 使用适当分辨率的图片,避免过大的图片资源
  • 考虑使用图片压缩和格式转换,减少图片大小

2. 懒加载配置

图片预览组件默认使用懒加载机制,但在使用大量图片时,可以考虑以下优化:

  • 控制一次性加载的图片数量
  • 预加载当前图片的前后几张图片

3. 内存管理

  • 在不需要预览时,及时释放图片资源
  • 监控内存使用情况,避免内存泄漏

七、常见问题解答

1. 图片加载失败怎么处理?

组件目前没有内置的加载失败处理机制,建议在传入图片URL前进行验证,或者添加自定义的错误处理逻辑。

2. 如何自定义图片预览的背景色?

组件内部使用listBGColor状态管理背景色,默认提供黑白背景切换。如需自定义,可以修改PicturePreview组件中的相关代码。

3. 如何实现更多的手势操作?

如需添加更多手势操作,可以在PicturePreviewImage组件中的gesture部分添加新的手势识别和处理逻辑。

八、总结

图片预览组件提供了丰富的图片查看和交互功能,通过简单的配置即可快速集成到应用中。组件的核心优势包括:

  1. 完善的手势支持,提供自然流畅的交互体验
  2. 灵活的布局配置,支持水平和垂直方向的图片切换
  3. 高性能的实现,使用懒加载和矩阵变换优化性能
  4. 良好的扩展性,可根据需求进行定制和扩展

通过本文的介绍,开发者可以快速掌握图片预览组件的使用方法,实现高质量的图片预览功能。

相关文章:

66.Harmonyos NEXT 图片预览组件使用指南

温馨提示:本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦! Harmonyos NEXT 图片预览组件使用指南 文章目录 Harmonyos NEXT 图片预览组件使用指南效果预览一、组件使用概述1. 组件功能特点2. 组件依赖关系 二…...

linux系统安装和激活conda

安装 wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.shbash ./Miniconda3-latest-Linux-x86_64.sh回车到最后按照输入yes,之后按提示操作。 激活 conda activate如果没有反应或者返回: bash: conda: command not found则…...

Java 集合框架大师课:集合框架的暗黑料理(六)

🔮Java 集合框架大师课:集合框架的暗黑料理(六)——弱引用与幽灵队列 第一章 弱引用:Java世界的塑料兄弟情 💔 四大引用类型生死簿 // 四类引用生死实验 Object strongObj new Object(); …...

LVI-SAM、VINS-Mono、LIO-SAM算法的阅读参考和m2dgr数据集上的复现(留作学习使用)

ROS一键安装参考: ROS的最简单安装——鱼香一键安装_鱼香ros一键安装-CSDN博客 opencv官网下载4.2.0参考:https://opencv.org/releases/page/3/ nvidia驱动安装:ubuntu18.04 安装显卡驱动 - 开始战斗 - 博客园 cuda搭配使用12 cuda安装1:Ub…...

京鲁医疗健康专家委员会聊城专家团成立

3月13日由京鲁医疗健康专家委员会指导,聊城市委人才工作领导小组办公室、聊城市卫生健康委员会、聊城市人才引进服务中心主办的"智链医脉.新启未来"聊城卫生健康产才共融发展交流会在北京人卫酒店召开。会上,京鲁医疗健康专家委员会…...

MySQL的事务机制

事务 事务概念:事务是一个完整的操作单元,不可分割,事务中的操作要么全部成功,要么全部失败。 1. 事务特性 ACID 1.1 原子性(A) 一个事务中所有操作是不能被分割的,要么所有的操作都成功&am…...

30、Vuex 为啥可以进行缓存处理

Vuex 状态管理基础与缓存的关联 Vuex 的核心概念: Vuex 主要由五个部分组成:state、mutations、actions、getters和modules。其中,state是存储数据的地方,类似于一个全局的数据仓库。在这个菜谱 APP 的例子中,缓存的数…...

OpenAI Agents SDK 中文文档 中文教程 (5)

英文文档原文详见 OpenAI Agents SDKhttps://openai.github.io/openai-agents-python/ 本文是OpenAI-agents-sdk-python使用翻译软件翻译后的中文文档/教程。分多个帖子发布,帖子的目录如下: (1) OpenAI 代理 SDK, 介绍及快速入门 (2)Open…...

如何处理PHP中的文件上传错误

如何处理PHP中的文件上传错误 在Web开发中,文件上传是一个常见的功能需求。然而,文件上传过程中可能会遇到各种错误,如文件大小超出限制、文件类型不被允许、上传过程中断等。为了确保用户能够顺利上传文件,并且开发者能够有效地…...

mac安装python没有环境变量怎么办?zsh: command not found: python

在mac电脑上,下载Python安装包进行安装之后,在终端中,输入python提示: zsh: command not found: python 一、原因分析 首先,这个问题不是因为python没有安装成功的原因,是因为python安装的时候,没有为我们添加环境变量导致的,所以我们只需要,在.zshrc配置文件中加上环…...

湿大气校正效应

目的 修正由于大气中的水汽对雷达波传播速度的影响,以提高海面高度测量的准确性,有时候也叫做对流层校正。水汽的时空变化复杂,难以直接通过气象模型准确预测。水汽的折射作用使雷达信号的传播速度减慢,从而导致测量的海面高度虚增…...

算法系列之回溯算法求解数独及所有可能解

有没有对数独感兴趣的朋友呢?数独作为一款经典的逻辑游戏,其目标是在一个9x9的方格中填入数字1至9,确保每一行、每一列以及每一个3x3的子网格中都包含这些数字且不重复。尽管数独的规则看似简单,但编写一个能够自动求解数独的程序…...

动态路径规划——01背包问题讲解和通过滚动数组优化

如果没有动态路径规划基础的兄弟可以出去了,这个题目有两个问题 第一问讲解: 1.定义状态表示 刚开始我做的时候根据我的经验定义了一个状态表示dp[i]表示从1到i个物品中选择的最大价值,但是这个状态表示有一个明显的问题,我怎么知…...

蓝队基本技能 web入侵指南 日志分析 后门查杀 流量分析

前言 为了赶工我是没学过红队的,首先我们要做的是 1、拿到用户给的web的时候 要先知道 web的源码 服务器 中间件 数据库这些信息 2、知道web日志放在哪里 会一些基本的分析 3、webshell查杀的基本技能 4、会分析基本的工具链 会写报告 .NET IIS 配置…...

docker基本应用和相关指令

文章目录 概要镜像管理容器操作网络管理数据卷管理其他常用指令典型场景示例小结 概要 Docker的命令通常分为几个大类,比如镜像管理(images)、容器管理(containers)、网络(network)、数据卷&…...

Django REST Framework中的序列化器类和视图类

序列化器类 一、Serializer序列化类 Serializer是DRF的序列化器基类,提供基本功能,使用Serializer类需要自己定义字段名称和类型。 BookSerializer(Serializer):name serializers.CharField()price serlializers.IntegerField()date serlializers.…...

模拟人生4大型MOD整合包3000+

存档介绍 (懒人萌新必备) 游戏内全面的人物美化、房屋改造、地图美化 美化人物250个(颜值在线,均搭配八套服饰) 全地图房屋改造(住宅、公寓、公用/商业地段等) 游戏内22张地图均已美化替换 存档…...

算法基础 -- Brian Kernighan 算法初识

Brian Kernighan 算法:利用 x & (x - 1) 逐步清除最低位的 1 1. 算法原理 x & (x - 1) 这个操作的作用是每次清除 x 的最低位的 1。由于 二进制的减法 会影响最低的 1,我们可以利用这一特性不断去除 1,直到 x 变为 0,从…...

基于Uniapp开发tab选项卡/标签栏前端组件

在开发一些业务场景时候&#xff0c;可能需要切换标签栏来展示不同的信息列表。 为此开发了一个Uniapp组件&#xff08;myTab&#xff09;&#xff0c;下面为组件的展示效果&#xff1a; 案例代码&#xff1a; <template><view class"content"><myt…...

双向广搜

从两侧同时展开,那测数据少就从哪侧展,两者展开结果出现一样的,返回答案 127. 单词接龙 - 力扣&#xff08;LeetCode&#xff09; class Solution { public:int ladderLength(string beginWord, string endWord, vector<string>& wordList) {unordered_set<stri…...

2024下半年真题 系统架构设计师 论文写作 答案解析

系统架构设计师第二版VIP课程https://edu.csdn.net/course/detail/40283 试题一 论软件维护及其应用 请围绕“论软件维护及其应用”论题&#xff0c;依次从以下三个方面进行论述。 1.概要叙述你参与分析设计的软件项目以及你在其中所承担的主要工作。 2.请介绍软件维护的内…...

【VSCODE 插件 可视化】:SVG 编辑插件 SVG Editor

插件下载 svgeditor 创建文件 Windows/Linux 快捷键 Ctrl Shift P 打开VSCODE 命令面板查找 New File With Svg Editor 编辑文件 保存文件 打开文件以继续编辑 CG 选中多个&#xff1a;shift单击没找到横向分布功能无法用键盘微调位置...

go中实现子模块调用main包中函数的方法

你提到的“import cycle not allowed”错误是 Go 语言中一个常见的问题&#xff0c;表示在包的导入中存在循环依赖。在 Go 中&#xff0c;一个包不能直接或间接导入自己&#xff0c;否则就会报这个错误。 在你提到的第二个例子中&#xff0c;main 包和 submodule 包相互导入&a…...

VUE的脚手架搭建引入类库

VUE的小白脚手架搭建 真的好久好久自己没有发布自己博客了,对于一直在做后端开发的我 ,由于社会卷啊卷只好学习下怎么搭建前端,一起学习成长吧~哈哈哈(最终目的,能够懂并简易开发) 文章目录 VUE的小白脚手架搭建1.下载node.js2.安装vue脚手架3.创建一个项目4.代码规范约束配置(…...

java maven依赖传递以及版本冲突

文章目录 基本背景基本排查冲突工具依赖传递&#xff1a;很多依赖到底使用哪个版本的依赖dependencyManagement 作用exclusions其他问题 基本背景 你使用 java&#xff0c;使用 maven pom.xml 管理你的依赖包 可能常常遇到依赖版本冲突&#xff0c;或者很多依赖包&#xff0c;…...

【3-14 STC-pair超级详细的解说】

1. pair的定义和结构 • 基础概念&#xff1a;考察对std::pair模板类的理解&#xff0c;包括其头文件&#xff08;<utility>&#xff09;和基本语法&#xff08;pair<T1, T2>&#xff09;。 • 成员访问&#xff1a;测试对first和second成员变量的使用能力。 • 构…...

Python开发合并多个PDF文件

前言 在我们的工作中&#xff0c;可能有以下场景需要用到合并多个PDF&#xff1a; 文档归档&#xff1a;在企业或组织中&#xff0c;常常需要将相关的文档&#xff08;如合同、报告、发票等&#xff09;合并为一个PDF文件&#xff0c;以便于归档和管理。 报告生成&#xff1a;在…...

基于SpringBoot + Vue 的房屋租赁系统

基于springboot的房屋租赁管理系统-带万字文档 SpringBootVue房屋租赁管理系统 送文档 本项目有前台和后台两部分、多角色模块、不同角色权限不一样 共分三种角色&#xff1a;用户、管理员、房东 管理员&#xff1a;个人中心、房屋类型管理、房屋信息管理、预约看房管理、合…...

Qt QML实现弹球消砖块小游戏

前言 弹球消砖块游戏想必大家都玩过&#xff0c;很简单的小游戏&#xff0c;通过移动挡板反弹下落的小球&#xff0c;然后撞击砖块将其消除。本文使用QML来简单实现这个小游戏。 效果图&#xff1a; 正文 代码目录结构如下&#xff1a; 首先是小球部分&#xff0c;逻辑比较麻…...

ROS实践(四)机器人SLAM建图(gmapping)

目录 一、SLAM技术 二、常用工具和传感器 三、相关功能包 1. gmapping建图功能包 2. map_server 四、SLAM 建图实验 1. 配置gmapping(launch文件) 2. 启动机器人仿真(含机器人以及传感器) 3. 运行gmapping节点 4. 启动rviz可视化工具 5. 保存地图文件 一、SLAM技…...

使用Arduino、ESP8266和GPS在Google地图上追踪车辆

使用 ESP8266、GPS 和 Google 地图的 Arduino Vehicle Tracker 如今,车辆跟踪系统变得非常重要,尤其是在车辆被盗的情况下。如果您的车辆安装了 GPS 系统,您可以跟踪您的车辆位置,它可以帮助警方追踪被盗车辆。 在这里,我们正在构建更高级版本的车辆跟踪系统,您可以在其…...

python数据分析文件夹篇--pandas,openpyxl,xlwings三种方法批量创建、 复制、删除工作表

前言 之前我们学习了使用pandas灵活地读取数据&#xff0c;包括读取工作簿中一个或几个工作表&#xff0c;读取工作表中一行或多行&#xff0c;一列或多列数据&#xff0c;还学习了如何将数据灵活保存到本地。 今天我们学习一下文件夹中文件的批量处理操作&#xff0c;包括批量…...

MyBatis 的一级、二级缓存

文章目录 1️⃣ 一级缓存&#xff08;Local Cache&#xff09;&#x1f4cc; 定义&#x1f680; 示例代码 2️⃣ 二级缓存&#xff08;Global Cache&#xff09;&#x1f4cc; 定义&#x1f680; 使用方式 3️⃣ 一级缓存 vs. 二级缓存 &#x1f4ca;4️⃣ 数据共享问题&#x…...

掌握市场先机:9款销售渠道管理工具深度测评

本文主要介绍了以下9款销售渠道管理工具&#xff1a;1.纷享销客&#xff1b; 2.销帮帮&#xff1b; 3.小满CRM&#xff1b; 4.有赞&#xff1b; 5.Oracle NetSuite&#xff1b; 6.Salesforce Sales Cloud&#xff1b; 7.Cin7&#xff1b; 8.Pipedrive&#xff1b; 9.BigCommerc…...

【计算机网络通信 MQTT和AMQP的原理及应用场景、优缺点】

MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;和AMQP&#xff08;Advanced Message Queuing Protocol&#xff09;都是常用的消息中间件协议&#xff0c;以下是它们的原理、应用场景、优缺点介绍&#xff1a; 原理 MQTT 基于发布/订阅模式&#xff0c;有…...

如何搭建一个适配微信小程序,h5,app的uni-app项目

在vscode搭建 uni-app 项目&#xff08;Vue 3 Vite Pinia uView Plus&#xff09; 一、环境准备 1. 安装 Node.js 确保已安装 Node.js&#xff08;需≥14版本&#xff09;&#xff0c;可通过以下命令检查版本&#xff1a; node -v2. 安装 VSCode 从 VSCode 官网 下载并…...

3.14学习总结 排序算法

插入排序&#xff1a; 1.直接插入排序 维护一个有序区&#xff0c;把元素一个个插入有序区的适当位置&#xff0c;直到所有元素都有序为止。 for (int i 0;i < n - 1;i) {//升序int end i;int temp k[end 1];while (end > 0) {if (temp < k[end]) {k[end 1] …...

模拟类似 DeepSeek 的对话

以下是一个完整的 JavaScript 数据流式获取实现方案&#xff0c;模拟类似 DeepSeek 的对话式逐段返回效果。包含前端实现、后端模拟和详细注释&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><titl…...

实用小工具——快速获取数据库时间写法

最近我遇到了一个比较棘手的问题&#xff1a;在工作中&#xff0c;各个项目所使用的数据库类型各不相同。这导致我习惯性地使用Oracle的SQL语句进行编写&#xff0c;但每次完成后都会遇到报错&#xff0c;最终才意识到项目的数据库并非Oracle。为了避免这种情况&#xff0c;我需…...

完善机器人:让 DeepSeek 使用Vue Element UI快速搭建 AI 交互页面

在前两篇文章中&#xff0c;我们已经使用 AI 生成了 Java API&#xff0c;并创建了一个简单的 HTML JavaScript 网页&#xff0c;让用户可以与 AI 机器人聊天。但如果我们想要一个更美观、更专业的交互界面&#xff0c;该怎么办呢&#xff1f;&#x1f914; 本篇文章&#xf…...

PC端QT实现mqtt客户端发布和订阅

在Windows11-64位系统下使用QT开发桌面应用程序&#xff0c;实现mqtt客户端的发布和订阅功能。 需求&#xff1a; mqtt代理服务器 --mosquitto&#xff1b; mqtt客户端工具 -- mqtt.fx&#xff1b; qtcreator开发工具 -- qtcreator6.8.2版本&#xff1b; 过程&#xff1a;…...

蓝桥云客 挖矿

0挖矿 - 蓝桥云课 问题描述 小蓝正在数轴上挖矿&#xff0c;数轴上一共有 n 个矿洞&#xff0c;第 i 个矿洞的坐标为 ai​。小蓝从 0 出发&#xff0c;每次可以向左或向右移动 1 的距离&#xff0c;当路过一个矿洞时&#xff0c;就会进行挖矿作业&#xff0c;获得 1 单位矿石&…...

React开发指南:核心、实践与案例

文章目录 一、React核心架构与设计哲学1.1 虚拟DOM与Diff算法1.2 JSX编译原理1.3 组件化设计模式1.4 Fiber架构解析1.5 组件生命周期&#xff08;类组件&#xff09; 二、React核心特性详解2.1 数据流管理2.2 Hooks革命2.3 Context API进阶2.4 自定义Hooks设计模式 三、React 1…...

落雪音乐Pro 8.8.6 | 内置8条音源,无需手动导入,纯净无广告

洛雪音乐Pro版内置多组稳定音源接口&#xff0c;省去手动导入的繁琐操作&#xff0c;安装即可畅听海量音乐。延续原版无广告的纯净体验&#xff0c;支持歌单推荐与音源切换&#xff0c;满足个性化听歌需求。此版本仅支持在线播放&#xff0c;无法下载音乐&#xff0c;且与原版不…...

Java入职篇(1)——心态篇

Java入职篇&#xff08;1&#xff09;——心态篇 本人终于通过辛苦的学习以及经过大量的面试&#xff0c;终于拿到一份offer了&#xff01;&#xff0c;但是的有点担心入职之后&#xff0c;不能胜任工作&#xff0c;不能安全度过试用期。在入职后能够顺利渡过刚开始最难熬的实…...

【后端】【django】Django DRF `@action` 详解:自定义 ViewSet 方法

Django DRF action 详解&#xff1a;自定义 ViewSet 方法 在 Django REST Framework&#xff08;DRF&#xff09;中&#xff0c;action 装饰器用于为 ViewSet 添加自定义的 API 端点。相比于 update、create 等默认方法&#xff0c;action 允许我们定义 更加清晰、语义化 的 A…...

【Vue.js】

一、简介 1、概述 官网GitHub - Vuejs Vue 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建&#xff0c;并提供了一套声明式的、组件化的编程模型&#xff0c;帮助你高效地开发用户界面。 Vue.js作为一个渐进式框架&#xff0c;其设计理…...

SSL 和 TLS 认证

SSL&#xff08;Secure Sockets Layer&#xff0c;安全套接层&#xff09;认证是一种用于加密网络通信和验证服务器身份的安全技术。它是TLS&#xff08;Transport Layer Security&#xff0c;传输层安全协议&#xff09;的前身&#xff0c;虽然现在大多数应用使用的是TLS&…...

可复用表格组件设计与实现:分页、排序、筛选全功能解析

文章目录 一、组件设计思路1.1 功能需求分析1.2 技术选型 二、组件架构设计2.1 组件结构2.2 数据流设计 三、核心代码实现3.1 基础表格组件3.2 状态管理 四、功能模块实现4.1 分页组件4.2 排序控制4.3 筛选控制 五、性能优化方案5.1 虚拟滚动5.2 防抖筛选 六、完整测试方案6.1 …...

SmartFormat:轻量级文本模板库,轻松替代 string.Format

推荐一个 C# 编写的轻量级文本模板库&#xff0c;可以作为 string.Format 的替代品。 01 项目简介 SmartFormat不仅继承了 string.Format 的功能&#xff0c;还扩展了更多高级特性&#xff0c;例如命名占位符、列表格式化、本地化支持、复数化等。SmartFormat 提供了高性能、…...