最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

《微信小程序开发》第3章教案1

来源:动视网 责编:小OO 时间:2025-09-25 02:55:06
文档

《微信小程序开发》第3章教案1

第3章用微信小程序组件构建UI界面课程名称微信小程序开发图解案例教程项目名称用微信小程序组件构建UI界面任务名称用微信小程序组件构建UI界面课时目性质□演示性□验证性□设计性√综合性授课班级授课日期授课地点教学目标(1)掌握视图容器组件的使用,会制作海报轮播效果、页签切换效果、上下滑动效果以及左右滑动效果。(2)掌握基础内容组件的使用,包括图标组件、文本组件以及进度条组件的使用。(3)掌握表单组件的使用,利用表单组件来设计微信小程序的表单内容,可以提交表单以及重置表单内容。(4)掌握导航组
推荐度:
导读第3章用微信小程序组件构建UI界面课程名称微信小程序开发图解案例教程项目名称用微信小程序组件构建UI界面任务名称用微信小程序组件构建UI界面课时目性质□演示性□验证性□设计性√综合性授课班级授课日期授课地点教学目标(1)掌握视图容器组件的使用,会制作海报轮播效果、页签切换效果、上下滑动效果以及左右滑动效果。(2)掌握基础内容组件的使用,包括图标组件、文本组件以及进度条组件的使用。(3)掌握表单组件的使用,利用表单组件来设计微信小程序的表单内容,可以提交表单以及重置表单内容。(4)掌握导航组
第3章 用微信小程序组件构建UI界面

课程名称微信小程序开发图解案例教程项目名称用微信小程序组件构建UI界面

任务名称用微信小程序组件构建UI界面

课时8
项目性质□演示性    □验证性    □设计性    √综合性

授课班级授课日期授课地点
教学目标(1)掌握视图容器组件的使用,会制作海报轮播效果、页签切换效果、上下滑动效果以及左右滑动效果。

(2)掌握基础内容组件的使用,包括图标组件、文本组件以及进度条组件的使用。

(3)掌握表单组件的使用,利用表单组件来设计微信小程序的表单内容,可以提交表单以及重置表单内容。

(4)掌握导航组件的使用,保留当前页跳转以及关闭当前页跳转。

(5)掌握媒体组件的使用,包括音频组件、图片组件以及视频组件的使用。

(6)掌握地图组件和画布组件的使用。

教学内容(1)视图容器组件

(2)基础内容组件

(3)表单组件

(4)导航组件

(5)媒体组件

(6)地图组件

(7)画布组件

教学重点视图容器组件、基础内容组件、表单组件、导航组件、媒体组件

教学难点表单组件
教学准备装有微信小程序的开发工具的电脑

教学课件PPT

教材:《微信小程序开发图解案例教程(附精讲视频)(第2版)》

作业设计
教学过程

教学环节教学内容与过程

(教学内容、教学方法、组织形式、教学手段)

课前组织做好上课前的各项准备工作(打开电脑、打开课件、打开软件、打开U 盘中的素材位置、打开授课计划、教案等),吸引学生注意力。

课程说明【课前说明】

分别从微信小程序视图容器组件、基础内容组件、表单组件、导航组件、媒体组件、地图组件、画布组件等知识点进行初步的了解。

【目的】

使学生从了解本章的学习目标、学习重点、考评方式等方面明确学习本章知识的要求和目标。

课程内容描述3.1视图容器组件

视图容器组件共有5种:view视图容器、scroll-view可滚动视图区域、swiper滑块视图容器、movable-view可移动视图容器、cover-view覆盖原生组件的视图容器。

3.1.1 view视图容器

view视图容器是WXML界面布局的基础组件,它的使用和HTML里的DIV类似,主要用于界面的布局。view视图容器也有自己的属性,如表所示。

view属性

属性

类型默认值说明
hoverBooleanfalse是否启用单击态
hover-classStringnone指定按下去的样式类。当 hover-class="none"时,没有单击态效果
hover-start-timeNumber50按住后多久出现单击态,单位毫秒
hover-stay-timeNumber400手指松开后单击态保留时间,单位毫秒
在WXML界面里使用view布局,渲染出界面内容,如图所示。

view布局

具体代码如下:

flex-direction: row

1

2

3

flex-direction: column

1

2

3

3.1.2 scroll-view可滚动视图区域

scroll-view可滚动视图区域允许视图区域内容横向滚动或者纵向滚动,类似于浏览器的横向滚动条和垂直滚动条,scroll-view拥有自己的属性和事件,如表所示。

scroll-view属性

属性类型默认值说明
scroll-xBooleanfalse允许横向滚动
scroll-yBooleanfalse允许纵向滚动
upper-thresholdNumber50距顶部/左边多远时(单位px),触发 scrolltoupper 事件
lower-thresholdNumber50距底部/右边多远时(单位px),触发 scrolltolower 事件

scroll-topNumber设置竖向滚动条位置
scroll-leftNumber设置横向滚动条位置
scroll-into-viewString值应为某子元素id,则滚动到该元素,元素顶部对齐滚动区域顶部
bindscrolltoupperEventHandle滚动到顶部/左边,会触发 scrolltoupper 事件
bindscrolltolowerEventHandle滚动到底部/右边,会触发 scrolltolower 事件
bindscrollEventHandle滚动时触发,event.detail = {scrollLeft, scrollTop, scrollHeight, scrollWidth, deltaX, deltaY}
1.纵向滚动

允许内容纵向滚动,需要给一个固定高度,可以绑定滚动到顶部/左边(bindscrolltoupper)、滚动到底部/右边(bindscrolltolower)、滚动时(bindscroll)触发的事件,也可以滚动到指定的id区域(scroll- into-view)。下面实现纵向滚动,如图所示。

纵向滚动

(1)在wxml文件里使用scroll-view进行布局,设置scroll-y="true"纵向滚动,绑定bindscrolltoupper、bindscrolltolower、bindscroll、scroll-into-view、scroll-top事件,具体代码如下。

scroll-view纵向滚动

click me to scroll into view 

click me to scroll

(2)在js文件里设置颜色的数组,绑定to View和scroll Top 数据值,提供bindscrolltoupper、 bindscrolltolower、bindscroll、scroll-into-view、scroll-top事件函数,具体代码如下。

var order = ['red', 'yellow', 'blue', 'green', 'red'] Page({

data: {

toView: 'red', scrollTop: 100

},

upper: function(e) { console.log(e)

},

lower: function(e) { console.log(e)

},

scroll: function(e) { console.log(e)

},

tap: function(e) {

for (var i = 0; i < order.length; ++i) { if (order[i] === this.data.toView) {

this.setData({ toView: order[i + 1]

})

break

}

}

},

tapMove: function(e) { this.setData({

scrollTop: this.data.scrollTop + 10

})

}

})

这样就可以实现纵向滚动了,可以滚动到指定区域,也可以滚动到指定的位置,同时滚动到顶部或底部会触发相应的事件,在滚动过程中也可以触发相应的事件。

2.横向滚动

在使用“今日头条”或“腾讯新闻”时,在新闻列表的上方都会有新闻频道供我们选择,可以向左滑动和向右滑动来查看相应类别的新闻,可以采用scroll-view来实现这些新闻频道的横向滚动。

今日头条新闻频道

在wxml文件里使用scroll-view进行布局,设置scroll-x="true"横向滚动,具体代码如下。

新闻频道横向滚动

推荐

视频

热点

本地

社会

娱乐

科技

汽车

体育

财经

军事

国际

时尚

游戏

美文

