uni-app--》打造个性化壁纸预览应用平台(一)

news2024/11/17 1:27:51

🏙️作者简介:大家好,我是亦世凡华、渴望知识储备自己的一名前端工程师

🌄个人主页:亦世凡华、

🌆系列专栏:uni-app

🌇座右铭:人生亦可燃烧,亦可腐败,我愿燃烧,耗尽所有光芒。

👀引言

⚓经过web前端的学习,相信大家对于前端开发有了一定深入的了解,今天我开设了uni-app专栏,对于想从移动端开发方向进一步发展的朋友,希望看到我文章的朋友能对你有所帮助。

        今天开始使用vue3+uni-app搭建一个电商购物的小程序,因为文章会将项目的每一个地方代码的书写都会讲解到,所以本项目会分成好几篇文章进行讲解,我会在最后一篇文章中会将项目代码开源到我的github上,大家可以自行去进行下载运行,希望本文章对有帮助的朋友们能多多关注本专栏,学习更多前端uni-app知识。

        如果是第一次接触uni-app并且想学习uni-app的朋友,我是不建议直接从此次实战项目开始看起,可以先阅读一下我以前的基础文章:什么是uniapp?如何开发uniapp?按部就班的学习可以让学习变得更轻松更容易上手哦,闲话少说我们直接开始今天的uni-app实战篇。

目录

🏔️初始化项目

🌋首页面布局

🗻底部页切换

🏖️分类页布局

🏕️个人页布局

🏝️样式布全局


🏔️初始化项目

这里我们采用hbuilderx来编写uni-app项目,这里打开编辑器点击文件,选择新建项目,然后输入以下前期配置内容:

如果是第一次在uni-app中使用vue3创建项目的话,需要安装一个插件。 点击HBuilder X的菜单栏中的工具选项,选择插件安装,安装如下的插件即可。 

接下来我们就可以点击菜单栏中的运行,选择运行到小程序模拟器,然后选择使用微信开发者工具即可,最终得到的画面如下: 

基础代码项目运行起来之后,我们可以点击微信开发者工具当中的分离窗口按钮,让运行窗口和微信开发者工具分离,然后点击置顶窗口,让我们的代码编辑器和运行窗口呈现在同一个页面上,通过微信开发者工具的代码热更新,在外面书写代码时就能实时看到具体的效果: 

🌋首页面布局

轮播图:对于首页页面的开发,开头老生常谈了先来个轮播图再说,这里我们借助uni-app中的swiper组件进行轮播图的页面设计,这里先用几个静态的图片代替,后面再接入接口获取真实数据呈现,具体代码如下所示:

<template>
	<view class="home">
		<!-- 轮播图区域 -->
		<view class="banner">
			<swiper 
				circular
				indicator-dots 
				autoplay 
				indicator-color="rgba(255,255,255,.5)" 
				indicator-active-color="#fff"
				:interval="3000" 
				:duration="1000" 
			>
				<swiper-item>
					<image src="../../common/image/1.jpg" mode="aspectFill" alt="轮播图"  />
				</swiper-item>	<swiper-item>
					<image src="../../common/image/2.jpg" mode="aspectFill" alt="轮播图"  />
				</swiper-item>	<swiper-item>
					<image src="../../common/image/3.jpg" mode="aspectFill" alt="轮播图"  />
				</swiper-item>
			</swiper>
		</view>
	</view>
</template>

呈现的效果如下所示:

公告栏:这里我们用到了uni-app的图标库,打开 官网 ,然后找到uni-icons图标库,点击下载安装:

然后点击下载插件并导入HBuilderX中,页面跳转到编辑器之后,选择我们目前书写的项目,然后下载即可,如下所示:

安装完成之后,接下来我们就可以使用icon图标了,这里我们也仍然借助swiper组件进行一个上下轮播的展示,代码如下所示:

<!-- 公告区域 -->
<view class="notice">
	<view class="notice-left">
		<uni-icons type="sound-filled" size="20" color="#008c8c"></uni-icons>
		<text class="text">公告</text>
	</view>
	<view class="notice-center">
		<swiper vertical autoplay :interval="1500" :duration="300" circular>
			<swiper-item v-for="item in 4" :key="item">文字内容</swiper-item>
		</swiper>
	</view>
	<view class="notice-right">
		<uni-icons type="right" size="20" color="#333"></uni-icons>
	</view>
</view>

解决了一下css布局问题之后,呈现的效果如下所示:

