第四章
4.1 组件的定义及属性
组件是页面视图层(WXML)的基本组成单元,组件组合可以构建功能强大的页面构。小程序框架为开发者提供了容器视图、基础内容、表单、导航、多媒体、地图、画开放能力等8类(30多个)基础组件。
每一个组件都由一对标签组成,有开始标签和结束标签,内容放置在开始标签和结束签之间,内容也可以是组件。组件的语法格式如下:
<标签名 属性名=”属性值”>内容…</标签名 >
组件通过属性来进一步细化。不同的组件可以有不同的属性,但它们也有一些共用性,如id、class、style、hidden、data-*、bind */catch*等。
■id 组件的唯一表示,保持整个页面唯一,不常用。
class 组件的样式类,对应WXSS 中定义的样式。
syle 组件的内联样式,可以动态设置内联样式。
hidden 组件是否显示,所有组件默认显示。
data-*自定义属性,组件触发事件时,会发送给事件处理函数。事件处理函数可以通过传入参数对象的 currentTarget. dataset 方式来获取自定义属性的值。
bind*/catch* 组件的事件,绑定逻辑层相关事件处理函数。
4.2 容器视图组件
容器视图组件是能容纳其他组件的组件,是构建小程序页面布局的基础组件
1 view
view 组件是块级组件,没有特殊功能,主要用于布局展示,相当于HTML中的div,是布局中最基本的用户界面(User Interface,UI)组件,通过设置 view的 CSS 属性可以实现各种复杂的布局。
2 scroll- view
通过设置scroll-view 组件的相关属性可以实现滚动视图的功能
(1)在使用竖向滚动时,如果需要给 scroll-view 组件设置一个固定高度,可以通过WXSS设置 height 来完成。
(2)请勿在scroll-view组件中使用 textarea、map、canvas、video 组件。
scroll -into-view 属性的优先级高于 scroll -top。(3)
(4)由于在使用 scro1l-view组件时会阻止页面回弹,所以在scroll-view组件滚动时无法触发 onPullDownRefresh。
(5)如果要实现页面下拉刷新,请使用页面的滚动,而不是设置 scrol-view 组件。这样做,能通过单击顶部状态栏回到页面顶部
3 swiper
swiper 组件可以实现轮播图、图片预览、滑动页面等效果。一个完整的swiper 组f<swiper/>和<swiper -item/>两个标签组成,它们不能单独使用。<swiper/>中只能放一个或多个<swiper -item/>,若放置其他组件则会被删除;<swiper-item/>内部可以置任何组件,默认宽高自动设置为100%。
4.3基础内容组件
包括icon、text和 progress,主要用于在视图页面中展示图标、文本和进条等信息。
1 icon
icon 组件即图标组件,通常用于表示一种状态,如success、info、warn、waiting、cancd等。其属性如表4-4所示
2 text
text 组件用于展示内容,类似HTML中的<span>,text 组件中的内容支持长按选中,支持转义字符“\”,属于行内元素。
案例代码
<block wx:for="{
{x}}" wx:for-item="x">
<view class="aa">
<block wx:for="{
{25-x}}" wx:for-item="y">
<text decode="{
{true}}" space="{
{true}}"> </text>
</block>
<block wx:for="{
{y}}" wx:for-item="y">
<block wx:if="{
{y<=2*x-1}}">
<text>*</text>
</block>
</block>
</view>
</block>
<block wx:for="{
{x}}" wx:for-item="x">
<view class="aa">
<block wx:for="{
{19+x}}" wx:for-item="x">
<text decode="{
{true}}" space="{
{true}}"> </text>
</block>
<block wx:for="{
{y}}" wx:for-item="y">
<block wx:if="{
{y<=11-2*x}}">
<text>*</text>
</block>
</block>
</view>
</block>
js代码
Page({
data: {
x:[1,2,3,4,5],
y:[1,2,3,4,5,6,7,8,9]
}
})
效果
4 pogress
peogress组件用于显示进度状态,如资源加载、用户资料完成度、媒体资源播放进度等poges组件属于块级元素
表单组件
表单组件的主要功能是收集用户信息,并将这些信息传递给后台服务器,实现小程序与用户之间的沟通。表单组件不仅可以放置在<form/>标签中使用,还可以其他组件混合使用。
1 button
button 组件用来实现用户和应用之间的交互,同时按钮的颜色起引导作在一个程序中一个按钮至少有3种状态:默认点击(default)、建议点击(pi击(warn)。在构建项目时,应在合适的场景使用合适的按钮,当<buton><裹时,可以通过设置form-type 属性来触发表单对应的事件。button组件的属所示。
案例代码
在wxml输入
<button type="default">type:default</button>
<button type="primary">type:primary</button>
<button type="warn">type:warn</button>
<button type="default" bindtap='buttonSize' size="{
{size}}">改变size</button>
<button type="default" bindtap='buttonPlain' plain="{
{plain}}">改变plain</button>
<button type="default" bindtap='buttonLoading' loading="{
{loading}}">改变loading显示</button>
在js中输入
Page({
data: {
size:'default',
plain:'false',
loading:'false'
},
buttonSize:function(){
if(this.data.size=="default")
this.setData({size:'mini'})
else
this.setData({size:'default'})
},
buttonPlain:function(){
this.setData({plain:!this.data.plain})
},
buttonLoading:function(){
this.setData({loading:!this.data.loading})
}
})
效果
2 radi0
单选框用来从一组选项中选取一个选项。在小程序中,单选框由<radio-group/>(单项选择器)和<radio/>(单选项目)两个组件组合而成,一个包含多个<radio/>的<radio-group/>表示一组单选项,在同一组单选项中<radio/>是互斥的,当一个按钮被选中后,之前选中的按钮就变为非选。
3 checkbox
复选框用于从一组选项中选取多个选项,小程序中复选框由<checkbox-group/>(多项选择器)和<checkbox/>(多选项目)两个组件组合而成。一个<checkbox-grup/>表示一组选项,可以在一组选项中选中多个选项。
4 switch
switch组件的作用类似开关选择器
5 slider
可以通过滑动来设置相应的slider 组件为滑动选择器值
6 picker
picker组件为滚动选择器,当用户点击picker组件时,系统从底部弹出选择器供用户选择。picker组件目前支持5种选择器,分别是:selector(普通选择器)、multiSelector(多列选择器)、time(时间选择器)、date(日期选择器)、region(省市选择器)。
1.普通选择器
普通选择器(mode =selector)的属性如表4-12所示。
2.多列选择器
多列选择器(mode=multiSelector)允许用户从不同列中选择不同的选择项,其选项是二维数组或数组对象。
3.时间选择器、日期选择器
时间选择器(mode=time)可以用于从提供的时间选项中选择相应的时间
4.省市选择器
省市选择器(mode=region)是小程序的新版本提供的选择快速地区的组件
7 picker-view
概念:picker-view组件为嵌入页面的滚动选择器。相对于picker组件,picker-view组件的列的个数和列的内容由用户通过<picker-view-column/ >自定义设置。
案例
<view>当前日期:{
{year}}年{
{month}}月{
{day}}日</view >
<picker-view indicator-style="height:50px;" style ="width:100%; height:300px;"
value ="{
{value}}" bindchange ="bindchange">
<picker-view-column>
<view wx:for="{
{years}}"style="line-height:50px">{
{item}}年</view>
</picker-view-column>
<picker-view-column>
<view wx:for="{
{months}}" style ="line-height:50px">{
{item}}月</view>
</picker-view-column>
<picker-view-column>
<view wx:for="{
{days}}" style="line-height:50px">{
{item}}日</view>
</picker-view-column>
</picker-view>
const date =new Date()
const years=[]
const months=[]
const days=[]
//定义年份
for(let i=1900;i<=2050;i++){
years.push(i)
}
//定义月份
for(let i=1;i<=12;i++){
months.push(i)
}
//定义日期
for(let i=1;i<=31;i++){
days.push(i)
}
Page({
data:{
years:years,
months:months,
days:days,
year:date.getFullYear(),
month:date.getMonth()+1,day:date.getDate(),value:[118,0,0],
},
//定位到2018年1月1日
bindChange:function(e){
const val =e.detail.value
console.log(val);
this.setData({
year:this.data.years[val[0]],
month:this.data.months[val[1]],
day:this.data.days[val[2]]
})
}
})
效果
8 input
input组件为输入框,用户可以输入相应的信息
9 textarea
textarea组件为多行输入框组件,可以实现多行内容的输入
10 laber
概念:label组件为标签组件,用于提升表单组件的可用性。label组件支持使用for属性找到对应的id,或者将控件放在该标签下,当点击label组件时,就会触发对应的控件。for属性的优先级高于内部控件,内部有多个控件的时候默认触发第一个控件。
11 form
概念:form组件为表单组件,用来实现将组件内的用户输入信息进行提交。当<form/ >表单中formType为submit的<button/ >组件时,会将表单组件中的value值进行提交。
4.5 多媒体组件
多媒体组件包括image(图像)、audio(音频)、video(视频)、camera(相机)组件,使用这些组件,可以让页面更具有吸引力。
1 image
image组件为图像组件,与HTML中的 <img/ >类似,系统默认image组件的宽度为300 px、高度为2250 px,
1.缩放模式
scaleToFill不保持纵横比缩放图片,使图片的宽高完全拉伸至填满image元素。
aspectFit保持纵横比缩放图片,使图片的长边能完全显示出来。也就是说,可以将图片完整地显示出来。
aspectFill保持纵横比缩放图片,只保证图片的短边能完全显示出来。也就是说,图片通常只在水平或垂直方向是完整的,在另一个方向将会发生截取。
widthFix宽度不变,高度自动变化,保持原图宽高比不变
2.裁剪模式
■ top不缩放图片,只显示图片的顶部区域。
■ bottom不缩放图片,只显示图片的底部区域。
■ center不缩放图片,只显示图片的中间区域。
■ left不缩放图片,只显示图片的左边区域。
■ right不缩放图片,只显示图片的右边区域。
■ top left不缩放图片,只显示图片的左上边区域。
■ top right不缩放图片,只显示图片的右上边区域。
■ bottom left不缩放图片,只显示图片的左下边区域。
■ bottom right不缩放图片,只显示图片的右下边区域。
2 audio
audio组件用来实现音乐播放、暂停等
3 video
video组件用来实现视频的播放、暂停等。视频的默认宽