这样就可以实现横向滚动了,可以向左滑动和向右滑动。

3.1.3 swiper滑块视图容器

swiper滑块视图容器用来在指定区域内切换显示内容,常用来制作海报轮播效果和页签内容切换效果,它的属性如表所示。

swiper属性

属性类型默认值说明
indicator-dotsBooleanfalse是否显示面板指示点
autoplayBooleanfalse是否自动切换
currentNumber0当前所在页面的 index
intervalNumber5000自动切换时间间隔
durationNumber500滑动动画时长
circularBooleanfalse是否采用衔接滑动
bindchangeEventHandlecurrent 改变时会触发 change 事件,event.detail = {current: current}
1.海报轮播效果

海报轮播效果常用来展示商品图片信息或者广告信息,是很多网站或者App软件都会采用的一种布局方式,如图所示。

    

海报1                                  海报2

(1)在wxml文件里,采用swiper滑块视图容器组件进行海报轮播区域的布局,具体代码如下:

(2)在js文件里,提供海报轮播的图片,设置是否自动播放,提供轮播的时长等数据,通过数据绑定的方式渲染到页面上,具体代码如下。

Page({

data:{ indicatorDots:true, autoplay:true, interval:5000, duration:1000, imgUrls:[

]

}

})

设置autoplay等于true时就可以自动进行海报轮播,设置indicatorDots等于true,代表显示面板指示点,同时可以设置interval自动切换时长、duration滑动动画时长。

2.页签内容切换效果

swiper滑块视图容器除了可以用来实现海报轮播效果,还可以实现页签切换效果。页签切换效果常用于多种方式的登录或者多种类别的切换,如图所示。

页签切换效果

(1)进入到wxml文件里,进行账号密码登录和手机快捷登录的界面布局设计,具体代码如下。

账号密码登录

手机快捷登录

 我是用来进行账号密码登录的区域

 我是用来进行手机快捷登录的区域

(2)进入到wxss文件里,给页面文件添加样式,具体代码如下。

.loginTitle{

display: flex;

flex-direction: row; width: 100%;

}

.select{

font-size:12px; color: red; width: 50%;

text-align: center; height: 45px;

line-height: 45px;

border-bottom:5rpx solid red;

}

.default{

font-size:12px; margin: 0 auto; padding: 15px;

}

.hr{

border: 1px solid #cccccc; opacity: 0.2;

}

(3)进入到js文件里,提供窗口的宽度、高度、当前面板的索引值,提供页签切换函数,具体代码如下。

Page({

data:{

currentTab:0, winWidth:0, winHeight:0

},

onLoad:function(options){ var page = this; wx.getSystemInfo({

success: function(res) { console.log(res);

page.setData({winWidth:res.windowWidth}); page.setData({winHeight:res.windowHeight});

}

})

},

switchNav:function(e){ var page = this;

if(this.data.currentTab == e.target.dataset.current){ return false;

}else{

page.setData({currentTab:e.target.dataset.current});

}

}

})

这样就可以实现在两种登录状态之间切换的效果了。页签切换时,页签的标题呈现为选中的状态,同时对应的内容也随之进行切换。

3.1.4 movable-view可移动视图容器

movable-view是一个可移动视图容器,在页面中可以做拖曳滑动。在使用这个组件的时候,需要先定义可移动区域movable-area,然后定义直接子节点movable-view,否则不能移动。movable-area 必须设置 width和height属性,不设置默认为10px;movable-view 必须设置width和height属性,不设置默认为10px, movable-view 默认为绝对定位,top和left属性为0px。movable-view可移动视图容器的属性如表所示。

movable-view属性

属性类型默认值说明
directionStringnonemovable-view的移动方向,属性值有all、vertical、horizontal、none
inertiaBooleanfalsemovable-view是否带有惯性
out-of-boundsBooleanfalse超过可移动区域后,movable-view是否还可以移动
xNumber / String定义x 轴方向的偏移,如果x 的值不在可移动范围内,会自动移动到可移动范围;改变x的值会触发动画
yNumber / String定义y 轴方向的偏移,如果y 的值不在可移动范围内,会自动移动到可移动范围;改变y的值会触发动画
dampingNumber20阻尼系数,用于控制x 或y 改变时的动画和过界回弹的动画,值越大移动越快
frictionNumber2摩擦系数,用于控制惯性滑动的动画,值越大摩擦力越大,滑动越快停止;必须大于0,否则会被设置成默认值
disabledBooleanfalse是否禁用
scaleBooleanfalse是否支持双指缩放,默认缩放手势生效区域是在movable-view内
scale-minNumber0.5定义缩放倍数最小值
Scale-maxNumber10定义缩放倍数最大值
scale-valueNumber1定义缩放倍数,取值范围为 0.5~10

bindchange

EventHandle

拖动过程中触发的事件,event.detail = {x: x, y: y, source: source}, 其中source表示产生移动的原因,值可为touch(拖动)、touch-out- of-bounds(超出移动范围)、out-of-bounds(超出移动范围后的回弹)、friction(惯性)和空字符串(setData)
bindscaleEventHandle缩放过程中触发的事件,event.detail = {scale: scale}

movable-view提供了两个特殊事件:htouchmove事件,指初次手指触摸后的移动为横向移动,如果 catch此事件,则意味着touchmove事件也被catch;vtouchmove事件,指初次手指触摸后的移动为纵向移动,如果catch此事件,则意味着touchmove事件也被catch。

下面使用movable-view可移动视图容器组件来进行滑动,黄色区域代表可以移动的区域,红色方块代表可以移动的组件,如图所示。

可移动视图容器

(1)在wxml文件里,使用movable-area和movable-view视图容器组件进行布局,具体代码如下。

(2)在js文件里,提供拖动函数、缩放函数,通过数据绑定的方式渲染到页面上,具体代码如下。

Page({

data: {

x: 0,

y: 0

},

tap: function (e) { this.setData({

x: 30,

y: 30

});

},

onChange: function (e) { console.log(e.detail)

},

onScale: function (e) { console.log(e.detail)

}

})

3.1.5 cover-view覆盖原生组件的视图容器

cover-view、cover-image这两个是覆盖原生组件的视图容器。比如在使用地图组件时,地图组件本身的功能很有局限,但是想放置一些特殊的内容或图片,这时就需要使用覆盖地图组件的视图容器。

cover-view是指覆盖在原生组件之上的文本视图,可覆盖的原生组件包括map、video、canvas、 camera,只支持嵌套cover-view、cover-image。

cover-image是指覆盖在原生组件之上的图片视图,可覆盖的原生组件同cover-view一样,支持嵌套 cover-view。

下面使用cover-view、cover-image覆盖原生组件的视图容器组件,在video视频播放组件上放置播放、暂停两个图片,同时放置一个时间内容显示区域,如图所示。

      

视频播放                                 覆盖视频播放组件

(1)在wxml文件里使用cover-view、cover-image覆盖原生组件的视图容器组件进行布局,具体代码如下。

0a0201000400" controls="{{false}}" event-model="bubble" style="width:100%">

00:00

(2)在wxss文件里添加样式,具体代码如下。

.controls {

position: relative; top: 50%; height: 50px;

margin-top: -25px; display: flex;

}

.play,.pause,.time { flex: 1;

height: 100%;

}

.time {

text-align: center;

background-color: rgba(0, 0, 0, .5); color: white;

line-height: 50px;

}

.img {

width: 40px; height: 40px; margin: 5px auto;

}

(3)在js文件里,提供视频播放、暂停函数,初始化视频播放组件,具体代码如下。