选项栏: 接下来在首页布局一下选项栏的内容,选项栏可以分几个模块,但这些模块都有相同之处,所以这里我们需要定义一下公告的组件,这里我们创建一个目录components,用于存放后期我们使用到的公共组件:

接下来我们在components目录下新建组件,然后输入相关名称之后选择创建同名目录进行创建:

创建好公共组件之后,这里我们开始对公共组件的内容进行书写,这里我们放置了两个插槽用于存放我们自定义的内容,代码如下:

<template>
	<view class="common-title">
		<view class="name">
			<slot name="name"></slot>
		</view>
		<view class="custom">
			<slot name="custom"></slot>
		</view>
	</view>
</template>

<script setup></script>

<style scoped lang="scss">
.common-title {
	display: flex;
	justify-content: space-between;
	align-items: center;
	padding: 0 30rpx;
	.name {
		font-size: 40rpx
	}
}
</style>

然后接下来我们开始编写相应的选项栏模块,这里我们再次借用uni-app中的时间格式化组件:

代码如下所示:

<!-- 内容选择 -->
<view class="select">
	<common-title>
		<template #name>每日推荐</template>
		<template #custom>
			<view class="date">
				<uni-icons type="calendar" size="24" color="#008c8c"></uni-icons>
				<uni-dateformat class="text" :date="Date.now()" format="dd日"></uni-dateformat>
			</view>
		</template>
	</common-title>
	<view class="content">
		<scroll-view scroll-x >
			<view class="box" v-for="item in 8" :key="item">
				<image src="../../common/image/1.jpg" mode="aspectFill"></image>
			</view>
		</scroll-view>
	</view>
</view>

最终呈现下面的效果:

在接下来的一个模块选项栏中,也借助了一个公共组件,这里通过props传值显示不同的内容:

<template>
	<view class="theme-item">
		<navigator url="" class="box" v-if="!props.isMore">
			<image class="pic" src="../../common/image/2.jpg" mode="aspectFill"></image>
			<view class="mask">明星美女</view>
			<view class="tab">3天前更新</view>
		</navigator>
		<navigator url="" class="box more" v-else>
			<image class="pic" src="../../common/image/2.jpg" mode="aspectFill"></image>
			<view class="mask">
				<uni-icons type="more-filled" size="34" color="#fff"></uni-icons>
				<view class="text">更多</view>
			</view>
		</navigator>
	</view>
</template>

<script setup>
const props = defineProps({
	isMore: {
		type: Boolean,
		default: false
	}
})
</script>

然后在主题选择的模块处,通过v-for遍历相关数据,再最后一个标签内容中传递props:

<!-- 主题选择 -->
<view class="theme">
	<common-title>
		<template #name>专题精选</template>
		<template #custom>
			<navigator url="" class="more">More+</navigator>
		</template>
	</common-title>
	<view class="content">
		<theme-item v-for="item in 8" :key="item"></theme-item>
		<theme-item :isMore="true"></theme-item>
	</view>
</view>

🗻底部页切换

接下来我们开始创建底部的tab按钮进行页面的切换,右键pages目录进行新建页面,然后按照下面创建文件的方式创建tab页面:

然后我们来到pages.json文件中进行相关的tab页配置,这里我们设置了tabBar配置,然后输入相关的文件名称路径以及对应的默认和激活图标:

对于图标的选择,这里我们可以来到阿里云图标库中进行相关的选择,然后下载png图片即可:

然后这里我们也可以设置全局的配置样式以及tab的文字颜色效果:

最终呈现的效果如下所示:

🏖️分类页布局

分类页面布局,这里我们展示也是采用grid布局的方式,把一些静态图片展示一下,后面再详细修改:

<template>
	<view class="classify">
		<view class="content">
			<theme-item v-for="item in 15" :key="item"></theme-item>
		</view>
	</view>
</template>

<script setup>

</script>

<style scoped lang="scss">
.classify {
	padding: 30rpx;
	.content{
		display: grid;
		grid-template-columns: repeat(3,1fr);
		gap: 15rpx;
	}
}
</style>

最终呈现的效果如下所示:

🏕️个人页布局

接下来开始完成个人中心页面的布局样式,这里我们就先设计一些静态数据进行展示,对于联系客服的选项按钮,这里由于不同平台下uni支持的API不同,所以这里需要用到条件渲染方法,在小程序平台下就正常的调用联系客服的方法,非小程序平台就调用联系电话的方式进行,这里uni也是提供了联系电话的回调API方法:

<template>
	<view class="user">
		<view class="info">
			<view class="avatar">
				<image src="../../common/image/2.jpg" mode="aspectFill"></image>
			</view>
			<view class="ip">127.0.0.1</view>
			<view class="address">来自于: 山东</view>
		</view>
		<view class="section">
			<view class="list">
				<view class="row" v-for="item in selectData.slice(0,3)" :key="item">
					<view class="left">
						<uni-icons :type="item.icon" size="24" :color="item.color"></uni-icons>
						<view class="text">{{ item.name }}</view>
					</view>
					<view class="right">
						<view class="text">{{ item.text }}</view>
						<uni-icons type="right" size="18" color="#aaa"></uni-icons>
					</view>
				</view>
				<!-- #ifdef MP -->
				<button open-type="contact">联系客服</button>
				<!-- #endif -->
				<!-- #ifndef MP -->
				<button @click="clickContent">拨打电话</button>
				<!-- #endif -->
			</view>
		</view>
		<view class="section">
			<view class="list">
				<view class="row" v-for="item in selectData.slice(3)" :key="item">
					<view class="left">
						<uni-icons :type="item.icon" size="24" :color="item.color"></uni-icons>
						<view class="text">{{ item.name }}</view>
					</view>
					<view class="right">
						<view class="text">{{ item.text }}</view>
						<uni-icons type="right" size="18" color="#aaa"></uni-icons>
					</view>
				</view>
			</view>
		</view>
		
	</view>
</template>

<script setup>
import { ref } from 'vue'

// 定义section模块数据
let selectData = ref([
	{ icon: 'download-filled', color: '#008c8c', name: '我的下载', text: '0' },
	{ icon: 'star-filled', color: '#FFD700', name: '我的评分', text: '0' },
	{ icon: 'chatboxes-filled', color: '#4169E1', name: '联系客服', text: '0' },
	{ icon: 'notification-filled', color: '#5F9EA0', name: '订阅更新', text: '0' },
	{ icon: 'info-filled', color: '#DC143C', name: '常见问题', text: '0' },
])
 
// H5等平台拨打电话回调
const clickContent = () => {
	uni.makePhoneCall({
		phoneNumber: "114"
	})
}
</script>

在小程序平台下,如果想使用在线客服回复模式,需要添加客服,我们需要来到我们的小程序管理平台,然后选择功能选项找到客服然后添加添加相关客服的人员信息,然后客服人员通过扫描该模块下移动端的二维码进入客服系统然后就可以回复相关客户的信息了:

大致呈现的效果如下所示,这里由于博主是个人开发,联系客服的真正实现就不再赘述了,大家可以自己去添加客服然后尝试一下:

🏝️样式布全局

为了方便后期项目使用到公共的样式属性,避免重复引入颜色值发生的错误修改,这里我们把一些公共样式部署在全局样式里面,首先我们把公共样式存储在common文件夹下的style文件里面,在该文件夹中创建公共样式,如下我们上面要消除的怪异盒模型,以及接下来要处理的公共背景:

view, swiper, swiper-item {
	box-sizing: border-box;
}

