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

UniApp 中制作一个横向滚动工具栏

前言

最近在用 UniApp 开发项目时,需要一个横向滑动的工具栏。常见的工具栏一般都是竖着的,但横向滑动的工具栏不仅能展示更多内容,还能让界面看起来更加丰富。不过很多朋友可能会发现,如何让内容“横着”展示又不变形、能流畅滚动、并且能自适应多种屏幕宽度,还是有点麻烦的。

这篇文章我会带大家一步步用 UniApp 实现一个横向滚动的工具栏,并讲解其中的一些关键点。话不多说,咱们直接上代码!

在这里插入图片描述

实现思路

横向工具栏的核心其实不复杂,大致可以分成以下几步:

  1. scroll-view 组件实现横向滚动。
  2. 使用 flex 布局,将每个工具项(如图标和文字)在 tool-item 中垂直排列。
  3. 优化 scroll-viewtool-item 的样式,让它们看起来整齐美观。

主要组件和样式

在 UniApp 中,scroll-view 是一个可以支持滚动的容器。在横向工具栏中,我们设置 scroll-viewscroll-xtrue,这样它就可以左右滑动了。此外,我们还会使用 flex 布局来控制工具栏中的每个图标和文字的排列方式。

页面布局

首先,让我们来写一个基本的页面布局,先不涉及复杂的样式。我们将横向工具栏放在一个 scroll-view 中,每个工具项都放在一个 view 里。这样,可以确保每个工具项是独立的,而且整个工具栏可以横向滚动。

代码实现

1. 初始化项目和页面

首先,创建一个新的 UniApp 项目(可以直接使用 HBuilderX,选择 uni-app 模板)。在项目中创建一个新页面,比如叫 toolbar。然后在页面的 .vue 文件中,编写 HTML 结构。

<template><scroll-view style="flex: 1"><view class="container"><!-- 轮播图部分 --><view> <swiper class="swiper" :indicator-dots="true"><swiper-item class="swiper-item"><image class="swiper-image" :src="swiperImage[0]" mode="aspectFill"></image></swiper-item><swiper-item class="swiper-item"><image class="swiper-image" :src="swiperImage[1]" mode="aspectFill"></image></swiper-item><swiper-item class="swiper-item"><image class="swiper-image" :src="swiperImage[2]" mode="aspectFill"></image></swiper-item></swiper></view><!-- 横向滑动工具栏 --><scroll-view scroll-x="true" class="tool-bar"><view class="tool-item" v-for="(tool, index) in tools" :key="index"><image :src="tool.icon" class="tool-icon"></image><text class="tool-text">{{ tool.name }}</text></view></scroll-view><!-- 工具分类卡片(两列布局) --><view class="card-container"><view class="card" style="background-color: #4fc3f7"><text class="card-title">日常工具\n</text><text class="card-description">聚合一些最热门,最常用的工具</text></view><view class="card" style="background-color: #f48fb1"><text class="card-title">计算工具\n</text><text class="card-description">计算器、温度、压力、单位换算工具…</text></view><view class="card" style="background-color: #f06292"><text class="card-title">查询工具\n</text><text class="card-description">各种文字、专用信息、资源查询…</text></view><view class="card" style="background-color: #4db6ac"><text class="card-title">图片工具\n</text><text class="card-description">图片水印、压缩、取色、壁纸大全…</text></view><view class="card" style="background-color: #81c784"><text class="card-title">文字工具\n</text><text class="card-description">暗语翻译器、特殊文本、编码工具…</text></view><view class="card" style="background-color: #42a5f5"><text class="card-title">开发工具\n</text><text class="card-description">各种代码工具、网页转应用…</text></view><view class="card" style="background-color: #64b5f6"><text class="card-title">提取工具\n</text><text class="card-description">视频提取、图片提取、网页提取…</text></view><view class="card" style="background-color: #26a69a"><text class="card-title">系统工具\n</text><text class="card-description">应用管理、WiFi密码查看、壁纸工具…</text></view></view></view></scroll-view>
</template>

2. 数据初始化

接下来,给页面添加数据属性。这里包括 swiperImage 数组(轮播图图片的路径)和 tools 数组(工具栏的图标和名称)。在 <script> 部分中,我们将这些数据初始化:

<script>
export default {data() {return {swiperImage: ['/static/image/swiper/img1.jpeg','/static/image/swiper/img2.jpeg','/static/image/swiper/img3.jpeg'],tools: [{ name: '工具1', icon: '/static/image/swiper/img1.jpeg' },{ name: '工具2', icon: '/static/image/swiper/img1.jpeg' },{ name: '工具3', icon: '/static/image/swiper/img1.jpeg' },{ name: '工具4', icon: '/static/image/swiper/img1.jpeg' },{ name: '工具5', icon: '/static/image/swiper/img1.jpeg' },{ name: '工具5', icon: '/static/image/swiper/img1.jpeg' },{ name: '工具5', icon: '/static/image/swiper/img1.jpeg' },]}}
}
</script>

3. 样式设置

接下来是样式的编写,这一步会影响整个工具栏的展示效果。我们为工具栏、轮播图和卡片分别设置样式,特别是 scroll-viewtool-item 这些关键元素。

<style>
.container {font-size: 14px;line-height: 24px;background-color: #f5f5f5;padding-bottom: 60px; /* 留出底部导航栏的位置 */
}/* 轮播图样式 */
.swiper {height: 150px;margin-bottom: 20px;border-radius: 10px;overflow: hidden;margin: 0 10px;
}
.swiper-item {height: 150px;width: 100%;background-color: #ff5e62;
}
.swiper-image {width: 100%;
}/* 横向滑动工具栏样式 */
.tool-bar {display: flex;flex-direction: row;padding: 10px;border-radius: 10px;margin: 15px 10px 0px 10px;background-color: #ffffff;overflow-x: auto; /* 允许水平滚动 */white-space: nowrap;width: 100%;
}
.tool-item {width: 80px;margin-right: 10px;text-align: center;display: flex;flex-direction: column; /* 垂直排列图标和文字 */align-items: center;
}
.tool-icon {width: 50px;height: 50px;border-radius: 10px;margin-bottom: 5px;
}
.tool-text {font-size: 12px;color: #333;
}
</style>
  1. tool-bar 是整个工具栏的容器,我们设置了 flex-directionrow,表示工具项在水平排列。
  2. tool-item 中,我们设置了 flex-directioncolumn,让图标和文字垂直排列。
  3. scroll-view 本身设置了 overflow-x: auto,使其可以横向滚动。

4. 工具栏的细节优化

现在我们已经有了一个基本的横向工具栏,但为了让它更具吸引力,我们可以进行一些样式优化,使其更美观,并且适配更多的场景。接下来会从样式细节、布局调整和一些动态效果出发,进一步美化这个工具栏。

4.1 增加圆角、阴影和过渡效果

圆角、阴影和过渡效果可以让工具栏看起来更加立体,给用户更好的视觉体验。我们可以在 .tool-item.tool-icon 上增加这些效果。

.tool-bar {display: flex;flex-direction: row;padding: 10px;border-radius: 10px;margin: 15px 10px 0px 10px;background-color: #ffffff;overflow-x: auto;white-space: nowrap;width: 100%;box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); /* 添加阴影 */
}.tool-item {width: 80px;margin-right: 10px;text-align: center;display: flex;flex-direction: column;align-items: center;border-radius: 8px; /* 圆角 */transition: transform 0.2s ease; /* 添加过渡效果 */
}.tool-item:hover {transform: scale(1.1); /* 鼠标悬浮放大效果 */
}.tool-icon {width: 50px;height: 50px;border-radius: 50%; /* 图标改为圆形 */margin-bottom: 5px;box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); /* 图标阴影 */
}
4.2 动态效果

这里我们给 .tool-item 添加了 :hover 样式,在鼠标悬浮时稍微放大图标,形成一种“弹出”的效果。同时,tool-icon 的阴影让图标看起来不再是“贴”在页面上的,而是有了一些立体感。

4.3 文本颜色和字体

为了让工具栏的文字更具可读性,可以使用更亮眼的颜色和稍大的字体。也可以给文字加上一点渐变效果。