Page({

onReady() {

this.videoCtx = wx.createVideoContext('myVideo')

},

play() {

this.videoCtx.play()

},

pause() { this.videoCtx.pause()

}

})

3.2基础内容组件

基础内容组件包括icon图标组件、text文本组件、progree进度条组件、rich-text富文本组件。

3.2.1 icon图标

微信小程序提供了丰富的图标组件,这些图标组件应用于不同的场景,有成功、警告、提示、取消、下载等不同含义,如图3.10所示。

图 标

icon图标组件有3个属性:图标的类型type、图标的大小size和图标的颜色color,如表所示。

图标属性

属性类型默认值说明
typeStringicon的类型,有效值有:success、success_no_circle、info、 warn、waiting、cancel、download、search、clear
sizeNumber23icon的大小,单位为px
colorColoricon的颜色,同css的color
如何绘制图标呢?

(1)在wxml文件里,利用icon组件进行界面布局,具体代码如下。

(2)在js文件里,给图标的大小、颜色和类型提供数据,具体代码如下。

Page({

data: {

iconSize: [20, 30, 40, 50, 60, 70],

iconColor: [

'red', 'orange', 'yellow', 'green', 'rgb(0,255,255)', 'blue', 'purple'

],

iconType: [

'success', 'info', 'warn', 'waiting', 'safe_success', 'safe_warn', 'success_circle', 'success_no_circle', 'waiting_circle', 'circle', 'download', 'info_circle', 'cancel', 'search', 'clear'

]

}

})

3.2.2 text文本

text文本组件支持转义符"\\",比如换行\\n、空格\。 组件内只支持 嵌套,除了文本节点以外的其他节点都无法长按选中。

下面我们来看转义符的使用,具体代码如下:

我爱北京\我爱中国

我爱北京\\n我爱中国

界面效果如图所示。

转义符效果

从图中可以看出,\具有空格功能,\\n具有换行功能,同时也可以看出text文本组件是放置在同一行里,这一点不同于view组件,每个view组件都是单独一行。

3.2.3 progress进度条

Progress进度条组件是一种提高用户体验度的组件,可以通过进度条看到完整视频的长度、当前播放的进度,这样让用户能合理地安排自己的时间,提高用户体验度。微信小程序也提供了progress进度条组件, 它的属性如表所示。

进度条属性

属性类型默认值说明
percentFloat百分比为0~100
show-infoBooleanfalse在进度条右侧显示百分比
stroke-widthNumber6进度条线的宽度,单位为px
ColorColor#09BB07进度条颜色
activeBooleanfalse进度条从左往右的动画
示例代码如下:

界面效果如图所示。

进度条效果

3.2.4 rich-text富文本

rich-text富文本组件,可以在WXML页面文件显示一些富文本内容,比如显示HTML的一些元素内容。它有一个nodes节点列表属性,nodes 属性推荐使用 Array 类型,由于组件会将 String 类型转换为 Array 类型,因而性能会有所下降。nodes支持两种节点,通过type来区分,分别是元素节点和文本节点,

它默认的是元素节点,即在富文本区域里显示的HTML节点。

1.元素节点:type= node

元素节点

属性类型默认值说明
name标签名String支持部分受信任的HTML节点
attrs属性Object支持部分受信任的属性,遵循Pascal命名法
children子节点列表Array结构和nodes一致
2.文本节点:type= text

文本节点

属性类型默认值说明
text文本String支持entities
示例代码如下:

Page({

data: {

nodes: [{

name: 'div', attrs: {

class: 'div_class',

style: 'line-height: 60px; color: red;'

},

children: [{ type: 'text',

text: 'Hello World!'

}]

}]

},

tap() {

console.log('tap')

}

})

3.3丰富的表单组件

微信小程序提供了丰富的表单组件:button按钮组件、checkbox多项选择器组件、radio单项选择器组件、input单行输入框组件、textarea多行输入框组件、label改进表单可用性组件、picker滚动选择器组件、slider滑动选择器组件、switch开关选择器组件、form表单组件10种表单组件。

3.3.1 button按钮

button按钮组件提供3种类型按钮:基本类型按钮、默认类型按钮和警告类型按钮。同时提供两种大小形状的按钮:默认和mini两种大小按钮,如图所示。

按钮类型和大小

button按钮组件有很多属性,每个属性有不同的作用,如表所示。

按钮属性

属性类型默认值说明
sizeStringDefault有效值为:default、mini
typeStringDefault按钮的样式类型,有效值为primary、default、warn
plainBooleanFalse按钮是否镂空,背景色透明
disabledBooleanFalse是否禁用
loadingBooleanFalse名称前是否带 loading 图标

form-type

String

有效值为:submit、reset。用于
组件,单击分别会触发 submit、reset 事件

hover-class

String

button-hover

指定按钮按下去的样式类。当hover-class="none" 时,没有单击态效果
hover-start-timeNumber50按住后多久出现单击态,单位为毫秒
hover-stay-timeNumber400手指松开后单击态保留时间,单位为毫秒
从按钮属性中可以看出按钮可以设置不同大小、不同类型、是否镂空、是否禁用、按钮名称前是否带loading图标。针对form表单组件,按钮组件提供了提交表单和重置表单两个功能,具体代码如下所示。

 default 

 primary 

 warn 

点击设置以上按钮disabled属性

点击设置以上按钮plain属性

点击设置以上按钮loading属性

var types = ['default', 'primary', 'warn'] var pageObject = {

data: {

defaultSize: 'default', primarySize: 'default', warnSize: 'default', disabled: false,

plain: false, loading: false

},

setDisabled: function(e) { this.setData({

disabled: !this.data.disabled

})

},

setPlain: function(e) { this.setData({

plain: !this.data.plain

})

},

setLoading: function(e) { this.setData({

loading: !this.data.loading

})

}

}

for (var i = 0; i < types.length; ++i) { (function(type) {

pageObject[type] = function(e) { var key = type + 'Size'

var changedData = {} changedData[key] =

this.data[key] === 'default' ? 'mini' : 'default' this.setData(changedData)

}

})(types[i])

}

Page(pageObject)

界面效果如图所示。

按钮效果

3.3.2 checkbox多项选择器

checkbox多项选择器组件,也就是我们常说的复选框,它用来进行多项选择,它的属性如表所示。

多项选择器属性

属性类型默认值说明
valueString标识,选中时触发的change 事件,并携带 的 value
disabledBooleanFalse是否禁用
checkedBooleanFalse当前是否选中,可用来设置默认选中
colorColorcheckbox的颜色,同css的color
checkbox-group是用来容纳多个checkbox多项选择器的容器,它有一个绑定事件bindchange,中选中项发生改变时触发 change 事件,detail = {value:[选中的checkbox的value的数组]}。

下面演示一下checkbox多项选择器的使用,以及如何获取选中的value值。

(1)在wxml文件里使用checkbox进行界面布局,具体代码如下所示。

美国

中国

巴西

日本

英国

(2)在js文件里,添加checkboxChange 事件函数,获取复选框选中的值,将其打印出来,具体代码如下所示。

Page({

checkboxChange:function(e){ console.log(e.detail.value)

}

})

界面效果如图所示。

复选框value值

从图中可以看出,被禁用的复选框是不能使用的,在checkbox-group上面绑定bindchange事件,每次勾选时,会把所有勾选的复选框的值以数组的形式存在detail里。

3.3.3 radio单项选择器

radio单项选择器是与checkbox多项选择器对立的一个组件,每次只能选中一个radio单项选择器,选项间是一种互斥关系,它的属性如表所示。

单项选择器属性