.pageBg {
	background: 
		linear-gradient(to bottom, transparent, #fff 400rpx),
		linear-gradient(to right, #beecd8 20% , #fff);
	min-height: 80vh;
}

然后接下来我们在根组件中引入该样式,在根组件中不采用scoped进行样式隔离,所以书写的样式都是全局样式,如下所示:

如果想创建一些全局的基础css样式,比如字体的大小,颜色,粗细,风格等等,这里我们需要在uni-app中自带的全局css变量中进行设置,如下页面可以看到uni-app本身就自带一些全局css变量,如果我们想修改的话,则需要单独写一个自定义的变量,这里我们为了方便,直接在该全局文件中引入我们自定义的基础css文件,如下所示:

引入文件之后,接下来开始在基础的样式组件中书写样式,如下所示:

$brand-theme-color: #008c8c; // 品牌主题色 

$border-color: #e0e0e0; // 边框颜色
$border-color-light: #efefef; // 边框亮色

$font-color-primary: #008c8c; // 默认文字颜色
$font-color-title: #676767; // 标题文字颜色
$font-color-small-title: #606060; // 小标题文字颜色

每次修改完样式文件之后,都需要对项目进行一个重启,这样项目代码才能识别到你新修改的样式变量,这里我们简单的使用一下,如下所示:

如果想修改我们之前设置的css代码,修改成我们配置好的全局基础css变量的话,直接点击全局搜索,把我们之前设置的css属性值替换成我们的变量值即可:

当然对于uni-app的图标颜色的修改,之前我们默认是在行内样式中修改其颜色,但是我们设置的全局基础css变量配置是不支持行内样式的,html模板是无非识别我们css的变量的,所以这里我们需要直接修改uni-icon中的css代码,通过deep方式进行样式穿透修改,最终也能实现我们想要的效果,代码如下所示:

后续内容会继续更新,欢迎大家订阅小程序专栏,继续学习!

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

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

相关文章

linux更换为阿里云的yum下载镜像源

更换镜像源 1.备份&#xff1a; sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 2.创建一个文件: cd /etc/yum.repos.d/ touch CentOS-Base.repo 3.往CentOS-Base.repo添加内容 vi CentOS-Base.repo 添加以下内容&#xff1a; [base…

vue3 组合式 API:setup()

查看vue3官网介绍&#xff1a;组合式 API&#xff1a;setup() 在 Vue 3 中&#xff0c;组合式 API 的 setup() 函数是一个非常重要的特性&#xff0c;它提供了一种更灵活和可维护的方式来组织组件的逻辑。 基本概念 setup() 函数是在组件实例创建之前执行的&#xff0c;它用于…

重复玩一个游戏就是自闭症吗?自闭的特征有哪些?

重复玩一个游戏并不一定是自闭症的标志。儿童在成长过程中&#xff0c;有时会因为对某个游戏或活动的喜爱而反复进行&#xff0c;这是他们探索世界、发展兴趣和技能的一种方式。然而&#xff0c;如果这种行为伴随着其他自闭症的典型特征&#xff0c;如语言障碍、社交障碍和兴趣…

C语言 ——— 修改默认对齐数以及结构传参

目录 前言 修改默认对齐数 结构体传参 前言 在上一篇中&#xff0c;有讲解到结构体内存对齐的规则以及默认对齐数 C语言 ——— 结构体内存对齐-CSDN博客 修改默认对齐数 修改默认对齐数所需要的宏命令&#xff1a;#pragma 代码演示&#xff1a; #pragma pack(1) // 将默…

MVCC工作原理深入解析

一、事务概述 mysql事务是指一组命令操作&#xff0c;在执行过程中用来保证要么全部成功&#xff0c;要么全部失败。事务是由引擎层面来支持的&#xff0c;MyISM引擎不支持事务&#xff0c;InnoDB引擎支持事务。 事务具有ACID四大特性 原子性&#xff08;Atomicity&#xff0…

XSS靶场(1-11关)

目录 简述xss xss第1关 xss第2关 ​编辑 xss第3关 xss第4关 xss第5关过滤了 on script xss第6关 xss第7关 xss第8关 xss第9关 xss第10关 xss11关 我把源代码靶场放到了最顶端 简述xss XSS攻击通常指的是通过利用网页开发时留下的漏洞&#xff0c;通过巧妙的方法…

【数据结构与算法 | 图篇】最小生成树之Prim算法

1. 前言 普里姆算法&#xff08;Prims Algorithm&#xff09;是一种用于寻找加权无向图中的最小生成树&#xff08;Minimum Spanning Tree, MST&#xff09;的贪心算法。 最小生成树是指对于一个给定的无向图&#xff0c;连接所有顶点且边的总权重最小的生成树。 2. 算法步骤 …

Spring Boot 核心配置

一、 Spring Boot配置文件分类 SpringBoot是基于约定的&#xff0c;所以很多配置都有默认值&#xff0c;但如果想使用自己的配置替换默认配置的话&#xff0c;就可以使用application.properties或者application.yml&#xff08;application.yaml&#xff09;进行配置 applicat…

外贸市场开发【越南】

​作为“新兴之秀” 越南的经济发展可谓是突飞猛进 并在2022年&#xff0c;成为全亚洲经济增长最快速经济体 经济的增长也让越南的地位变得不一样了 一起来看看外贸人聚焦的东南亚排名前五的越南 越南社会主义共和国&#xff0c;通称越南&#xff0c;是位于东南亚的中南半岛…

谷粒商城实战笔记-213-商城业务-认证服务-整合短信验证码服务

文章目录 一&#xff0c;开通阿里云云市场短信服务1&#xff0c;阿里云开通免费短信服务并调试2&#xff0c;整合短信服务2.1 下载HttpUtils代码2.2 开发调用短信服务的组件2.3 测试 HttpUtils代码 这一节主要内容是整合短信发送服务。 一&#xff0c;开通阿里云云市场短信服务…

多输入多输出 | Matlab实现CPO-BP冠豪猪优化算法优化BP神经网络多输入多输出预测

多输入多输出 | Matlab实现CPO-BP冠豪猪优化算法优化BP神经网络多输入多输出预测 目录 多输入多输出 | Matlab实现CPO-BP冠豪猪优化算法优化BP神经网络多输入多输出预测预测效果基本介绍程序设计往期精彩参考资料 预测效果 基本介绍 多输入多输出 | Matlab实现CPO-BP冠豪猪优化…

CUDA-MODE课程笔记 第6课: 如何优化PyTorch中的优化器

我的课程笔记&#xff0c;欢迎关注&#xff1a;https://github.com/BBuf/how-to-optim-algorithm-in-cuda/tree/master/cuda-mode CUDA-MODE课程笔记 第6课: 如何优化PyTorch中的优化器 课程内容 上面三张Slides讲述了运行时间&#xff08;runtime&#xff09;和内存使用&…

ChatGPT 3.5/4.0 新手使用手册(详细版)

1. 什么是 ChatGPT&#xff1f; ChatGPT是由 OpenAI 开发的先进人工智能语言模型&#xff0c;能够理解并生成自然语言文本。它可以帮助你进行写作、回答问题、提供建议&#xff0c;甚至参与对话。ChatGPT 3.5 和 4.0 是两个不同版本&#xff0c;它们都拥有强大的语言处理能力&…

sublime text 4 安装(含激活码)安装破解汉化 Sublime Text 4 的操作指南

sublime text 4 安装&#xff08;含激活码&#xff09; 一、下载步骤 官网地址&#xff1a;Sublime Text - the sophisticated text editor for code, markup and prosehttps://link.zhihu.com/?targethttps://www.sublimetext.com/ windows下载链接&#xff1a;Thank You -…

【数据结构算法经典题目刨析(c语言)】使用数组实现循环队列(图文详解)

&#x1f493; 博客主页&#xff1a;C-SDN花园GGbond ⏩ 文章专栏&#xff1a;数据结构经典题目刨析(c语言) 目录 一.题目描述 二.解题思路 1.循环队列的结构定义 2.队列初始化 3.判空 4.判满 5.入队列 6.出队列 7.取队首元素 8.取队尾元素 三.完整代码实…

【Datawhale AI夏令营第四期】魔搭-AIGC方向 Task03笔记 原神风格Lora尝试 ComfyUI Lora微调 补充选学内容

【Datawhale AI夏令营第四期】魔搭-AIGC方向 Task03笔记 原神风格Lora尝试 ComfyUI Lora微调 首先我们继续推进网课进度。 https://space.bilibili.com/1069874770 传送门 WorldArt锦书产品介绍&#xff1a; 我属实是没想到这个产品居然还可以用作遗迹鉴定和名家笔记仿写这样…

2.2算法的时间复杂度与空间复杂度——经典OJ

本博客的OJ标题均已插入超链接&#xff0c;点击可直接跳转~ 一、消失的数字 1、题目描述 数组nums包含从0到n的所有整数&#xff0c;但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗&#xff1f; 2、题目分析 &#xff08;1&#xff09;numsS…

Java流程控制之循环结构(附案例说明)超详细

循环结构&#xff1a;根据循环条件&#xff0c;重复性执行某段代码 for循环 while 循环 do-while 循环 凡是循环 就有4个要素&#xff1a; 1、初始化要素2、循环条件&#xff08;一定是boolean类型的变量或表达式&#xff09; 3、循环体 4、迭代部分 for 循环格式 for(1;2;…

阿里声音项目Qwen2-Audio的部署安装,在服务器Ubuntu22.04系统——点动科技

阿里声音项目Qwen2-Audio的部署安装&#xff0c;在服务器Ubuntu22.04系统——点动科技 一、ubuntu22.04基本环境配置1.1 更换清华Ubuntu镜像源1.2 更新包列表&#xff1a;2. 安装英伟达显卡驱动2.1 使用wget在命令行下载驱动包2.2 更新软件列表和安装必要软件、依赖2.2 卸载原有…

JAVA学习之知识补充(下)

六&#xff1a;File类与IO流&#xff1a; 这里给出三种常见的初始化方法&#xff1a; 通过文件路径初始化: File file new File("C:/example/test.txt");这种方法用于创建一个文件对象&#xff0c;该文件对象表示指定路径的文件或目录。例如&#xff1a;File fil…