赞
踩
注意:
JOSN是一种数据格式,在实际开发中,JSON总是以 配置文件 的形式出现。小程序项目中也不例外:通过不同的 .json配置文件,可以对小程序项目进行不同级别的配置。
小程序项目中由4种json配置文件,分别是:
app.json是当前小程序的全局配置,包括了小程序的所有页面路径、窗口外观、界面表现、底部tab等。Demo项目里边的app.json配置内容如下:
project.config.json是项目配置文件,用来记录我们对小程序开发工具所做的个性化配置,例如:
微信现已开放 小程序内搜索,效果类似于PC网站的SEO。sitemap.json 文件用来 配置小程序页面是否允许微信索引。
当开发者允许微信索引时,微信会通过爬虫的形式,为小程序的页面内容建立索引。当用户的所有关键字和页面的索引匹配成功的时候,小程序的页面将可能展示在搜索结果中。
小程序中的每一个页面,可以使用 .json文件来对本页面的窗口外观进行配置,页面中的配置项会覆盖 app.json 的 window中相同的配置项。
在app.json --> pages 中新增页面的存放路径,小程序开发者工具即可帮我们自动创建对应的页面文件。小程序会把排在第一位的页面当作项目首页进行渲染。
WXML 是小程序框架设计的一套标签语言,用来构建小程序页面的结构,其作用类似于网页开发中的HTML
WXSS是一套 样式语言,用于描述WXML的组件样式,类似于网页开发中的CSS
一个项目仅仅提供页面展示是不够的,在小程序中,我们通过.js文件来处理用户的操作。例如:响应用户的点击、获取用户的位置等等。
.js文件的分类:
宿主环境指的是 程序运行所必须的依赖环境。例如:
Android系统和iOS系统 是两个不同的宿主环境。安卓版的微信App是不能在iOS环境下运行的,所以,Android是安卓软件的宿主环境,脱离了宿主环境的软件是没有任何意义的。
手机微信是小程序的宿主环境
小程序借助宿主环境提供的能力,可以完成许多普通网页无法完成的功能
实现如图的flex横向布局效果:
关于display:flex; justify-content:space-around;的解释 弹性盒子(display: flex)布局超全讲解|Flex 布局教程_display:flex-CSDN博客
实现如图的纵向滚动效果:
属性 | 类型 | 默认值 | 说明 |
indicator-dots | boolean | false | 是否显示面板指示点 |
indicator-color | color | rgba(0,0,0,0.3) | 指示点颜色 |
indicator-active-color | color | #000000 | 当前选中的指示点颜色 |
autoplay | boolean | false | 是否自动切换 |
interval | number | 5000 | 自动切换时间间隔 |
circular | boolean | false | 是否采用衔接滑动 |
- <swiper class="swiper-container" indicator-dots="true" indicator-color="white" indicator-active-color="gray" autoplay="true" interval="3000" circular="true">
- <!-- 第1项 -->
- <swiper-item>
- <view class="item">A</view>
- </swiper-item>
- <!-- 第2项 -->
- <swiper-item>
- <view class="item">B</view>
- </swiper-item>
- <!-- 第3项 -->
- <swiper-item>
- <view class="item">C</view>
- </swiper-item>
- </swiper>
- .swiper-container{
- height: 150px; /* 轮播图容器的高度 */
- }
-
- .item{
- height: 100%;
- line-height: 150px;
- text-align: center;
- }
-
- swiper-item:nth-child(1) .item{
- background-color: lightgreen;
- }
- swiper-item:nth-child(2) .item{
- background-color: lightskyblue;
- }
- swiper-item:nth-child(3) .item{
- background-color: lightpink;
- }
通过text组件的 selectable / user-select 属性,实现长按选中文本内容的效果:
通过rich-text组件的 nodes 属性节点,把HTML字符串渲染为对应的UI结构:
- <!-- 按钮组件的基本使用 -->
- <!-- 通过 type 属性指定按钮颜色类型 -->
- <button>默认按钮</button>
- <button type="primary">主色调按钮</button>
- <button type="warn">警告按钮</button>
- <!-- size = "min" 小尺寸按钮 -->
- <button size="mini">默认按钮</button>
- <button type="primary" size="mini">主色调按钮</button>
- <button type="warn" size="mini">警告按钮</button>
- <!-- plain 镂空按钮 -->
- <button plain="true">默认按钮</button>
- <button type="primary" plain="true">主色调按钮</button>
- <button type="warn" plain="true">警告按钮</button>
image组件的 mode 属性用来指定图片的 裁剪 和 缩放 模式,常用的 mode 属性值如下:
mode值 | 说明 |
scaleToFill | (默认值)缩放模式, 不保持纵横比缩放图片,使图片的宽高完全拉伸至填满image元素 |
aspectFit | 缩放模式,保持纵横比缩放图片,使图片的长边能完全显示出来。也就是说,可以完整的将图片显示出来 |
aspectFill | 缩放模式,保持纵横比缩放图片,只保证图片的短边能完全显示出来。即 图片通常只在水平或垂直方向是完整的,另一个方向将会发生截取 |
widthFix | 缩放模式,宽度不变,高度自动变化,保持原图宽高比不变 |
heightFix | 缩放模式,高度不变,宽度自动变化,保持原图宽高比不变 |
小程序中的API是由宿主环境提供的,通过这些丰富的小程序API,开发者可以方便的调用微信提供的能力,例如:获取用户信息、本地存储、支付功能等。
1、了解 权限管理需求
在中大型的公司里,人员的分工非常仔细:同一个小程序项目,一般会有不同岗位、不同角色的员工同时参与设计和开发。
此时处于管理需要,我们迫切需要对不同岗位、不同角色的员工的权限进行边界的划分,使他们能够高效的进行协同工作。
2、了解项目成员的组织结构
3、小程序的开发流程
提出需求 → 设计 → 开发 → 体验 → 测试 → 发布
1、软件开发过程中的不同版本
在软件开发工程中,根据时间节点的不同,会产出不同的软件版本,例如:
2、小程序的版本
3、发布上线
整体步骤:
数据绑定的基本原则
<view>{ { 要绑定的数据名称 } } </view>
Mustache语法的应用场景
绑定内容
动态绑定内容
页面数据如下:
页面结构如下:
绑定属性
动态绑定属性
页面数据如下:
页面结构如下:
注:可以添加 mode属性使图片自适应展示
运算(三元运算、算术运算等)
三元运算
页面数据如下:
页面结构如下:
算术运算
页面数据如下:
页面结构如下:
在微信小程序中,
random
是一个常用的方法,用于生成一个 [0, 1) 之间的随机浮点数。
toFixed()
是 JavaScript 中Number
对象的一个方法,用于将数字格式化为具有指定小数位数的字符串。你看到的类似这样的代码:
var randomNum = Math.random().toFixed(2);
在上面的代码中:
Math.random()
生成一个 [0, 1) 之间的随机浮点数。.toFixed(2)
将这个浮点数格式化为一个字符串,并保留两位小数。所以,
randomNum
会是一个形如 "0.xx" 的字符串,其中 "xx" 是两位随机小数。如果你想在微信小程序中生成一个具有特定小数位数的随机浮点数,你应该首先使用
Math.random()
生成随机数,然后使用toFixed()
进行格式化。如果你需要的是一个数字而不是字符串,你可以再次使用parseFloat()
或Number()
来转换它。
var randomNum = parseFloat((Math.random() * 100).toFixed(2)); // 生成一个0到99.99之间的随机浮点数
请注意,使用
toFixed()
会四舍五入到指定的小数位数,并且结果是一个字符串。因此,如果你想再次得到一个数字,你需要进行转换。
事件是渲染层到逻辑层的通讯方式。通过事件可以将用户在渲染层产生的行为,反馈到逻辑层进行业务的处理。
类型 | 绑定方式 | 事件描述 |
tap | bindtap 或 bind:tap | 手指触摸后马上离开,类似于HTML中的click事件 |
input | bindinput 或 bind:input | 文本框的输入事件 |
change | bindchange 或 bind:change | 状态改变时触发 |
当事件回调触发的时候,会收到一个事件对象event,它的详细属性如下表所示:
属性 | 类型 | 说明 |
type | String | 事件类型 |
timeStamp | integer | 页面打开到触发事件所经过的毫秒数 |
target | Object | 触发事件的组件的一些属性值集合 |
currentTarget | Object | 当前组件的一些属性值集合 |
detail | Object | 额外的信息 |
touches | Array | 触摸事件,当前停留在屏幕中的触摸点信息的数组 |
changedTouches | Array | 触摸事件,当前变化的触摸点信息的数组 |
target是触发该事件的源头组件,currentTarget是当前事件所绑定的组件。举例如下:
点击内部按钮时,点击事件以 冒泡 的方式向外扩散,也会触发外层 view 的 tap 事件处理函数。
此时,对于外层的view来说:
如同你去拍超级风暴,target相当于风暴中心,currentTarget相当于你站的位置
在小程序中,不存在HTML中的onclick鼠标点击事件,而是通过tap事件来响应用户的触摸行为。
<button type = "primary" bindtap = "btnTapHandler">按钮</button>
通过调用 this.setData(dataObject)方法,可以给页面data中的数据重新赋值,示例如下:
小程序中的事件传参比较特殊,不能在绑定事件的同时为事件处理函数传递参数。例如,下面的代码不能正常工作:
<button type="primary" bindtap="btnHandler(123)">事件传参</button>
因为小程序会把bindtao的属性值统一当作事件名称来处理,相当于要调用一个名称为btnHandler(123)的事件处理函数。
可以为组件提供 data-* 自定义属性传参,其中 *代表的是参数的名字。示例如下:
<button bindtap="btnHandler" data-info="{{2}}">事件传参</button>
在事件处理函数中,通过event.target.dataset.参数名 可以获取到 具体参数的值,示例如下:
- btnHanlder(event){
- //dataset 是一个对象,包含了所有通过 data-* 传递过来的参数项
- console.log(event.target.dataset)
- //通过 dataset 可以访问到具体参数的值
- console.log(event.target.dataset.info)
- }
在小程序中,通过 input事件 来响应文本框的输入事件,语法格式如下:
<input bindinput="inputHandler">
- inputHandler(e){
- //e.detail.value 是变化股后,文本框最新的值
- console.log(e.detail.value)
- }
步骤:
在小程序中,使用 wx:if = "{{ condition }}" 来判断是否需要渲染该代码块:
<view wx:if="{{ condition }}"> True </view>
也可以用 wx:elif 和 wx:else 来添加 else 判断:(else不用加任何条件,代表最后一种情况)
- <view wx:if="{{type === 1}}"> 男 </view>
- <view wx:elif="{{type === 2}}"> 女 </view>
- <view wx:else> 保密 </view>
如果要一次性控制多个组件的展示与隐藏,可以使用一个 <block></block>标签将多个组件包装起来,并在<block>标签上使用 wx:if 控制属性,示例如下:
- <block wx:if="{{true}}">
- <view> view1 </view>
- <view> view2 </view>
- </block>
注:<block>并不是一个组件,它只是一个包裹性质的容器,不会在页面中做任何渲染。
在小程序中,直接使用 hidden="{{ condition }}" 也能控制元素的显示与隐藏:
<view hidden="{{ condition }}"> 条件为 true 隐藏,条件为 false 显示 </view>
通过wx:for可以根据指定的数组,循环渲染重复的组件结构,示例如下:
- <view wx:for="{{array}}">
- 索引是:{{index}} 当前项是:{{item}}
- </view>
默认情况下,当前循环项的索引用index表示;当前循环项用item表示。
示例代码:
- <view wx:for="{{array}}" wx:for-index="idx" wx:for-item="itemName">
- 索引是:{{idx}},当前项是:{{itemName}}
- </view>
类似于Vue列表渲染中的 :key,小程序再实现列表渲染时,也建议为渲染出来的列表项指定唯一的key值,从而提高渲染的效率,示例代码如下:
- //index.wxml
- <view wx:for="{{userList}}" wx:key="id">{{item.name}}</view>
-
-
- //index.js
- data: {
- arr1:['苹果','华为','小米'],
- array:['苹果','华为','小米'],
- userList:[
- {id:1,name:'小红'},
- {id:2,name:'小黄'},
- {id:3,name:'小白'}
- ]
- }
WXSS 是一套 样式语言,用于美化WXML的组件样式,类似于网页开发中的CSS。
WXSS具有CSS大部分特性,同时,WXSS还对CSS进行了扩充以及修改,以适应微信小程序的开发。
与CSS相比,WXSS扩展的特性有:
rpx(responsive pixel)是微信小程序独有的,用来解决屏适配的尺寸单位。
rpx的实现原理:鉴于不同设备屏幕的大小不同,为了实现屏幕的自动适配,rpx把所有设备的屏幕,在宽度上等分为750份(即:当前屏幕的总宽度为750rpx)
小程序在不同设备上运行的时候,会自动把rpx的样式单位换算成对应的像素单位来渲染,从而实现屏幕适配。
在iPhone6上,屏幕宽度为375px,共有750个物理像素,等分为750rpx。则:
750rpx = 375px = 750物理像素
1rpx = 0.5px = 1物理像素
设备 | rpx换算px(屏幕宽度/750) | px换算rpx(750/屏幕宽度) |
iPhone5 | 1rpx = 0.42px | 1px = 2.34rpx |
iPhone6 | 1rpx = 0.5px | 1px = 2rpx |
iPhone6 Plus | 1rpx = 0.552px | 1px = 1.81rpx |
官方建议:开发微信小程序时,设计师可以用iPhone6作为视觉稿的标准。
开发举例:在iPhone6上如果要绘制宽100px,高20px的盒子,换算成rpx单位,宽高分别为200rpx和40rpx。
使用WXSS提供的 @import 语法,可以导入外联的样式表。
@import 后跟需要导入的外联样式表的相对路径,用 ; 表示语句结束。示例如下:
定义在app.wxss中的样式为全局样式,作用于每一个页面。
在页面 .wxss 文件中定义的样式为局部样式,只作用于当前页面。
注意:
小程序根目录下的 app.josn 文件时小程序的全局配置文件。常用的配置项如下:
属性名 | 类型 | 默认值 | 说明 |
navigationBarTitleText | String | 字符串 | 导航栏标题文字内容 |
navigationBarBackgroundColor | HexColor | #000000 | 导航栏背景颜色,如#000000 |
navigationBarTextStyle | String | white | 导航栏标题颜色,仅支持 black / white |
backgroundColor | HexColor | #ffffff | 窗口的背景色 |
backgroundTextStyle | String | dark | 下拉loading的样式,仅支持 dark / light |
enablePullDownRefresh | Boolean | false | 是否全局开启下拉刷新 |
onReachBottomDistance | Number | 50 | 页面上拉触底事件触发时距页面底部距离,单位为px |
1、2、3是用来配置导航栏相关的样式效果;4、5用来配置窗口背景相关的;6、7用来控制页面效果的选项
设置步骤:app.json ---> window ---> navigationBarTitleText
设置步骤:app.json ---> window ---> navigationBarBackgroundColor
不支持文本颜色,只支持以#开头的
设置步骤:app.json ---> window ---> navigationBarTextStyle
需求:将导航条上的标题从默认的black改为white
↓
注意:navigationBarTextStyle 的可选值只有 black 和 white
概念:下拉刷新是移动端的专有名词,指的是通过手指在屏幕上的下拉滑动操作,从而重新加载页面数据的行为。
设置步骤:app.json ---> window ---> enablePullDownRefresh 改为true
注意:在app.json中启用下拉刷新功能,会作用于每一个小程序页面!
模拟器并不能百分百还原真机操作,调试时需要真机预览进行测试
当全局开启下拉刷新功能之后,默认的窗口背景为白色。如果自定义下拉刷新窗口背景色,设置步骤为:app.json ---> window ---> backgroundColorTop 为指定16进制的颜色值#efefef
当全局开启下拉刷新功能之后,默认窗口的loading样式为白色,如果要更改loading样式的效果,设置步骤为:app.json ---> window ---> backgroundTextStyle 为指定值 dark / light。
概念:上拉触底是移动端的专有名词,通过手指在屏幕上的上拉滑动操作,从而加载更多数据的行为。
设置步骤为:app.json ---> window ---> onReachBottomDistance
注意:默认距离为50px,如果没有特殊需求,使用默认值即可。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。