属性类型默认值说明
valueString 标识。当该 选中时,

change 事件会携带的value

disabledBooleanFalse是否禁用
checkedBooleanFalse当前是否选中,可用来设置默认选中
colorColorradio的颜色,同css的color
radio-group是用来容纳多个radio单项选择器的容器,它有一个绑定事件bindchange, 中的选中项发生变化时触发 bindchange事件,event.detail = {value: 选中项radio的value}。

下面演示一下radio单项选择器的使用。

(1)在wxml文件里使用radio单项选择器进行界面布局,具体代码如下所示。

美国

中国

巴西

日本

英国

(2)在js文件里,添加radioChange 事件函数,获取单项选中的值,将其打印出来,具体代码如下所示。

Page({

radioChange:           function(e)           { console.log('radio发生change事件,携带value值为:', e.detail.value)

}

})

界面效果如图所示。

单项选择器value值

从图中可以看出,被禁用的单项选择器是不能使用的,在radio-group上面绑定bindchange事件,每次勾选时,只能使一个选项呈现为选中状态,同时会把相应的值存在detail里。

3.3.4 input单行输入框

input单行输入框,用来输入单行文本内容,它的属性如表所示。

单行输入框属性

属性类型默认值说明
ValueString输入框的初始内容
TypeStringTextinput 的类型,有效值为text、number、idcard、digit
PasswordBooleanFalse是否是密码类型
PlaceholderString输入框为空时占位符
placeholder-styleString指定 placeholder 的样式
placeholder-classStringinput-placeholder指定 placeholder 的样式类
DisabledBooleanFalse是否禁用
MaxlengthNumber140最大输入长度,设置为 -1 的时候不最大长度

cursor-spacing

Number

0

指定光标与键盘的距离,单位为px。取input距离底部的距离和 cursor-spacing 指定的距离的最小值作为光标与键盘的距离
auto-focusBooleanFalse(即将废弃,请直接使用focus)自动聚焦,拉起键盘
FocusBooleanFalse获取焦点

Bindinput

EventHandle

当键盘输入时,触发input事件,event.detail = {value: value},处理函数可以直接返回一个字符串,将替换输 入框的内容
BindfocusEventHandle输入框聚焦时触发,event.detail = {value: value}
BindblurEventHandle输入框失去焦点时触发,event.detail = {value: value}
BindconfirmEventHandle单击完成按钮时触发,event.detail = {value: value}
示例代码如下:

(1)在wxml文件里利用input单行输入框进行布局,具体代码如下所示。

使得输入框获取焦点

你输入的是:{{inputValue}}

(2)在js文件里给input单行输入框添加相应的事件并提供数据,具体代码如下所示。

Page({

data: {

focus: false, inputValue: ''

},

bindButtonTap: function() { this.setData({

focus: true

})

},

bindKeyInput: function(e) { this.setData({

inputValue: e.detail.value

})

},

bindReplaceInput: function(e) { var value = e.detail.value var pos = e.detail.cursor if(pos != -1){

//光标在中间

var left = e.detail.value.slice(0,pos)

//计算光标的位置

pos = left.replace(/11/g,'2').length

}

//直接返回对象,可以对输入进行过滤处理,同时可以控制光标的位置

return {

value: value.replace(/11/g,'2'), cursor: pos

}

//或者直接返回字符串,光标在最后边

//return value.replace(/11/g,'2'),

},

bindHideKeyboard: function(e) { if (e.detail.value === '123') {

//收起键盘wx.hideKeyboard()

}

}

})

界面效果如图所示。

input单行输入框

3.3.5 textarea多行输入框

textarea多行输入框是与input单行输入框对应的一个组件,它可以输入多行文本内容,它的属性如表所示。

多行输入框属性

属性类型默认值说明
valueString输入框的内容
placeholderString输入框为空时占位符
placeholder-styleString指定 placeholder 的样式
placeholder-classStringinput-placeholder指定 placeholder 的样式类
disabledBooleanFalse是否禁用
maxlengthNumber140最大输入长度,设置为 -1 的时候不最大长度

cursor-spacing

Number

0

指定光标与键盘的距离,单位为px。取textarea距离底部的距离和cursor-spacing指定的距离的最小值作为光标与键盘的距离
auto-focusBooleanFalse(即将废弃,请直接使用 focus)自动聚焦,拉起键盘
focusBooleanFalse获取焦点
auto-heightBooleanFalse是否自动增高,设置auto-height时,style.height不生效

fixed

Boolean

False

如果 textarea 是在一个 position:fixed 的区域,需要显示指定属性 fixed 为 true

bindlinechange

EventHandle

输入框行数变化时调用,event.detail = {height: 0, heightRpx: 0, lineCount: 0}

bindinput

EventHandle

当键盘输入时,触发input事件,event.detail = {value: value},处理函数可以直接返回一个字符串,将替换输入框的内容
bindfocusEventHandle输入框聚焦时触发,event.detail = {value: value}
bindblurEventHandle输入框失去焦点时触发,event.detail = {value: value}
bindconfirmEventHandle单击完成按钮时触发,event.detail = {value: value}
示例代码如下所示:

3.3.6 label改进表单可用性

label组件是用来改进表单可用性的,目前可以用来改进的组件有:

我是label组件内的内容

中国

美国

(2)在js文件里添加clickBtn、checkboxChange、radioChange 3个事件函数,分别打印不同的信息,具体代码如下所示。

Page({

clickBtn:function(){ console.log("单击了按钮组件");

},

checkboxChange:function(){ console.log("单击了多项选择器组件");

},

radioChange:function(){ console.log("单击了单选选择器组件");

}

})

(3)在wxml界面里可以看到

我是label组件内的内容

中国

美国

(2)在js文件里添加clickBtn、checkboxChange、radioChange 3个事件函数,分别打印不同的信息,具体代码如下所示。

Page({

clickBtn:function(){ console.log("单击了按钮组件");

},

checkboxChange:function(){ console.log("单击了多项选择器组件");

},

radioChange:function(){ console.log("单击了单选选择器组件");

}

})

(3)在wxml界面里可以看到

Page({

formSubmit:           function(e)            { console.log('form发生了submit事件,携带数据为:', e.detail.value)

},

formReset: function() { console.log('form发生了reset事件')

}

})

界面效果如图所示。

          

未填写表单                          填写表单

单击Reset按钮可以重置表单,单击Submit按钮组件,就可以把表单数据提交到js文件里进行处理,提交数据如图所示。

表单提交数据

3.4导航组件

微信小程序可以在页面中设置导航,可以使用navigator页面链接组件,也可以在js文件里设置导航进行页面跳转,同时可以设置导航条标题和显示动画效果。

3.4.1 navigator页面链接组件

navigator页面链接组件用来在WXML页面中实现跳转,它有3种类型:第1种是保留当前页跳转,跳转后可以返回当前页,它与wx.navigateTo跳转效果是一样的;第2种是关闭当前页跳转,无法返回当前页,它与wx.redirectTo跳转效果是一样的;第3种是跳转到底部标签导航指定的页面,它与wx.switchTab跳转效果是一样的。navigator页面链接组件的这些跳转效果都是通过open-type属性来控制的,具体属性如表所示。

navigato页面链接属性

属性类型默认值说明
urlString应用内的跳转链接

redirect

Boolean

False

打开方式为页面重定向,对应 wx.redirectTo(将被废弃,推荐使用open-type)

open-type

String

Navigate

可选值'navigate'、'redirect'、'switchTab',对应于wx.navigateTo、

wx.redirectTo、wx.switchTab的功能