.tool-text {font-size: 14px;color: #333;font-weight: bold; /* 加粗字体 */background: linear-gradient(90deg, #ff7e5f, #feb47b); /* 渐变颜色 */-webkit-background-clip: text;color: transparent;
}

5. 响应式布局的实现

在开发移动应用时,响应式设计尤为重要,尤其是在横向滚动工具栏这种组件上。我们希望无论屏幕尺寸如何变化,工具栏的内容都能自适应调整,不会出现溢出或内容过小的问题。

5.1 使用 vwvh 单位

vw(视口宽度)和 vh(视口高度)是 CSS 中非常实用的单位,可以使组件根据屏幕尺寸自动缩放。我们可以用 vw 来控制工具栏宽度,使其适应不同屏幕。

.tool-item {width: 20vw; /* 每个工具项的宽度占屏幕宽度的20% */max-width: 100px; /* 最大宽度设置 */
}

这种设置让每个工具项的宽度根据屏幕的宽度动态调整,但不超过 100px,这样就能适配各种设备。

5.2 媒体查询

如果想让工具栏在不同屏幕尺寸下的显示效果更加精细,可以使用 CSS 的媒体查询功能,在不同的屏幕宽度下调整工具栏的布局。

@media screen and (max-width: 600px) {.tool-item {width: 30vw; /* 在小屏幕上,每个工具项占30%屏幕宽度 */}
}@media screen and (min-width: 600px) {.tool-item {width: 15vw; /* 在大屏幕上,每个工具项占15%屏幕宽度 */}
}

通过这种方式,我们可以确保在屏幕较小的手机上,工具项不会因为太小而难以阅读;在屏幕较大的设备上,工具栏也不会显得拥挤。


6. 交互功能的实现

光有好看的外观还不够,我们可以为工具栏添加一些交互功能,使用户体验更好。例如,当用户点击某个工具项时,可以触发相应的页面跳转或显示详细信息。

6.1 点击事件

在 UniApp 中,可以直接为工具项绑定点击事件。在模板中的 <view> 标签上使用 @click 事件,并在 methods 中定义点击处理逻辑。

