小程序基础知识
1. 认识什么是小程序
什么是微信小程序
微信小程序是一种运行在微信内部的 轻量级 应用程序。
在使用小程序时 不需要下载安装,用户 扫一扫 或 搜一下 即可打开应用。它也体现了 “用完即走” 的理念,用户不用关心安装太多应用的问题。它实现了应用“触手可及”的梦想,应用无处不在,随时可用,但又 无须安装卸载。
特点:
小程序的四大特性:无须安装、用完即走、无须卸载、触手可及
- 无须安装:体积小,用户感知不到下载的过程
- 触手可及:用户 扫一扫 或 搜一下 即可打开应用,通过下拉能访问使用的小程序
- 用完即走,无须卸载
2. 微信小程序账号注册
小程序开发 与 网页开发不一样,在开始微信小程序开发之前,需要访问 微信公众平台,注册一个微信小程序账号。
在拥有了小程序的账号以后,我们才可以开发和管理小程序,后续可以通过该账号进行开发信息的设置、成员的添加,也可以用该账号查看、运营小程序的相关数据。
📌 注意事项:
在申请账号前,我们需要先准备一个邮箱,该邮箱要求:
1️⃣ 未被微信公众平台注册❗
2️⃣ 未被微信开放平台注册❗
3️⃣ 未被个人微信号绑定过 !如果被绑定了需要解绑 或 使用其他邮箱 ❗
-
打开 微信公众平台,点击立即注册
-
选择注册的帐号类型,在这里我们需要 选择小程序
-
输入账号信息
-
邮箱激活,需要进入邮箱进行激活
-
信息登记,注册类型 (需要选择中国大陆和个人,企业其他需要资质认证)
-
主体信息登记与确认
📌 注意:
在进行管理员身份验证的时候,推荐使用自已的微信进行扫码,
将自已设置为小程序账号的管理员,方便以后对小程序进行开发、成员等相关的设置
-
小程序注册完成,点击前往小程序,即可进入小程序后台
3. 完善小程序账号信息
在完成小程序账号的注册后,你便可以打开微信公众平台对小程序账号进行一些设置,这是你开发前的准备工作,完善后才可以进入后续的开发步骤,这是因为小程序在后续进行提交审核的时候,小程序账号信息是必填项,因此在注册小程序以后,需要补充小程序的基本信息,如名称、图标、描述等。
📌 注意事项:
在填写小程序类目时不要选择游戏类型,否则微信官方将会视为小游戏开发 ❗
点击 前往填写,填写小程序基本信息即可
点击 前往设置 , 设置小程序类目信息
4. 小程序开发者 ID
小程序的开发者账号是免费的,只要开发者满足开发资质就可以免费注册,并且会获得对应的开发者 ID
一个完整的开发者 ID 由 **小程序 ID(AppID)**和一个 **小程序密钥(AppSecret)**组成。
小程序 ID 即 AppId 是小程序在整个微信账号体系内的唯一身份凭证,后续在很多地方都会用到,例如:新建小程序项目、真机调试、发布小程序等操作时,必须有小程序 ID。
小程序密钥 是开发者对小程序拥有所有权的凭证,在进行 微信登录、微信支付,或进行发送消息等高级操作时会使用到
在微信公众后台,单击左侧开发标签,选择 “开发管理”,在新的页面中点击 “开发设置”,就可以看到开发者 ID 信息。请妥善保管你的小程序 ID 和小程序密钥,在后续的开发中会经常使用到,获取位置见下图:
5. 开发成员和体验成员
小程序提供了两种不同的成员角色:项目成员 和 体验成员
项目成员:参与小程序开发、运营的成员,可登陆小程序管理后台,包括运营者、开发者及数据分析者。管理员可在“成员管理”中添加、删除项目成员,并设置项目成员的角色。
体验成员:参与小程序内测体验的成员,可使用体验版小程序,但不属于项目成员。管理员及项目成员均可添加、删除体验成员。
6. 微信开发者工具
为了帮助开发者简单和高效地开发和调试微信小程序,微信官方提供了 微信开发者工具,利用开发者工具可以很方便地进行小程序开发、代码查看以及编辑、预览和发布等功能。
在 微信开发者工具 下载页面,可以看到微信开发者工具包含三个版本:
- 稳定版:稳定性高,开发中一般推荐大家使用稳定版本
- 预发布版:稳定性尚可,一般包含新的、大的特性,通过了内部测试
- 开发版:稳定性差,主要用于尽快修复缺陷和敏捷上线小的特性,如果想体验新特性,可以使用这个版本
选择合适的版本进行下载,在下载完成后,双击下载好的微信开发者工具安装包,根据引导点击下一步、我接受、直至安装完成。第一次使用微信开发者工具的时候,需要使用手机微信扫码登录,登录成功即可进入项目选择界面
📌 注意事项:
微信开发者工具必须联网使用 ❗
8. 创建小程序项目
创建项目
使用小程序开发者工具创建一个新的项目,步骤如下:
-
打开微信开发者工具,左侧选择小程序,点击 + 号即可新建项目
-
在弹出的新页面,填写项目信息
- 项目名称:输入项目名称
- 目录:选择小程序开发文件夹,注意:**小程序的目录建议是空目录,否则官方会有提示,见下图**
- AppID:填写自己申请的小程序 AppID
- 开发模式:选择小程序
- 后端服务:选择不使用云服务
- 模板选择:选择不使用模板
-
点击确定,如果能够看到小程序的开发主界面,说明小程序项目已经创建成功
开发者工具设置
为了后续高效的对小程序项目进行开发,我们需要对微信开发者工具进行一些个性化的设置,例如:设置模拟器位置、编辑器主题、编辑区行高等,当然你可以继续使用官方默认的,也可以按照自己的喜好设置,设置步骤如下:
- 将小程序模拟器移动右侧:点击菜单栏的 视图 ➡ 外观 ➡ 将模拟器移到右侧,小程序模拟器即可调整到右侧
plaintext
<img src="http://8.131.91.46:6677/mina/base/028-模拟器位置.png" style="zoom:80%; border: 1px solid #ccc" /> <img src="http://8.131.91.46:6677/mina/base/029-模拟器位置.png" style="zoom:80%; border: 1px solid #ccc" /> |
- 小程序主题设置,点击菜单栏的 设置 ➡ 外观设置 ➡ 在弹框中将主题和调试工具选择为深色
- 小程序主题设置,点击菜单栏的 设置 ➡ 外观设置 ➡ 在弹框中将主题和调试工具选择为深色
plaintext
<img src="http://8.131.91.46:6677/mina/base/030-主题设置.png" style="zoom:80%; border: 1px solid #ccc" /> <img src="http://8.131.91.46:6677/mina/base/031-主题设置.png" style="zoom:80%; border: 1px solid #ccc" /> |
9. 小程序目录结构和文件介绍
在将小程序项目创建好以后,我们先来熟悉小程序项目的目录结构,如下图:
一个完整的小程序项目分为两个部分:主体文件、页面文件
主体文件 又称小程序全局文件,顾名思义,全局文件能够作用于整个小程序,影响到小程序的每个页面,且主体文件必须放到项目的根目录下,主要由三部分组成:
文件名 | 作用 | 是否必须 |
---|---|---|
app.js | 小程序入口文件 | 必须 |
app.json | 小程序的全局配置 | 必须 |
app.wxss | 小程序的全局样式 | 非必须 |
页面文件 是每个页面所需的文件,小程序页面文件都存放在 pages 目录下,一个页面一个文件夹,每个页面通常由四个文件组成,每个文件只对当前页面有效:
文件名 | 作用 | 是否必须 |
---|---|---|
.js | 页面逻辑 | 必须 |
.wxml | 页面结构 | 必须 |
.wxss | 页面样式 | 非必须 |
.json | 页面配置 | 非必须 |
📌 注意事项:
- 页面文件,wxss、json 文件能够覆盖主体文件中的样式和配置
- 强烈建议:页面文件夹名称和页面文件名称要保持一致 感叹号
新建小程序文件和文件夹作用清单:
shell
├─pages ➡ 小程序页面存放目录 │ │ ├─index ➡ index 文件夹代表是 index 页面所需的文件 │ │ index.js ➡ index 页面逻辑 │ │ index.json ➡ index 页面配置 │ │ index.wxml ➡ index 页面结构 │ │ index.wxss ➡ index 页面样式 │ .eslintrc.js ➡ Eslint 配置文件 │ app.js ➡ 小程序入口,即打开小程序首页执行的项目 │ app.json ➡ 小程序的全局配置 │ app.wxss ➡ 小程序的全局样式 │ project.config.json ➡ 小程序开发者工具配置 │ project.private.config.json │ sitemap.json ➡ 小程序搜索优化 |
10. 如何调试小程序
在进行项目开发的时候,不可避免的需要进行调试,那么如何调试小程序呢 ?
📌 注意事项:
微信开发者工具缓存非常严重❗❗❗❗
如果发现代码和预期不一样,先点击编译❗
编译后还是没有达到预期的效果,就需要清除缓存❗ 甚至重启项目才可以❗
11. 如何新建页面
第一种方式:
- 在 pages 目录上 点击右键
新建文件夹
,输入页面目录的名称,例如:list - 在 list 目录上 点击右键
点击 page
,输入页面文件的名称,例如:list
📌 注意事项:
- 在输入页面文件名称的时候,不要输入后缀名 ❗
- 新建页面成功以后,会在 app.json 的 pages 选项中新增页面路径
第二种方式:
在 app.json 的 pages 选项中,新增页面路径即可
在新增页面目录以后,会自动在 pages 目录下生成页面文件
12. 调试基础库
小程序调试基础库是指 微信开发者工具中可以选择的微信基础库版本。
微信基础库是指小程序的运行环境,给小程序提供了运行所需的各种 API 和工具,以及基础框架和运行逻辑等。
小程序开发者可以在微信开发者工具中选择所需的微信基础库版本,作为运行和调试小程序时的运行环境。
每个小程序有自己所允许使用的基础库最低版本要求,开发者需要选择要兼容的基础库版本,从而确保小程序的功能正常运行。
小程序配置文件
1. 配置文件介绍
JSON
是一种轻量级的数据格式,常用于前后端数据的交互,但是在小程序中,JSON
扮演的静态配置的角色,用于配置当前页面或组件的属性和行为,每个页面或组件也都可以拥有一个对应的 json 文件。
小程序中常见的配置文件有以下几种:
- 全局配置文件:
app.json
➡ 小程序全局配置文件,用于配置小程序的一些全局属性和页面路由。 - 局部配置文件:
页面.json
➡ 小程序页面配置文件,用于配置当前页面的窗口样式、页面标题等 - 项目配置文件:
project.config.json
➡ 小程序项目的配置文件,用于保存项目的一些配置信息和开发者的个人设置 - 搜索配置文件:
sitemap.json
➡ 配置小程序及其页面是否允许被微信索引,提高小程序在搜索引擎搜索到的概率
下面我们依次来说明一下它们的用途。
2. 全局配置
小程序 app.json
文件是小程序的全局配置文件,用于配置小程序的一些全局属性和页面路由。
当小程序启动时,会自动读取 app.json
文件中的配置,根据配置生成对应的页面和组件、界面表现、网络超时时间、底部 tab,在小程序运行过程中起着关键的作用。
2.1 pages
pages
字段:用于指定小程序由哪些页面组成,用于为了让小程序知道由哪些页面组成以及页面定义在哪个目录,每一项都对应一个页面的 路径(含文件名) 信息。
json
{ "pages": [ "pages/index/index", "pages/list/list" ] } |
📌 注意事项:
- 文件名不需要写文件后缀框架会自动去寻找对应位置的
.json
,.js
,.wxml
,.wxss
四个文件进行处理- 小程序中新增/减少页面,都需要对 pages 数组进行修改。
- 未指定
entryPagePath
时,数组的第一项代表小程序的初始页面(首页)
🔔 开发小技巧:
可以通过配置小程序的页面路径快速生成小程序的页面
详细文档: pages 配置项
2.2 window
window
字段: 用于设置小程序的状态栏、导航条、标题、窗口背景色。
属性 | 描述 | 类型 | 默认值 |
---|---|---|---|
navigationBarBackgroundColor | 导航栏背景颜色 | HexColor | #000000 |
navigationBarTextStyle | 导航栏标题颜色,仅支持 black / white | string | white |
navigationBarTitleText | 导航栏标题文字内容 | string | |
backgroundColor | 下拉 loading 的样式,仅支持 dark / light | string | dark |
enablePullDownRefresh | 是否开启全局的下拉刷新 | boolean | false |
onReachBottomDistance | 页面上拉触底事件触发时距页面底部距离单位为 px | number | 50 |
我们按照下图来配置 window
json
{ "window": { "backgroundTextStyle": "light", "backgroundColor": "#eee", "navigationBarBackgroundColor": "#f3514f", "navigationBarTitleText": "慕尚花坊", "navigationBarTextStyle": "white", "enablePullDownRefresh": true } } |
详细文档: window 配置项
2.3 tabBar
tabBar
字段:定义小程序顶部、底部 tab
栏,如果小程序是一个多 tab 应用,例如:可以在客户端窗口的底部或顶部通过 tab 栏可以切换页面,可以通过 tabBar 配置项指定 tab 栏的表现,以及 tab 切换时显示的对应页面。
tabBar
配置项
属性 | 描述 | 类型 | 默认值 |
---|---|---|---|
color | tab 上的文字默认颜色,仅支持十六进制颜色 | HexColor | |
selectedColor | tab 上的文字选中时的颜色,仅支持十六进制颜色 | HexColor | |
backgroundColor | tab 的背景色,仅支持十六进制颜色 | HexColor | |
borderStyle | tabbar 上边框的颜色, 仅支持 black / white | string | black |
list | tab 的列表,详见 list 属性说明,最少 2 个、最多 5 个 tab | ||
position | tabBar 的位置,仅支持 bottom / top | string | bottom |
List 配置项:list 是一个数组,只能配置最少 2 个、最多 5 个 tab,tab 按数组的顺序排序,每个项都是一个对象
属性 | 描述 | 类型 | 是否必填 |
---|---|---|---|
pagePath | 页面路径,必须在 pages 中先定义 | string | 是 |
text | tab 上按钮文字 | string | 是 |
iconPath | 图片路径,icon 大小限制为 40kb, 建议尺寸为 81px * 81px, | string | 是 |
selectedIconPath | 选中时的图片路径,icon 大小限制为 40kb, 建议尺寸为 81px * 81px,不支持网络图片。 | string | 是 |
📌 注意事项:
- list 是一个数组,只能配置最少 2 个、最多 5 个 tab
- 当
position
为top
时,不显示 icon
我们按照下图来配置 tabBar
json
{ "tabBar": { "color": "#252933", "selectedColor": "#FF734C", "backgroundColor": "#ffffff", "borderStyle": "black", "list": [ { "text": "首页", "iconPath": "/assets/tabbar/home.png", "selectedIconPath": "/assets/tabbar/home-active.png", "pagePath": "pages/home/home" }, { "text": "列表", "iconPath": "/assets/tabbar/list.png", "selectedIconPath": "/assets/tabbar/list-active.png", "pagePath": "pages/list/list" }, { "text": "购物车", "iconPath": "/assets/tabbar/cart.png", "selectedIconPath": "/assets/tabbar/cart-active.png", "pagePath": "pages/cart/cart" }, { "text": "我的", "iconPath": "/assets/tabbar/my.png", "selectedIconPath": "/assets/tabbar/my-active.png", "pagePath": "pages/my/my" } ] } } |
详细文档: window 配置项
3. 页面配置
小程序的页面配置,也称局部配置,每一个小程序页面也可以使用自己的 .json 文件来对本页面的窗口表现进行配置
需要注意的是:页面配置文件的属性和 全局配置文件中的 window 属性几乎一致
只不过这里不需要额外指定 window 字段,因此如果出现相同的配置项,页面中配置项 会覆盖全局配置文件中相同的配置项。
属性 | 描述 | 类型 | 默认值 |
---|---|---|---|
navigationBarBackgroundColor | 导航栏背景颜色 | HexColor | #000000 |
navigationBarTextStyle | 导航栏标题颜色,仅支持 black / white | string | white |
navigationBarTitleText | 导航栏标题文字内容 | string | |
backgroundColor | 下拉 loading 的样式,仅支持 dark / light | string | dark |
enablePullDownRefresh | 是否开启全局的下拉刷新 | boolean | false |
onReachBottomDistance | 页面上拉触底事件触发时距页面底部距离单位为 px | number | 50 |
📌 注意事项:
页面配置项和
app.json
中的window
属性几乎一致,但这里不需要额外指定window
字段
json
{ "usingComponents": {}, "navigationBarTitleText": "商品分类", "navigationBarTextStyle": "white", "navigationBarBackgroundColor": "#00AF92", "enablePullDownRefresh": true, "backgroundColor": "#eee", "backgroundTextStyle": "light" } |
4. 项目配置文件
通常大家在使用一个工具的时候,都会针对各自喜好做一些个性化配置,例如 编译配置等等,当你换了另外一台电脑重新安装工具的时候,你还要重新配置。
考虑到这点,小程序开发者工具在每个项目的根目录都会生成一个 project.config.json
,你在工具上做的任何配置都会写入到这个文件,当你重新安装工具或者换电脑工作时,你只要载入同一个项目的代码包,开发者工具就自动会帮你恢复到当时你开发项目时的个性化配置,其中会包括编辑器的颜色、代码上传时自动压缩等等一系列选项
project.config.json
文件中配置公共的配置,
project.private.config.json
配置个人配置
project.private.config.json
文件同样可以对项目进行配置
project.private.config.json
中的相同设置优先级高于project.config.json
📌 注意事项:
- project.private.config.json 写到 .gitignore 避免版本管理的冲突。
- 与最终编译结果有关的设置 必须 设置到 project.config.json 中
可以在微信开发者工具,点击以下两个配置选项进行相关的设置,然后观察两个文件的变化即可。
项目配置文件的配置选项比较多,如有需要
大家可以参考详细的官方配置文档:项目配置文件
5. 支持使用 sass/less
小程序代码包要求代码文件为 wxml / wxss / js / json / wxs。
如果我们希望使用 sass 或 less 去开发小程序,就需要将 sass / less 文件编译成对应的 wxss 文件。
在 project.config.json
文件中,修改 setting
下的 useCompilerPlugins
字段为 ["sass"]
,即可开启工具内置的 sass 编译插件。 如需同时开启 typescript 编译插件,可将该字段修改为 [“typescript “, “sass”]。 目前支持三个编译插件:typescript、less、sass
json
{ "setting": { + "useCompilerPlugins": [ + "sass" + ] } } |
配置好以后,需要将 .wxss
改成 .scss
📌 注意:
我们在配置的时候,编译插件的名称是 sass,但是文件的后缀名是 .scss
这是因为 Sass 是 Css 预处理语言,scss 是 Sass 的一个语法版本
6. sitemap.json
微信现已开放小程序内搜索,当开发者允许微信索引时,微信会通过爬虫的形式,为小程序的页面内容建立索引。当用户的搜索词条触发该索引时,小程序的页面将可能展示在搜索结果中。
可以通过 sitemap.json
配置,或者管理后台页面收录开关来配置其小程序页面是否允许微信索引。语法如下:
json
{ "rules": [ { "action": "allow", "page": "*" } ] } |
常用配置项:
属性 | 属性说明 | 属性值 |
---|---|---|
action | 是否允许被搜索 | 可选项有:allow 、disallow |
page | 允许/不允许被搜索的页面 | 页面路径或者通配符 |
json
// 所有页面都会被微信索引(默认情况) { "rules": [ { "action": "allow", "page": "*" } ] } |
json
// 配置 path/to/page 页面不被索引,其余页面允许被索引 { "rules":[ { "action": "disallow", "page": "path/to/page" } ] } |
📌 注意事项:
- 没有 sitemap.json 则默认所有页面都能被索引
- sitemap.json 文件中默认的设置,是优先级最低的默认规则,所有页面都会被微信索引
常用样式和组件
1. 组件和样式介绍
在开 Web 网站的时候:
页面的结构由 HTML
进行编写,例如:经常会用到 div
、p
、 span
、img
、a
等标签
页面的样式由 CSS
进行编写,例如:经常会采用 .class
、#id
、element
等选择器
但在小程序中不能使用 HTML
标签,也就没有 DOM
和 BOM
,同时仅仅支持部分 CSS
选择器
不过不用担心,小程序中提供了同样的角色:
其中 WXML
充当的就是类似 HTML
的角色,只不过在 WXML
中没有div
、p
、 span
、img
、a
等标签,在 WXML
中需要使用 小程序提供的 view
、text
、image
、navigator
等标签来构建页面结构,**小程序提供的这些标签,我们称为 “组件”**,开发者可以通过组合这些基础组件进行快速开发。
WXSS
则充当的就是类似 CSS
的角色,WXSS
具有 CSS
大部分的特性,小程序在 WXSS
也做了一些扩充和修改,新增了尺寸单位 rpx
、提供了全局的样式和局部样式,另外需要注意的是WXSS
仅支持部分 CSS
选择器。
小程序给提供的组件文档:WXML
小程序样式官方文档:WXSS
2. 样式-尺寸单位
随着智能手机的发展,手机设备的宽度也逐渐多元化,这就需要开发者在开发的时候,需要适配不同屏幕宽度的手机。为了解决屏幕适配的问题,微信小程序推出了 rpx 单位
小程序运行在手机移动端,宿主环境是微信,因为手机尺寸的不一致,在写 CSS
样式时,开发者需要考虑到手机设备的屏幕会有不同的宽度和设备像素比,会采用一些技巧来算像素单位从而实现页面的适配。而 WXSS
在底层支持新的尺寸单位 rpx
,开发者可以免去换算的烦恼,只要交给小程序底层来换算即可。
rpx
: 小程序新增的拓展单位,可以根据屏幕宽度进行自适应,小程序规定任何型号手机:屏幕宽都为 750 rpx。
📌 注意事项:
小程序规定任何型号手机:屏幕宽都为 750 rpx
🔔 开发建议:
开发微信小程序时设计师可以用 iPhone6 作为视觉稿的标准。
iPhone6 的设计稿一般是 750px,小程序的宽是 750rpx
在我们开发小程序页面时,量取多少 px ,直接写多少 rpx,开发起来更方便,也能够适配屏幕的适配
原因:
设计稿宽度是 750px,而 iPhone6 的手机设备宽度是 375px, 设计稿想完整展示到手机中,就需要缩小一倍
在 iPhone6 下,px 和 rpx 的换算关系是:1rpx = 0.5px, 750rpx = 375px,刚好能够填充满整个屏幕的宽度
落地代码:
➡️ pages/index/index.wxml
html
<!-- 需求:绘制一个盒子,让盒子的宽度占据屏幕的一半 --> <!-- view 是小程序提供的组件,是容器组件,类似于 div,也是一个块级元素,占据一行 --> <!-- 如果想实现需求,不能使用 px,px 使固定单位,不能实现自适应,需要使用小程序提供的 rpx --> <!-- 微信小程序规定,不管是什么型号的手机,屏幕的宽度都是 750rpx --> <!-- rpx 单位能够实现自适应的 --> <view class="box">尚硅谷</view> |
➡️ pages/index/index.wxss
css
/* 通过演示使用 css 作为单位,px 是不具有响应式的 */ /* image { width: 375px; height: 600px; background-color: lightgreen; } */ .box { width: 375rpx; height: 600rpx; background-color: lightgreen; } |
3. 样式-全局样式和局部样式
在进行网页开发时,我们经常创建 global.css、base.css 或者 reset.css 作为全局样式文件进行重置样式或者样式统一,然后在每个页面或组件中写当前页面或组件的局部样式,小程序中也存在全局样式和局部样式,这一节我们来学习一下小程序中的全局样式和局部样式
知识点:
全局样式:指在 app.wxss
中定义的样式规则,作用于每一个页面,例如:设置字号、背景色、宽高等全局样式
局部样式:指在page.wxss
中定义的样式规则,只作用在对应的页面,并会覆盖 app.wxss 中相同的选择器。
案例:
在 app.wxss
中定义全局样式,设置 text
组件的颜色以及字号大小,这段样式将会作用于任意页面的 text
组件
css
/* app.wxss */ text { color: lightseagreen; font-size: 50rpx; } |
然后在 cate.wxss
中定义局部样式,设置 text
组件的颜色以及字号大小,会发现局部样式将全局样式进行了覆盖
css
/* pages/index/index.wxss */ text { color: red; font-size: 30rpx; } |
4. 划分页面结构-view 组件
使用小程序常用的组件实现项目首页的效果,会使用以下组件:
1.view 组件
2.text 组件
3.image 组件
4.navigator 组件
5.swiper 和 swiper-item 组件
6.scroll-view 组件
7.字体图标
分析页面结构,使用 view 组件将页面拆分成 4 个区域
view 是小程序提供的组件,是容器组件,类似于 div,也是一个块级元素,占据一行
html
<!-- 轮播图区域 --> <view class="swiper">1</view> <!-- 公司相关信息 --> <view class="info">2</view> <!-- 商品导航区域 --> <view class="goods-nav">3</view> <!-- 商品推荐区域 --> <view class="hot">4</view> |
5. 首页轮播图区域-swiper 组件
在前面我们已经介绍了小程序的组件应该怎么使用,又学习了小程序中的样式,接下来带着大家使用小程序提供的组件,完成小程序的基本结构,通过这个案例我们能够学习到小程序常用的组件以及一些布局技巧。
知识点:
在进行网页开发的时候,实现轮播图的时候,我们通常先使用 HTML 、CSS 实现轮播图的样式结构,然后使用 JS 控制轮播图的效果,或者直接使用插件实现轮播图的功能,而在小程序中实现小程序功能则相对简单很多。
在小程序中,提供了 swiper
和 swiper-item
组件实现轮播图:
swiper
:滑块视图容器,常用来实现轮播图,其中只可放置 swiper-item 组件,否则会导致未定义的行为swiper-item
:仅可放置在swiper组件中,宽高自动设置为100%,代表swiper
中的每一项
我们可以使用 swiper
组件提供的属性,实现轮播图的订制,常见属性如下:
属性 | 说明 | 类型 |
---|---|---|
indicator-dots | 是否显示面板指示点 | boolean (默认 false) |
indicator-color | 指示点颜色 | color (默认:rgba(0, 0, 0, .3)) |
indicator-active-color | 当前选中的指示点颜色 | color (默认:#000000) |
autoplay | 是否自动切换 | boolean (默认 false) |
interval | 自动切换时间间隔 | number (默认 5000) |
circular | 是否采用衔接滑动 | boolean (默认 false) |
其他属性… |
落地代码:
➡️ pages/index/index.wxml
html
<!-- 轮播图区域 --> <view class="swiper"> <!-- swiper 组件实现轮播图区域的绘制 --> <!-- swiper 组件,滑块视图容器 --> <swiper circular autoplay indicator-dots interval="2000" indicator-color="#efefef" indicator-active-color="#ccc" > <!-- swiper 组件内部不能写其他组件或内容 --> <!-- 在 swiper 组件内部只能写 swiper-item 组件 --> <!-- swiper-item 组件只能放到 swiper 组件中,宽高自动设置为 100% --> <swiper-item> 第一张轮播图 </swiper-item> <swiper-item> 第二张轮播图 </swiper-item> <swiper-item> 第三张轮播图 </swiper-item> </swiper> </view> |
➡️ pages/index/index.scss
css
page { height: 100vh; background-color: #efefef !important; } swiper { swiper-item { // 在 Sass 拓展语言中,& 符号表示父选择器的引用。它用于在嵌套的选择器中引用父选择器 // 下面这段代码在编译以后,生成的代码是 swiper-item:first-child &:first-child { background-color: skyblue; } &:nth-child(2) { background-color: lightcoral; } &:last-child { background-color: lightseagreen; } } } |
6. 首页轮播图区域-image 组件
在这一节中,我们开始来学习小程序中的image
组件,通过学习该组件掌握组件的学习方法和使用技巧
在小程序中没有 img 标签,添加图片需要使用小程序提供的image
组件,image
组件的语法如下:
html
<!-- src:图片资源地址 --> <!-- mode:图片裁剪、缩放的模式 --> <!-- lazy-load:图片懒加载,在即将进入一定范围(上下三屏)时才开始加载 --> <image src="/assets/tom.png" mode="heightFix" lazy-load=”{{ true }}“ /> |
落地代码
➡️ pages/index/index.wxml
html
<!-- 轮播图区域 --> <view class="swiper"> <swiper circular autoplay indicator-dots interval="2000" indicator-color="#efefef" indicator-active-color="#ccc" > <swiper-item> <!-- 在小程序中图片不能使用 img 标签,使用后不会生效 --> <!-- <img src="../../assets/banner/banner-1.png" alt=""/> --> <!-- 需要使用 images 组件 --> <!-- image 组件不给 src 属性设置默认值,也占据宽和高 --> <!-- image 默认具有宽度,宽是 320px 高度是 240px --> <!-- mode 属性:用来设置图片的裁切模式、纵横比例、显示的位置 --> <!-- show-menu-by-longpress 属性:长按转发给朋友、收藏、保存图片 --> <image src="../../assets/banner/banner-1.png" mode="aspectFill" show-menu-by-longpress /> </swiper-item> <swiper-item> <image src="../../assets/banner/banner-2.png" /> </swiper-item> <swiper-item> <image src="../../assets/banner/banner-3.png" /> </swiper-item> </swiper> </view> |
➡️ pages/index/index.scss
scss
/** index.wxss **/ page { height: 100vh; background-color: #efefef !important; } swiper { height: 360rpx; swiper-item { image { width: 100%; height: 100%; } // 在 Sass 拓展语言中,& 符号表示父选择器的引用。它用于在嵌套的选择器中引用父选择器 // 下面这段代码在编译以后,生成的代码是 swiper-item:first-child // &:first-child { // background-color: skyblue; // } // &:nth-child(2) { // background-color: lightcoral; // } // &:last-child { // background-color: lightseagreen; // } } } |
7. 公司宣传语区域-text 组件
落地代码:
➡️ pages/index/index.wxml
html
<!-- 公司相关信息 --> <view class="info"> <!-- text 是文本组件,类似于 span,是行内元素 --> <!-- user-select:文本是否可选 --> <!-- space:是否连续展示空格 --> <!-- <text user-select space="ensp">同城 配送</text> --> <text>同城配送</text> <text>行业龙头</text> <text>半小时送达</text> <text>100% 好评</text> </view> |
➡️ pages/index/index.scss
scss
.info { display: flex; justify-content: space-between; align-items: center; margin: 16rpx 0rpx; padding: 20rpx; font-size: 24rpx; background-color: #fff; border-radius: 10rpx; } |
8. 商品导航的区域-组件结合使用
到目前为止我们已经学习了 view
、text
、image
以及 swiper
和 swiper-item
组件的使用
接下来我们继续来使用小程序提供的组件实现首页的功能,这节我们需要实现的是商品导航区域的结构
知识点:
在网页开发中,实现该布局非常简单,使用 div
嵌套 或者 ul
包裹住 li
,li
在包裹住 img
就能够实现该效果
但在小程序中没有 HTML 中的 div
、ul
、li
标签,所以绘制导航区域需要使用小程序提供的的组件,我们先来学习小程序的两个组件:
view
:视图容器组件,相当于 HTML 中的div
,是一个块级元素,独占一行text
:文本组件,相当于span
,是一个行内元素
落地代码:
➡️ pages/index/index.wxml
html
<!-- view:视图容器,作用类似于 div,是一个块级元素,独占一行 --> <view class="navs"> <view> <!-- text:文本组件,类似于 span,是一个行内元素 --> <image src="/assets/cate-1.png" alt=""/> <text>爱礼精选</text> </view> <view> <image src="/assets/cate-2.png" alt=""/> <text>鲜花玫瑰</text> </view> <view> <image src="/assets/cate-3.png" alt=""/> <text>永生玫瑰</text> </view> <view> <image src="/assets/cate-4.png" alt=""/> <text>玫瑰珠宝</text> </view> <view> <image src="/assets/cate-5.png" alt=""/> <text>香水护体</text> </view> </view> |
➡️ pages/index/index.wxss
css
// 商品导航区域 .good-nav { display: flex; justify-content: space-between; background-color: #fff; padding: 20rpx 16rpx; border-radius: 10rpx; view { display: flex; flex-direction: column; align-items: center; image { width: 80rpx; height: 80rpx; } text { font-size: 24rpx; margin-top: 12rpx; } } } |
9. 跳转到商品列表页面-navigator
知识点:
点击商品导航区域,需要跳转到商品列表界面,在网页开发中,如果想实现页面的跳转需要使用 a 标签,在小程序中如果想实现页面的跳转则需要使用 navigator 组件,语法如下:
html
<!-- url:当前小程序内的跳转链接 --> <navigator url="/pages/list/list"> |
在小程序中,如果需要进行跳转,需要使用 navigation 组件,常用的属性有 2 个:
- url :当前小程序内的跳转链接
- open-type :跳转方式
- navigate:保留当前页面,跳转到应用内的某个页面。但是不能跳到 tabbar 页面
- redirect: 关闭当前页面,跳转到应用内的某个页面。但不能跳转到 tabbar 页面
- switchTab:跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面
- reLaunch:关闭所有页面,打开到应用内的某个页面
- navigateBack:关闭当前页面,返回上一页面或多级页面
📌 注意事项:
- 路径后可以带参数。参数与路径之间使用 ? 分隔,参数键与参数值用 = 相连,不同参数用 & 分隔
例如:/list?id=10&name=hua
,在onLoad(options)
生命周期函数 中获取传递的参数- 属性
open-type="switchTab"
时不支持传参
落地代码:
➡️ pages/index/index.wxml
: 调整 view 为 navigator
html
<!-- view:视图容器,作用类似于 div,是一个块级元素,独占一行 --> <view class="navs"> <navigator url="/pages/list/list"> <!-- text:文本组件,类似于 span,是一个行内元素 --> <image src="/assets/cate-1.png" alt=""/> <text>爱礼精选</text> </navigator> <navigator url="/pages/list/list"> <image src="/assets/cate-2.png" alt=""/> <text>鲜花玫瑰</text> </navigator> <navigator url="/pages/list/list"> <image src="/assets/cate-3.png" alt=""/> <text>永生玫瑰</text> </navigator> <navigator url="/pages/list/list"> <image src="/assets/cate-4.png" alt=""/> <text>玫瑰珠宝</text> </navigator> <navigator url="/pages/list/list"> <image src="/assets/cate-5.png" alt=""/> <text>香水护体</text> </navigator> </view> |
➡️ pages/index/index.wxss
:
css
// 商品导航区域 .good-nav { display: flex; justify-content: space-between; background-color: #fff; padding: 20rpx 16rpx; border-radius: 10rpx; view { + navigator { + display: flex; + flex-direction: column; + align-items: center; + } image { width: 80rpx; height: 80rpx; } text { font-size: 24rpx; margin-top: 12rpx; } } } |
10. 商品推荐区域-scroll-view
可滚动视图区域,适用于需要滚动展示内的场景,它可以在小程序中实现类似于网页中的滚动条效果,用户可以通过手指滑动或者点击滚动条来滚动内容,scroll-view 组件可以设置滚动方向、滚动条样式、滚动到顶部或底部时的回调函数等属性,可以根据实际需求进行灵活配置。
3.10.1 scroll-view 横向滚动
知识点:
使用横向滚动时,需要添加 scroll-x 属性,然后通过 css 进行结构绘制,实现页面横向滚动
落地代码:
➡️ pages/index/index.wxml
:
html
<!-- 商品推荐区域 --> <view class="hot"> <scroll-view class="scroll-x" scroll-x> <view>1</view> <view>2</view> <view>3</view> </scroll-view> </view> |
➡️ pages/index/index.wxss
:
scss
.hot { margin-top: 16rpx; .scroll-x { width: 100%; white-space: nowrap; background-color: lightblue; view{ display: inline-block; width: 50%; height: 80rpx; &:last-child{ background-color: lightseagreen; } &:first-child{ background-color: lightpink; } } } } |
3.10.2 scroll-view 纵向滚动
知识点:
使用竖向滚动时,需要给scroll-view一个固定高度,同时添加 scroll-y 属性,实现页面纵向滚动
落地代码:
➡️ pages/index/index.wxml:
html
<!-- 商品推荐区域 --> <view class="hot"> <scroll-view class="scroll-x" scroll-x> <view>1</view> <view>2</view> <view>3</view> </scroll-view> <scroll-view class="scroll-y" scroll-y> <view>1</view> <view>2</view> <view>3</view> </scroll-view> </view> |
➡️ pages/index/index.wxss
:
css
.hot { margin-top: 16rpx; .scroll-x { width: 100%; white-space: nowrap; background-color: lightblue; view{ display: inline-block; width: 50%; height: 80rpx; &:last-child{ background-color: lightseagreen; } &:first-child{ background-color: lightcoral; } } } + .scroll-y { + height: 400rpx; + background-color: lightsalmon; + margin-top: 60rpx; + + view { + height: 400rpx; + + &:nth-child(odd) { + background-color: lightseagreen; + } + + &:nth-child(even) { + background-color: lightcoral; + } + } + } } |
3.10.3 实现商品推荐区域横向滚动
落地代码
➡️ pages/index/index.wxml:
html
<!-- 推荐商品 --> <view class="good-hot"> <scroll-view scroll-x class="scroll-x"> <view> <view class="good-item"> <image src="../../assets/floor/1.png" mode=""/> <text>鲜花玫瑰</text> <text>66</text> </view> </view> <view> <view class="good-item"> <image src="../../assets/floor/2.png" mode=""/> <text>鲜花玫瑰</text> <text>77</text> </view> </view> <view> <view class="good-item"> <image src="../../assets/floor/3.png" mode=""/> <text>鲜花玫瑰</text> <text>88</text> </view> </view> <view> <view class="good-item"> <image src="../../assets/floor/4.png" mode=""/> <text>鲜花玫瑰</text> <text>99</text> </view> </view> <view> <view class="good-item"> <image src="../../assets/floor/5.png" mode=""/> <text>鲜花玫瑰</text> <text>100</text> </view> </view> </scroll-view> </view> |
➡️ pages/index/index.wxss:
scss
// 推荐商品区域 .good-hot { background-color: #fff; padding: 16rpx; border-radius: 10rpx; font-size: 24rpx; .scroll-x { width: 100%; white-space: nowrap; view { display: inline-block; width: 320rpx; height: 440rpx; margin-right: 16rpx; .good-item { display: flex; flex-direction: column; justify-content: space-between; text { &:nth-of-type(1) { font-weight: bold; } } } image { width: 100%; height: 320rpx; } &:last-child { margin-right: 0; } } } } |
11. 字体图标的使用
在项目中使用到的小图标,一般由公司设计师进行设计,如果如果自行设计这些图标会比较麻烦且耗费时间,这时候我们就可以使用到阿里巴巴矢量图库,设计好以后上传到阿里巴巴矢量图标库,然后方便程序员来进行使用。
阿里巴巴矢量图库是阿里巴巴集团推出的一个免费的矢量图标库和图标管理工具。它汇集了大量的精美图标资源,包括品牌图标和各种主题和分类的图标。用户可以在阿里巴巴矢量图库中搜索和浏览所需的图标,也可以上传和管理自己的图标资源。
小程序中的字体图标使用方式与 Web
开发中的使用方式是一样的。
首先我们先找到所需的图标,加入到项目库,进入项目库中生成链接。也快将字体图标库下载到本地
点击链接,会将生成的 CSS
在新的链接页面进行打开,ctrl + s
,将该文件重命名为.wxss
后缀名,然后保存到项目根目录下的static
文件夹下。
在全局样式文件app.wxss
中导入fonts.wxss
字体图标文件,然后获取到图标类名,在项目中使用即可,应用于页面
css
@import "./static/fonts.wxss"; |
html
<view class="myTest"> <view class="iconfont icon-tuikuan"></view> </view> |
注意:使用字体图标可能会报错:
shell
[渲染层网络层错误] Failed to load font http://at.alicdn.com/t/c/font_3946178_q5oidsl5xo.woff2?t=1680795910637 net::ERR_CACHE_MISS (env: Windows,mp,1.06.2303220; lib: 2.30.4)该错误可忽略,详见下面这个链接:
wx.loadFontFace(Object object) | 微信开放文档
但在控制台出现错误,会影响开发调试,解决方案是:将字体图标转换成 base64 的格式
落地代码:
➡️ app.wxss
:
scss
// 在导入样式文件以后,必须以分号结尾,否则会出现异常 @import "./iconfont/iconfont.scss"; |
➡️ pages/index/index.wxml
:
html
<!-- 公司信息 --> <view class="info"> <text><text class="iconfont icon-ps"></text> 同城配送</text> <text><text class="iconfont icon-lx"></text> 行业龙头</text> <text><text class="iconfont icon-time"></text> 半小时送达</text> <text><text class="iconfont icon-hp"></text> 100% 好评</text> </view> |
➡️ pages/index/index.wxss
:
scss
// 公司信息区域 .info { display: flex; justify-content: space-between; background-color: #fff; padding: 20rpx 16rpx; border-radius: 10rpx; font-size: 24rpx; + .iconfont { + font-size: 24rpx; + } } |
12. 背景图片的使用
注:提供的网络地址连接:
当编写小程序的样式文件时,我们可以使用 background-image
属性来设置一个元素的背景图像,但是小程序的 background-image
不支持本地路径。
html
<view class="image"></view> |
css
.image { background-image: url('../../static/微信.jpg'); } |
如图,在使用了本地资源图片以后,微信开发者工具提供的提示:
本地资源图片无法通过 WXSS 获取,可以使用网络图片,或者 base64,或者使用<image/>标签
css
.image { width: 100%; height: 400rpx; /* 本地资源图片无法通过 WXSS 获取 */ /* background-image: url('../../static/微信.jpg'); */ /* 使用网络图片 */ /* background-image: url('http://8.131.91.46:6677/TomAndJerry.jpg'); */ /* 使用 base64 格式展示图片 */ /* base64 编码的文件很长,这个地址老师在这边进行了简写,在测试的时候,需要自己将这里转成完成的 64 编码 */ background-image: url("data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAeAB4AAD/.....") background-position: center; background-size: cover; } |