hover-classStringnavigator-hover指定单击时的样式类,当hover-class="none"时,没有单击态效果
hover-start-timeNumber50按住后多久出现单击态,单位为毫秒
hover-stay-timeNumber600手指松开后单击态保留时间,单位为毫秒
下面来演示一下open-type不同导航类型的跳转效果。

(1)新建一个navigator项目,进入到app.json文件中,在pages属性里设置页面路径"pages/index/ index""pages/navigator/navigator""pages/redirect/redirect",具体代码如下所示。

{

"pages":[ "pages/index/index

"pages/navigator/navigator", "pages/redirect/redirect"

],

"window":{ "backgroundTextStyle":"light", "navigationBarBackgroundColor": "#fff", "navigationBarTitleText": " 导 航 ", "navigationBarTextStyle":"black"

},

}

(2)进入到pages/index/index.wxml文件里,设置导航的3种跳转方式:保留当前页跳转、关闭当前页跳转、跳转到tabBar页面,具体代码如下所示。

wx.navigateTo保留当前页跳转

wx.redirectTo关闭当前页跳转

wx. switchTab跳转到tabBar页面

(3)进入到pages/navigator/navigator.wxml文件里,进行界面布局,具体代码如下所示。

    保留当前页进行跳转,单击左上角可以返回到当前页    

(4)进入到pages/redirect/redirect.wxml文件里,进行界面布局,具体代码如下所示。

     关闭当前页进行跳转,跳转后无法返回到当前页     

(5)wx.navigateTo保留当前页跳转、wx.redirectTo关闭当前页跳转这两种方式可以正常跳转,但是 wx.switchTab跳转到tabBar页面这种方式是无法正常跳转的,它需要在app.json文件的tabBar属性里设置底部标签导航,具体代码如下所示。

{

"pages":[ "pages/index/index

"pages/navigator/navigator", "pages/redirect/redirect"

],

"window":{ "backgroundTextStyle":"light", "navigationBarBackgroundColor": "#fff", "navigationBarTitleText": " 导 航 ", "navigationBarTextStyle":"black"

},

"tabBar": { "selectedColor": "red", "list": [{

"pagePath": "pages/index/index", "text": "首页

"iconPath": "iconPath", "selectedIconPath": "selectedIconPath"

},{

"pagePath": "pages/redirect/redirect", "text": "当前页打开导航

"iconPath": "iconPath", "selectedIconPath": "selectedIconPath"

}]

}

}

(6)使用wx.switchTab跳转到tabBar页面这种方式可以正常跳转到指定的底部标签导航页面里,但是 wx.navigateTo保留当前页跳转、wx.redirectTo关闭当前页跳转这两种方式无法跳转,这是因为在app.json中配置的tabBar属性里设置了底部标签导航。

(7)navigator页面链接组件设置的跳转路径,如果带参数,像url="../navigator/navigator?title= navigator",获取title的值,可以在跳转页面里js文件的onLoad函数里获得,具体代码如下所示。

Page({

data:{}, onLoad:function(options){

console.log("title="+options);

}

})

3.4.2 wx.navigateTo保留当前页跳转

wx.navigateTo保留当前页面跳转到应用内的某个页面,使用wx.navigateBack可以返回到原页面,具体属性如表所示。

wx.navigateTo属性

属性类型是否必填说明

url

String

需要跳转的应用内非tabBar的页面的路径,路径后可以带参数。参数与路径之间使用?分隔,参数键与参数值用=相连,不同参数用&分隔;如 'path?key= value&key2=value2'
successFunction接口调用成功的回调函数
failFunction接口调用失败的回调函数
completeFunction接口调用结束的回调函数(调用成功、失败都会执行)
(1)进入到pages/index/index.wxml文件里,添加一个跳转按钮,保留当前页进行跳转,具体代码如下所示。

wx.navigateTo保留当前页跳转

wx.redirectTo关闭当前页跳转

wx. switchTab跳转到tabBar页面

保留当前页跳转

(2)进入到pages/index/index.js文件里,添加一个navigateBtn事件函数,保留当前页跳转到pages/ navigator/navigator.wxml页面里,具体代码如下所示。

Page({

navigateBtn:function(){ wx.navigateTo({

url: '../navigator/navigator', success: function(res){

console.log(res);

},

fail: function() {

// fail

},

complete: function() {

// complete

}

})

}

})

3.4.3 wx.redirectTo关闭当前页跳转

wx.redirectTo关闭当前页面,跳转到应用内的某个页面,具体属性如表所示。

wx.redirectTo属性

属性类型是否必填说明

url

String

需要跳转的应用内非 tab Bar 的页面的路径 , 路径后可以带参数。参数与路径之间使用?分隔,参数键与参数值用=相连,不同参数用&分隔;如'path?key=value&key2=value2'
successFunction接口调用成功的回调函数
failFunction接口调用失败的回调函数
completeFunction接口调用结束的回调函数(调用成功、失败都会执行)
(1)进入到pages/index/index.wxml文件里,添加一个跳转按钮,关闭当前页进行跳转,具体代码如下所示。

wx.navigateTo保留当前页跳转

wx.redirectTo关闭当前页跳转

wx. switchTab跳转到tabBar页面

保留当前页跳转

关闭当前页跳转

(2)进入到pages/index/index.js文件里,添加一个redirectBtn事件函数,保留当前页跳转到pages/ navigator/navigator.wxml页面里,具体代码如下所示。

Page({

navigateBtn:function(){ wx.navigateTo({

url: '../navigator/navigator', success: function(res){

console.log(res);

},

fail: function() {

// fail

},

complete: function() {

// complete

}

})

},

redirectBtn:function(){ wx.redirectTo({

url: '../navigator/navigator', success: function(res){

console.log(res);

},

fail: function() {

// fail

},

complete: function() {

// complete

}

})

}

})

3.4.4跳转到tabBar页面

wx.switchTab跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面,具体属性如表所示。

wx.switchTab属性

属性类型是否必填说明
urlString

需要跳转的 tabBar 页面的路径(需在 App.json 的 tabBar 字段定义的页面),路径后不能带参数
successFunction接口调用成功的回调函数
failFunction接口调用失败的回调函数
completeFunction接口调用结束的回调函数(调用成功、失败都会执行)
(1)进入到pages/index/index.wxml文件里,添加一个跳转按钮,跳转到tabBar页面,具体代码如下所示。

wx.navigateTo保留当前页跳转

wx.redirectTo关闭当前页跳转

 wx.switchTab跳转到tabBar页面

保留当前页跳转

关闭当前页跳转

跳转到tabBar页面

(2)进入到pages/index/index.js文件里,添加一个navigateBtn事件函数,保留当前页跳转到pages/ redirect/redirect.wxml页面里,具体代码如下所示。

Page({

navigateBtn:function(){ wx.navigateTo({

url: '../navigator/navigator', success: function(res){

console.log(res);

},

fail: function() {

// fail

},

complete: function() {

// complete

}

})

},

redirectBtn:function(){ wx.redirectTo({

url: '../navigator/navigator', success: function(res){

console.log(res);

},

fail: function() {

// complete

}

})

}

})

wx.navigateTo 和 wx.redirectTo 不允许跳转到 tabBar 页面,只能用 wx.switchTab 跳转到 tabBar 页面。

3.4.5 wx.navigateBack返回上一页

wx.navigateBack关闭当前页面,返回上一页面或多级页面。可通过 getCurrentPages()获取当前的页面栈,决定需要返回几层。具体属性如表所示。

wx.navigateBack属性