<view class="tool-item" v-for="(tool, index) in tools" :key="index" @click="handleToolClick(tool)"><image :src="tool.icon" class="tool-icon"></image><text class="tool-text">{{ tool.name }}</text>
</view>
methods: {handleToolClick(tool) {// 根据工具名称执行相应的操作,可以跳转到不同页面或展示内容uni.showToast({title: `点击了${tool.name}`,icon: 'none'});}
}

这样,用户点击某个工具项时,会显示提示信息。当然,你也可以根据需求进行页面跳转或执行其他操作,比如跳转到工具的详情页面:

uni.navigateTo({url: `/pages/${tool.pageName}/${tool.pageName}`
});
6.2 让工具栏记住滚动位置

如果希望工具栏在页面切换后能记住用户滚动的位置,可以利用 scroll-left 属性记录和恢复滚动位置。

<scroll-view scroll-x="true" class="tool-bar" :scroll-left="scrollLeft"><!-- 工具项 -->
</scroll-view>
data() {return {scrollLeft: 0, // 滚动位置};
},
methods: {// 页面离开时记录滚动位置saveScrollPosition(event) {this.scrollLeft = event.detail.scrollLeft;}
}

7. 优化性能

在移动端,性能优化是一个大话题,特别是在像工具栏这种涉及滚动和图片渲染的地方。以下是一些常见的优化措施:

7.1 图片懒加载

如果工具栏里有很多图片,可以启用懒加载,减少初始加载时间。UniApp 提供了 lazy-load 属性,可以在 <image> 标签中设置。

<image :src="tool.icon" class="tool-icon" lazy-load="true"></image>

这样,只有当图片即将出现在视口中时才会加载,避免一次性加载所有图片,节省资源。

7.2 减少渲染次数

对于动态数据的渲染,可以在页面初次加载时将数据保存到本地存储中,避免每次打开页面都重新获取数据。例如,如果工具栏内容来自接口,可以将结果缓存起来:

methods: {async fetchTools() {const cachedTools = uni.getStorageSync('tools');if (cachedTools) {this.tools = cachedTools;} else {const res = await uni.request({ url: 'API_URL' });this.tools = res.data;uni.setStorageSync('tools', this.tools);}}
}

8. 最终效果展示与总结

经过上述步骤,我们的 UniApp 横向工具栏已经实现得差不多了。这个工具栏具有以下特点:

  1. 支持横向滚动,使用 scroll-view 实现。
  2. 使用 flex 布局,将图标和文字垂直排列,并添加了悬浮效果。
  3. 自适应布局,确保在各种屏幕尺寸上都能良好展示。
  4. 点击事件处理,可以轻松跳转或展示信息。
  5. 性能优化,通过图片懒加载和本地缓存提高了加载速度。

在这里插入图片描述


总结

本文介绍了如何在 UniApp 中制作一个横向滚动工具栏,从基础实现到样式优化,再到响应式设计和交互添加,最后进行了性能优化。希望这篇文章能帮助大家更好地理解和掌握 UniApp 中横向工具栏的实现方法,并能在自己的项目中自由运用。

通过这种方式实现的工具栏不仅美观,还具有实用性,可以轻松满足大多数项目需求。祝大家在开发 UniApp 的旅程中一帆风顺!

相关文章:

UniApp 中制作一个横向滚动工具栏

前言 最近在用 UniApp 开发项目时&#xff0c;需要一个横向滑动的工具栏。常见的工具栏一般都是竖着的&#xff0c;但横向滑动的工具栏不仅能展示更多内容&#xff0c;还能让界面看起来更加丰富。不过很多朋友可能会发现&#xff0c;如何让内容“横着”展示又不变形、能流畅滚…...

react中如何获取真实的dom

在 React 中&#xff0c;获取真实的 DOM 元素通常通过 ref 来实现。ref 是一个特殊的属性&#xff0c;用于引用组件或 DOM 元素的实例。你可以通过 ref 获取到组件的真实 DOM 元素或组件实例。 1. 函数组件中的 useRef 在函数组件中&#xff0c;获取 DOM 元素的引用需要使用 …...

5G与物联网的协同发展:打造智能城市的未来

引言 随着科技的不断进步&#xff0c;智能城市的概念已经不再是科幻小说中的幻想&#xff0c;它正在逐步走进我们的生活。而这背后的两大驱动力无疑是 5G和 物联网&#xff08;IoT&#xff09;。5G网络以其高速率、低延迟、大容量的优势&#xff0c;与物联网的强大连接能力相结…...

【Qt】实现定期清理程序日志

在现有Qt程序中实现可配置日志保存天数的代码示例&#xff0c;分为界面修改、配置存储和核心逻辑三部分&#xff1a; // 1. 在配置文件&#xff08;如settings.h&#xff09;中添加保存天数的配置项 class Settings { public:int logRetentionDays() const {return m_settings…...

git bisect 使用二分法查找引入错误的提交

git bisect 使用二分法查找引入错误的提交 Git bisect 命令官方文档 git bisect 这个命令使用二分搜索算法来查找项目历史中哪个提交引入了一个错误 使用该命令时&#xff0c;首先告诉它一个已知包含错误的 “坏” 提交 以及一个已知在错误出现之前的 “好” 提交 然后 git b…...

一种面向车载时间敏感网络的联合路由与时隙调度负载均衡算法

论文标题 中文标题&#xff1a;一种面向车载时间敏感网络的联合路由与时隙调度负载均衡算法 英文标题&#xff1a;A Joint Routing and Time-Slot Scheduling Load Balancing Algorithm for In-Vehicle TSN 作者信息 Bo Xu, Xinrui Chang, Dongyang Xu, Shuo Wang, Uzair As…...

【弹性计算】容器、裸金属

容器、裸金属 1.容器和云原生1.1 容器服务1.2 弹性容器实例1.3 函数计算 2.裸金属2.1 弹性裸金属服务器2.2 超级计算集群 1.容器和云原生 容器技术 起源于虚拟化技术&#xff0c;Docker 和虚拟机和谐共存&#xff0c;用户也找到了适合两者的应用场景&#xff0c;二者对比如下图…...

Golang关于结构体组合赋值的问题

现在有一个结构体&#xff0c;其中一个属性组合了另外一个结构体&#xff0c;如下所示&#xff1a; type User struct {Id int64Name stringAge int64UserInfo }type UserInfo struct {Phone stringAddress string }如果要给 User 结构体的 Phone 和 Address 赋值的话&am…...

DeepSeek vs ChatGPT:AI对决中的赢家是……人类吗?

DeepSeek vs ChatGPT&#xff1a;AI对决中的赢家是……人类吗&#xff1f; 文章目录 DeepSeek vs ChatGPT&#xff1a;AI对决中的赢家是……人类吗&#xff1f;一、引言1. 背景2. 问题 二、DeepSeek vs ChatGPT&#xff1a;谁更胜一筹&#xff1f;2.1 语言生成能力评测对比场景…...

新建github操作

1.在github.com的主页根据提示新建一个depository。 2.配置用户名和邮箱 git config --global user.name "name" git config --global user.email "email" 3.生成ssh秘钥 ssh-keygen -t rsa 找到public key 对应的文件路径 cat /root/.ssh/id_rsa 复制显…...

Spring Boot 携手 DeepSeek:开启智能交互新时代

前言 在当今数字化浪潮汹涌澎湃的时代,人工智能技术正以前所未有的速度改变着我们的生活和工作方式。大语言模型作为人工智能领域的一颗璀璨明星,凭借其强大的自然语言处理能力,为各个行业带来了新的发展机遇。DeepSeek 作为一款性能卓越的大语言模型,以其高效、准确的文本…...

基于SSM+uniapp的数学辅导小程序+LW示例参考

1.项目介绍 系统角色&#xff1a;管理员、普通用户功能模块&#xff1a;用户管理、学习中心、知识分类管理、学习周报管理、口算练习管理、试题管理、考试管理、错题本等技术选型&#xff1a;SSM&#xff0c;Vue&#xff08;后端管理web&#xff09;&#xff0c;uniapp等测试环…...

HTML的入门

一、HTML HTML&#xff08;HyperText Markup Language&#xff0c;超文本标记语言&#xff09;是一种用来告知浏览器如何组织页面的标记语言。 超文本&#xff1a;就是超越了文本&#xff1b;HTML不仅仅可以用来显示文本(字符串、数字之类)&#xff0c;还可以显示视频、音频等…...

Windows 安装 GDAL 并配置 Rust-GDAL 开发环境-1

Rust-GDAL 是 Rust 语言的 GDAL&#xff08;Geospatial Data Abstraction Library&#xff09; 绑定库&#xff0c;用于处理地理数据。由于 GDAL 依赖较多&#xff0c;在 Windows 上的安装相对复杂&#xff0c;本文档将介绍如何安装 GDAL 并配置 Rust-GDAL 的开发环境。 1. 检…...

IntelliJ IDEA 接入 AI 编程助手(Copilot、DeepSeek、GPT-4o Mini)

IntelliJ IDEA 接入 AI 编程助手&#xff08;Copilot、DeepSeek、GPT-4o Mini&#xff09; &#x1f4ca; 引言 近年来&#xff0c;AI 编程助手已成为开发者的高效工具&#xff0c;它们可以加速代码编写、优化代码结构&#xff0c;并提供智能提示。本文介绍如何在 IntelliJ I…...

【金三银四】分享数据库笔试题及答案~~

你是否在面试中遇到过关于数据库的笔试题&#xff1f;如何高效地准备这些题目&#xff0c;提升自己的竞争力&#xff1f;本文将为你整理一些经典的数据库笔试题及其答案&#xff0c;助你备战面试。 金三银四马上来了&#xff0c;测试年限较短难免会碰到笔试题&#xff0c;最近…...

3.1 AI Agent产品管理革命:从愿景定义到用户价值交付的全链路方法论

AI Agent产品管理革命:从愿景定义到用户价值交付的全链路方法论 引言:AI时代产品经理的范式跃迁 Gartner预测,到2026年75%的AI项目失败将归因于产品管理缺失。本文揭示AI Agent产品经理的六大核心能力模型,通过GitHub Sentinel等案例,展示如何将大模型技术转化为可持续商…...

MySQL常见错误码及解决方法(1130、1461、2003、1040、2000、1049、1062、1129、2002、1690等)

目录 【问题1】、FATAL: error 1130: Unknown error 1130 【问题2】、FATAL: error: 1461 【问题3】、ERROR 2003 (HY000): Cant connect to MySQL server on "" (113) 【问题4】、FATAL: error 2003: Cant connect to MySQL server on 172.19.111.151 (111) 【问…...

Rhel Centos环境开关机自动脚本

Rhel Centos环境开关机自动脚本 1. 业务需求2. 解决方法2.1 rc.local2.2 rc.d2.3 systemd2.4 systemd附着的方法2.5 tuned 3. 测试 1. 业务需求 一台较老的服务器上面业务比较简单,提供一个简单的网站,但已经没有业务的运维人员. 想达到的效果: 由于是非标准的apache或者nginx…...

2D 游戏艺术、动画和光照

原文&#xff1a;https://unity.com/resources/2d-game-art-animation-lighting-for-artists-ebook 笔记 用Tilemap瓷砖大小为1单元&#xff0c;人物大小在0.5~2单元 PPU &#xff1a;单位像素 pixels per unit 2160 4K分辨率/ 正交相机size*2 完整屏幕显示像素点 有骨骼动…...

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇&#xff0c;在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下&#xff1a; 【Note】&#xff1a;如果你已经完成安装等操作&#xff0c;可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作&#xff0c;重…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

Cursor实现用excel数据填充word模版的方法

cursor主页&#xff1a;https://www.cursor.com/ 任务目标&#xff1a;把excel格式的数据里的单元格&#xff0c;按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例&#xff0c;…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程&#xff1a;&#xff08;白话解释&#xff09; 我们将原始待发送的消息称为 M M M&#xff0c;依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)&#xff08;意思就是 G &#xff08; x ) G&#xff08;x) G&#xff08;x) 是已知的&#xff09;&#xff0…...

解锁数据库简洁之道:FastAPI与SQLModel实战指南

在构建现代Web应用程序时&#xff0c;与数据库的交互无疑是核心环节。虽然传统的数据库操作方式&#xff08;如直接编写SQL语句与psycopg2交互&#xff09;赋予了我们精细的控制权&#xff0c;但在面对日益复杂的业务逻辑和快速迭代的需求时&#xff0c;这种方式的开发效率和可…...

HBuilderX安装(uni-app和小程序开发)

下载HBuilderX 访问官方网站&#xff1a;https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本&#xff1a; Windows版&#xff08;推荐下载标准版&#xff09; Windows系统安装步骤 运行安装程序&#xff1a; 双击下载的.exe安装文件 如果出现安全提示&…...

QT3D学习笔记——圆台、圆锥

类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体&#xff08;对象或容器&#xff09;QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质&#xff08;定义颜色、反光等&#xff09;QFirstPersonC…...

(一)单例模式

一、前言 单例模式属于六大创建型模式,即在软件设计过程中,主要关注创建对象的结果,并不关心创建对象的过程及细节。创建型设计模式将类对象的实例化过程进行抽象化接口设计,从而隐藏了类对象的实例是如何被创建的,封装了软件系统使用的具体对象类型。 六大创建型模式包括…...

uniapp 小程序 学习(一)

利用Hbuilder 创建项目 运行到内置浏览器看效果 下载微信小程序 安装到Hbuilder 下载地址 &#xff1a;开发者工具默认安装 设置服务端口号 在Hbuilder中设置微信小程序 配置 找到运行设置&#xff0c;将微信开发者工具放入到Hbuilder中&#xff0c; 打开后出现 如下 bug 解…...

密码学基础——SM4算法

博客主页&#xff1a;christine-rr-CSDN博客 ​​​​专栏主页&#xff1a;密码学 &#x1f4cc; 【今日更新】&#x1f4cc; 对称密码算法——SM4 目录 一、国密SM系列算法概述 二、SM4算法 2.1算法背景 2.2算法特点 2.3 基本部件 2.3.1 S盒 2.3.2 非线性变换 ​编辑…...