属性类型是否必填说明
deltaNumber1返回的页面数,如果 delta 大于现有页面数,则返回到首页
(1)进入到pages/navigator/navigator.wxml文件里,添加一个返回按钮,单击返回按钮,可以返回到上一级页面,具体代码如下所示。

保留当前页进行跳转,单击左上角可以返回到当前页

返回上一页

(2)进入到pages/navigator/navigator.js文件里,添加backBtn事件返回函数,具体代码如下所示。

// fail

},

complete: function() {

// complete

}

})

},

switchBtn:function(){ wx.switchTab({

url: '../redirect/redirect', success: function(res){

// success

},

fail: function() {

// fail

},

complete: function() {

// complete

}

})

}

})

(3)在pages/index/index.wxml文件里,单击保留当前页跳转按钮,可以进行页面跳转,在跳转的页面里单击返回上一页按钮,可以返回到上一级页面,如图所示。

Page({

data:{}, onLoad:function(options){

console.log("title="+options);

},

backBtn:function(){ wx.navigateBack({

delta: 1

})

}

})

         

index.wxml 页面                 navigator.wxml页面

3.4.6设置导航条

wx.setNavigationBarTitle(OBJECT)动态设置当前页面的标题。具体属性如表所示。

wx.setNavigationBarTitle(OBJECT)属性

属性类型是否必填说明
titleString页面标题
successFunction接口调用成功的回调函数
failFunction接口调用失败的回调函数
completeFunction接口调用结束的回调函数(调用成功、失败都会执行)
(1)进入到pages/navigator/navigator.js文件里,对页面窗口标题重新设计,具体代码如下所示。

Page({

data:{}, onLoad:function(options){

console.log("title="+options);

wx.setNavigationBarTitle({ title: '新页面'

})

},

backBtn:function(){ wx.navigateBack({

delta: 1

})

}

})

(2)在pages/index/index.wxml文件里,单击保留当前页跳转按钮,可以进行页面跳转,跳转后标题变为新页面,如图所示。

                   

index.wxml 页面                           navigator.wxml页面

(3)在pages/navigator/navigator.js文件里,如果在当前页面显示导航条加载动画,可以使用wx.show NavigationBarLoading()函数,具体代码如下所示。

Page({

data:{}, onLoad:function(options){

console.log("title="+options); wx.setNavigationBarTitle({

title: '新页面'

});

wx.showNavigationBarLoading();

},

backBtn:function(){ wx.navigateBack({

delta: 1

})

}

})

界面效果如图所示。

导航加载效果

(4)在当前页面显示导航条加载动画,可以使用wx.showNavigationBarLoading()函数,如果想隐藏导航条加载动画,可以使用wx.hideNavigationBarLoading()函数。

3.5媒体组件

媒体组件有audio音频组件、image图片组件、video视频组件,audio音频组件用来播放音乐,image图片组件用来显示图片,video视频组件用来播放视频。

3.5.1 audio音频

audio音频组件需要有唯一的id,根据id使用wx.createAudioContext('myAudio')创建音频播放的环境, src属性是音频播放的资源路径,poster属性是音频的播放图片,name属性为音频名称,绑定播放、暂停等事件,具体属性如表所示。

audio音频属性

属性类型默认值说明
idStringvideo 组件的唯一标识符
srcString要播放音频的资源地址
loopBooleanFalse是否循环播放
controlsBooleanTrue是否显示默认控件

poster

String

默认控件上的音频封面的图片资源地址,如果 controls 属性值为

false,则设置 poster 无效

name

String

未知音频

默认控件上的音频名称,如果 controls 属性值为 false,则设置 name

无效

author

String

未知作者

默认控件上的作者名字,如果 controls 属性值为 false,则设置 author

无效

binderrorEventHandle当发生错误时触发 error 事件,detail = {errMsg: MediaError.code}
bindplayEventHandle当开始/继续播放时触发play事件
bindpauseEventHandle当暂停播放时触发 pause 事件

bindtimeupdate

EventHandle

当播放进度改变时触发 timeupdate 事件,detail = {currentTime, duration}
bindendedEventHandle当播放到末尾时触发 ended 事件
MediaError.code错误码如表所示。

返回错误码

返回错误码说明
MEDIA_ERR_ABORTED获取资源被用户禁止
MEDIA_ERR_NETWORD网络错误
MEDIA_ERR_DECODE解码错误
MEDIA_ERR_SRC_NOT_SUPPOERTED不合适资源
示例代码如下所示:

播放

暂停

设置当前播放时间为14秒

回到开头

代码说明如图所示。

audio.wxml代码说明

// audio.js 

Page({

onReady: function (e) {

// 使用 wx.createAudioContext 获取 audio 上下文 context this.audioCtx = wx.createAudioContext('myAudio')

},

data: {

poster: / name: '此时此刻',

author: '许巍',

src: 'http://ws.stream.qqmusic.qq.com/M500001VfvsJ21xFqb.mp3?guid=ffffffff82def4af4b12b3cd9337d5e 7&uin=3467220&vkey=6292F51E1E384E06DCBDC9AB7C49FD713D632D313AC4858BACB8DDD29067D3C

601481D36E62053BF8DFEAF74C0A5CCFADD71160CAF3E6A&fromtag=46',

},

audioPlay: function () { this.audioCtx.play()

},

audioPause: function () { this.audioCtx.pause()

},

audio14: function () { this.audioCtx.seek(14)

},

audioStart: function () { this.audioCtx.seek(0)

}

})

代码说明如图所示。

audio.js代码说明

界面效果如图所示。

音频播放界面效果

3.5.2 image图片

image图片组件的属性如表所示。它有两类展现模式:一类是缩放模式,在缩放模式里包括4种方式;另一类是裁剪模式,在裁剪模式里包括9种方式。

image图片属性

属性类型默认值说明
srcString图片资源地址
modeString'scaleToFill'图片缩放、裁剪的模式
binderrorHandleEvent当错误发生时,发布到AppService 的事件名,事件对象event.

detail = {errMsg: 'something wrong'}

bindloadHandleEvent当图片载入完毕时,发布到AppService 的事件名,事件对象

event.detail = {height:'图片高度px', width:'图片宽度px'}

通过mode属性来设置4种缩放模式,如表所示。

4种缩放模式

模式说明
scaleToFill不保持纵横比缩放图片,使图片的宽高完全拉伸至填满 image 元素
aspectFit保持纵横比缩放图片,使图片的长边能完全显示出来。也就是说,可以完整地将图片显示出来
aspectFill保持纵横比缩放图片,只保证图片的短边能完全显示出来。也就是说,图片通常只在水平或垂直方向是完整的,另一个方向将会发生截取
widthFix宽度不变,高度自动变化,保持原图宽高比不变
通过mode属性来设置9种裁剪模式,如表所示。

9种裁剪模式

模式说明
top不缩放图片,只显示图片的顶部区域
bottom不缩放图片,只显示图片的底部区域
center不缩放图片,只显示图片的中间区域
left不缩放图片,只显示图片的左边区域
right不缩放图片,只显示图片的右边区域
top left不缩放图片,只显示图片的左上边区域
top right不缩放图片,只显示图片的右上边区域
bottom left不缩放图片,只显示图片的左下边区域
bottom right不缩放图片,只显示图片的右下边区域
示例代码如下所示:

image

图片

{{item.text}}

Page({

data: {

array: [{

mode: 'scaleToFill',

text: 'scaleToFill:不保持纵横比缩放图片,使图片完全适应'

}, {

mode: 'aspectFit',

text: 'aspectFit:保持纵横比缩放图片,使图片的长边能完全显示出来'

}, {

mode: 'aspectFill',

text: 'aspectFill:保持纵横比缩放图片,只保证图片的短边能完全显示出来'

}, {

mode: 'top',

text: 'top:不缩放图片,只显示图片的顶部区域'

}, {

mode: 'bottom',

text: 'bottom:不缩放图片,只显示图片的底部区域'

}, {

mode: 'center',

text: 'center:不缩放图片,只显示图片的中间区域'

}, {

mode: 'left',

text: 'left:不缩放图片,只显示图片的左边区域'

}, {

mode: 'right',

text: 'right:不缩放图片,只显示图片的右边区域'

}, {

mode: 'top left',

text: 'top left:不缩放图片,只显示图片的左上边区域'

}, {

mode: 'top right',

text: 'top right:不缩放图片,只显示图片的右上边区域'

}, {

mode: 'bottom left',

text: 'bottom left:不缩放图片,只显示图片的左下边区域'

}, {

mode: 'bottom right',

text: 'bottom right:不缩放图片,只显示图片的右下边区域'

}],

},

imageError:         function(e)         { console.log('image3发生error事件,携带值为', e.detail.errMsg)

}

})

图片效果如图所示。

原 图

  

scaleToFill缩放模式      aspectFit缩放模式      aspectFill缩放模式

  

top裁剪模式     bottom裁剪模式     center裁剪模式

   

left裁剪模式             right裁剪模式          top left裁剪模式

      

top right裁剪模式        bottom left裁剪模式       bottom right裁剪模式

3.5.3 video视频

video视频组件是用来播放视频的组件,这个组件可以控制是否显示默认播放控件(播放/暂停按钮、播放进度、时间),还可以发送弹幕信息等,video组件默认宽度为300px、高度为225px,设置宽高需要通过 wxss设置width和height,具体属性如表所示。

video视频属性

属性类型默认值说明
srcString要播放视频的资源地址
controlsBooleanTrue是否显示默认播放控件(播放/暂停按钮、播放进度、时间)
danmu-listObjectArray弹幕列表
danmu-btnBooleanFalse是否显示弹幕按钮,只在初始化时有效,不能动态变更
enable-danmuBooleanFalse是否展示弹幕,只在初始化时有效,不能动态变更
autoplayBooleanFalse是否自动播放
bindplayEventHandle当开始/继续播放时触发play事件
bindpauseEventHandle当暂停播放时触发pause事件
bindendedEventHandle当播放到末尾时触发ended事件

bindtimeupdate

EventHandle

播放进度变化时触发,event.detail = {currentTime: '当前播放时间'} 。触发频率应该在 250ms 一次

objectFit

String

Contain

当视频大小与video容器大小不一致时,视频的表现形式。contain:包含。fill:填充。cover:覆盖
示例代码如下所示:

c020*********

a320a0201000400" danmu-list="{{danmuList}}" enable-danmu danmu-btn controls>

获取视频

发送弹幕

function getRandomColor () { let rgb = []

for (let i = 0 ; i < 3; ++i){

let color = Math.floor(Math.random() * 256).toString(16) color = color.length == 1 ? '0' + color : color rgb.push(color)

}

return '#' + rgb.join('')

}

Page({

onReady: function (res) {

this.videoContext = wx.createVideoContext('myVideo')

},

inputValue: '', data: {

src: '', danmuList: [

{

text: '第 1s 出现的弹幕', color: '#ff0000',

time: 1

},

{

text: '第 3s 出现的弹幕', color: '#ff00ff',

time: 3

}]

},

bindInputBlur: function(e) { this.inputValue = e.detail.value

},

bindButtonTap: function() { var that = this wx.chooseVideo({

sourceType: ['album', 'camera'], maxDuration: 60,

camera: ['front','back'], success: function(res) {

that.setData({

src: res.tempFilePath

})

}

})

},

bindSendDanmu: function () { this.videoContext.sendDanmu({

text: this.inputValue, color: getRandomColor()

})

}

})

界面效果如图所示。

视频播放界面

3.5.4 camera相机

camera相机组件在使用的时候需要用户授权scope.camera,它是由客户端创建的原生组件,它的层级是最高的,不能通过 z-index 控制层级,可使用 cover-view、cover-image覆盖在上面,同一页面只能插入一个 camera 组件,不能在 scroll-view、swiper、picker-view、movable-view 中使用 camera 组件。camera相机组件的属性如表所示。

camera相机组件属性

属性类型默认值说明
device-positionStringback前置或后置,值为front、back
flashStringAuto闪光灯,值为auto、on、off
bindstopEventHandle摄像头在非正常终止时触发,如退出后台等情况
binderrorEventHandle用户不允许使用摄像头时触发
示例代码如下所示:

拍照

预览

Page({

takePhoto() {

const ctx = wx.createCameraContext() ctx.takePhoto({

quality: 'high', success: (res) => {

this.setData({

src: res.tempImagePath

})

}

})

},

error(e) { console.log(e.detail)

}

})

界面效果如图所示。

       

拍照前                                 拍照后

3.5.5 live-player实时音视频播放

live-player实时音视频播放组件的使用是针对特定类目开放的,需要先通过类目审核,然后在小程序管理后台“设置”-“接口设置”中自助开通该组件权限。现在支持的类目有:社交(直播)、教育(在线教育)、医疗(互联网医院、公立医院)、政务民生(所有二级类目)、金融(基金、信托、保险、银行、证券/期货、非金融机构自营小额贷款、征信业务、消费金融)。live-player实时音视频播放组件的属性如表所示。

live-player实时音视频播放组件属性

属性类型默认值说明
srcString音视频地址。目前仅支持 flv、rtmp 格式
modeStringlivelive(直播),RTC(实时通话)
autoplayBooleanFalse自动播放
mutedBooleanFalse是否静音
orientationStringvertical画面方向,可选值有 vertical、horizontal
object-fitStringcontain填充模式,可选值有 contain、fillCrop
background-muteBooleanFalse进入后台时是否静音(已废弃,默认退台静音)
min-cacheNumber1最小缓冲区,单位s
max-cacheNumber3最大缓冲区,单位s
bindstatechangeEventHandle播放状态变化事件,detail = {code}
bindfullscreenchangeEventHandle全屏变化事件,detail = {direction, fullScreen}
bindnetstatusEventHandle网络状态通知,detail = {info}
示例代码如下所示:

Page({

statechange(e) {

console.log('live-player code:', e.detail.code)

},

error(e) {

console.error('live-player error:', e.detail.errMsg)

}

})

3.5.6 live-pusher实时音视频录制

live-pusher实时音视频录制组件的使用需要取得用户授权scope.camera、scope.record,它是针对特定类目开放的,需要先通过类目审核,然后在小程序管理后台“设置”-“接口设置”中自助开通该组件权限。现在支持的类目有:社交(直播)、教育(在线教育)、医疗(互联网医院、公立医院)、政务民生(所有二级类目)、金融(基金、信托、保险、银行、证券/期货、非金融机构自营小额贷款、征信业务、消费金融)。live-pusher实时音视频录制组件的属性如表所示。

live-pusher实时音视频录制组件属性

属性类型默认值说明
urlStringBack推流地址。目前仅支持 flv、rtmp 格式
modeStringRTCSD(标清)、HD(高清)、FHD(超清)、RTC(实时通话)
autopushBooleanFalse自动推流
mutedBooleanFalse是否静音
enable-cameraBooleanTrue开启摄像头
auto-focusBooleanTrue自动聚集
orientationStringverticalvertical,horizontal
beautyNumber0美颜
whitenessNumber0美白
aspectString9:16宽高比,可选值有3:4、9:16
min-bitrateNumber200最小码率
max-bitrateNumber1000最大码率
waiting-imageString进入后台时推流的等待画面
waiting-image-hashString等待画面资源的MD5值
background-muteBooleanFalse进入后台时是否静音
bindstatechangeEventHandle状态变化事件,detail = {code}
bindnetstatusEventHandle网络状态通知,detail = {info}
binderrorEventHandle渲染错误事件,detail = {errMsg, errCode}
示例代码如下所示:

Page({

statechange(e) {

console.log('live-pusher code:', e.detail.code)

}

})

3.6地图组件

map地图组件用来开发与地图有关的应用,如地图导航、打车软件、京东商城的订单轨迹等都会用到地图组件,在地图上可以标记覆盖物以及指定一系列的坐标位置。京东的仓库和客户的收货地址,如图所示。

京东订单轨迹

map地图组件具体属性如表所示。

map地图属性

属性类型默认值说明
longitudeNumber中心经度
latitudeNumber中心纬度
scaleNumber16缩放级别,取值范围为5~18
markersArray标记点
coversArray即将移除,请使用 markers
autoplayBoolean是否自动播放
polylineArray路线
circlesArray
controlsArray控件
include-pointsArray缩放视野以包含所有给定的坐标点
show-locationBoolean显示带有方向的当前定位点
bindmarkertapEventHandle单击标记点时触发
bindcontroltapEventHandle单击控件时触发
bindregionchangeEventHandle视野发生变化时触发
bindtapEventHandle单击地图时触发
markers标记点用于在地图上显示标记的位置,如表所示。

markers地图标记属性

属性说明类型是否必填备注
id标记点idNumbermarker单击事件回调会返回此id
latitude纬度Number浮点数,范围为-90~90
longitude经度Number浮点数,范围为-180~180
title标注点名String

iconPath

显示的图标

String

项目目录下的图片路径,支持相对路径写法,以'/' 开头则表示相对小程序根目录
rotate旋转角度Number顺时针旋转的角度,范围为0~360,默认为 0

alpha标注的透明度Number默认为1,无透明
width标注图标宽度Number默认为图片实际宽度
height标注图标高度Number默认为图片实际高度
polyline指定一系列坐标点,从数组第一项连线至最后一项,如表所示。

polyline坐标点属性

属性说明类型是否必填备注
points经纬度数组Array[{latitude: 0, longitude: 0}]
color

线的颜色

String

8位十六进制表示,后两位表示alpha值,如: #000000AA
width线的宽度Number
dottedLine是否虚线Boolean默认false
circles在地图上显示圆,如表所示。

circles显示圆属性

属性说明类型是否必填备注
latitude纬度Number浮点数,范围为-90~90
longitude经度Number浮点数,范围为-180~180

color

描边的颜色

String

8位十六进制表示,后两位表示alpha值,如: #000000AA

fillColor

填充颜色

String

8位十六进制表示,后两位表示alpha值,如: #000000AA
radius半径Number
strokeWidth描边的宽度Number
controls在地图上显示控件,控件不随着地图移动,如表所示。

controls显示控件属性

属性说明类型是否必填备注
id控件idNumber在控件单击事件回调会返回此id
position控件在地图的位置Object控件相对地图位置
iconPath

显示的图标

String

项目目录下的图片路径,支持相对路径写法,以

'/'开头则表示相对小程序根目录

clickable是否可单击Boolean默认不可单击
position控件的位置是相对地图的位置,如表所示。

position控件位置属性

属性说明类型是否必填备注
left距离地图的左边界多远Number默认为0
top距离地图的上边界多远Number默认为0
width控件宽度Number默认为图片宽度
height控件高度Number默认为图片高度
示例代码如下所示。

         

// map.js Page({

data: {

markers: [{

latitude: 23.099994,

longitude: 113.324520,

width: 50,

height: 50

}],

polyline: [{ points: [{

longitude: 113.3245211,

latitude: 23.10229

}, {

longitude: 113.324520,

latitude: 23.21229

}], color:"#FF0000DD

width: 2, dottedLine: true

}],

controls: [{ id: 1,

left: 0,

top: 300 - 50,

width: 50,

height: 50

},

clickable: true

}]

},

regionchange(e) { console.log(e.type)

},

markertap(e) { console.log(e.markerId)

},

controltap(e) { console.log(e.controlId)

}

})

界面效果如图所示。

地图界面效果

3.7画布组件

canvas画布组件用来绘制正方形、圆形或者一些其他的形状,如图所示。

canvas画布组件绘制的图形

canvas画布组件默认宽度为300px、高度为225px,在使用的时候需要有唯一的标识,它有手指触摸动作开始、手指触摸后移动、手指触摸动作结束、手指触摸动作被打断等事件,具体属性如表所示。

canvas画布属性

属性类型默认值说明
canvas-idStringcanvas 组件的唯一标识符
disable-scrollBooleanFalse当在 canvas 中移动时,禁止屏幕滚动以及下拉刷新
bindtouchstartEventHandle手指触摸动作开始
bindtouchmoveEventHandle手指触摸后移动
bindtouchendEventHandle手指触摸动作结束
bindtouchcancelEventHandle手指触摸动作被打断,如来电提醒、弹窗

bindlongtap

EventHandle

手指长按 500ms 之后触发,触发了长按事件后进行移动不会触发屏幕的滚动
binderrorEventHandle当发生错误时触发 error 事件,detail = {errMsg: 'something wrong'}
示例代码如下所示。

// canvas.js Page({

canvasIdErrorCallback: function (e) { console.error(e.detail.errMsg)

},

onReady: function (e) {

// 使用 wx.createContext 获取绘图上下文 context var context = wx.createContext()

context.setStrokeStyle("#00ff00") context.setLineWidth(5) context.rect(0, 0, 200, 200) context.stroke() context.setStrokeStyle("#ff0000") context.setLineWidth(2) context.moveTo(160, 100)

context.arc(100, 100, 60, 0, 2 * Math.PI, true)

context.moveTo(140, 100)

context.arc(100, 100, 40, 0, Math.PI, false)

context.moveTo(85, 80)

context.arc(80, 80, 5, 0, 2 * Math.PI, true)

context.moveTo(125, 80)

context.arc(120, 80, 5, 0, 2 * Math.PI, true) context.stroke()

// 调用 wx.drawCanvas,通过 canvasId 指定在哪张画布上绘制,通过 actions 指定绘制行为wx.drawCanvas({

canvasId: 'firstCanvas',

actions: context.getActions() // 获取绘图动作数组

})

}

})

代码说明如图所示。

绘图代码说明
总结评价本节课主要学习微信小程序组件,包括视图容器组件、基础内容组件、表单组件、导航组件、媒体组件、地图组件、画布组件等。

文档

《微信小程序开发》第3章教案1

第3章用微信小程序组件构建UI界面课程名称微信小程序开发图解案例教程项目名称用微信小程序组件构建UI界面任务名称用微信小程序组件构建UI界面课时目性质□演示性□验证性□设计性√综合性授课班级授课日期授课地点教学目标(1)掌握视图容器组件的使用,会制作海报轮播效果、页签切换效果、上下滑动效果以及左右滑动效果。(2)掌握基础内容组件的使用,包括图标组件、文本组件以及进度条组件的使用。(3)掌握表单组件的使用,利用表单组件来设计微信小程序的表单内容,可以提交表单以及重置表单内容。(4)掌握导航组
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top