0
点赞
收藏
分享

微信扫一扫

uni-app 中组件的基本使用

组件的基本使用:

    uni-app 提供了丰富的基础组件给开发者,开发者可以像搭积木一样,组合各种组件拼接成自己的应用。

    uni-app 中的组件,就像 HTML 中的 div、span、p 等等标签一样,用于搭建页面的基础结构。

 

text 文本组件的用法:

  text 组件就是用来显示一个文本的,它就类似于 HTML 中的 span 标签。

  text 组件的属性如下:

属性说明

属性名

类型

默认值

说明

平台差异说明

selectable

Boolean

false

文本是否可选

 

space

String

 

显示连续空格

App、H5、微信小程序

decode

Boolean

false

是否解码

App、H5、微信小程序

space 值说明


说明

ensp

中文字符空格一半大小

emsp

中文字符空格大小

nbsp

根据字体设置的空格大小

 注意:

  • ​<text>​​​ 组件内只支持嵌套​​<text>​​,不支持其它组件或自定义组件,否则会引发在不同平台的渲染差异。
  • 在app-nvue下,只有​​<text>​​​才能包裹文本内容。无法在​​<view>​​组件包裹文本。
  • decode 可以解析的有​​&nbsp;​​​​&lt;​​​​&gt;​​​​&amp;​​​​&apos;​​​​&ensp;​​​​&emsp;​​。
  • 各个操作系统的空格标准并不一致。
  • 除了文本节点以外的其他节点都无法长按选中。
  • 支持​​\n​​ 方式换行。
  • 如果使用​​<span>​​​ 组件编译时会被转换为​​<text>​​。

 示例代码如下:

  
首页

text组件的学习


text组件中的selectable的属性的学习


组件中的 space属性的学习

效果图:

uni-app 中组件的基本使用_小程序

view 视图容器组件的用法:

  view 视图容器组件,类似于 HTML 中的 div ,是一个盒子,一个容器组件。

如果使用​​nvue​​,则需注意,包裹文字应该使用组件。

属性说明

属性名

类型

默认值

说明

hover-class

String

none

指定按下去的样式类。当 hover-class="none" 时,没有点击态效果

hover-stop-propagation

Boolean

false

指定是否阻止本节点的祖先节点出现点击态,也就是阻止事件冒泡

hover-start-time

Number

50

按住后多久出现点击态,单位毫秒

hover-stay-time

Number

400

手指松开后点击态保留时间,单位毫秒

hover-stop-propagation 属性介绍:

在实际开开发过程中,当子父组件都有点击事件时,触发子组件的点击事件会一并触发触发父组件的点击事件,如果想阻止事件穿透,那么就需要给子组件设置hover-stop-propagation 属性 

事件冒泡代码:






事件冒泡效果图:

uni-app 中组件的基本使用_小程序_02

出现上述情况以后,可以通过子组件设置 hover-stop-propagation 属性 来阻止事件冒泡,如下代码:






效果图:

 uni-app 中组件的基本使用_微信小程序_03

button 按钮组件的用法:

button 按钮组件

属性说明

属性名

类型

默认值

说明

生效时机

平台差异说明

size

String

default

按钮的大小

 

 

type

String

default

按钮的样式类型

 

 

plain

Boolean

false

按钮是否镂空,背景色透明

 

 

disabled

Boolean

false

是否禁用

 

 

loading

Boolean

false

名称前是否带 loading 图标

 

App-nvue 平台,在 ios 上为雪花,Android上为圆圈

form-type

String

 

用于 ​​<form>​​​ 组件,点击分别会触发 ​​<form>​​ 组件的 submit/reset 事件

 

 

open-type

String

 

开放能力

 

 

hover-class

String

button-hover

指定按钮按下去的样式类。当 hover-class="none" 时,没有点击态效果

 

App-nvue 平台暂不支持

hover-start-time

Number

20

按住后多久出现点击态,单位毫秒

 

 

hover-stay-time

Number

70

手指松开后点击态保留时间,单位毫秒

 

 

app-parameter

String

 

打开 APP 时,向 APP 传递的参数,open-type=launchApp时有效

 

微信小程序、QQ小程序

hover-stop-propagation

boolean

false

指定是否阻止本节点的祖先节点出现点击态

 

微信小程序

lang

string

'en'

指定返回用户信息的语言,zh_CN 简体中文,zh_TW 繁体中文,en 英文。

 

微信小程序

session-from

string

 

会话来源,open-type="contact"时有效

 

微信小程序

send-message-title

string

当前标题

会话内消息卡片标题,open-type="contact"时有效

 

微信小程序

send-message-path

string

当前分享路径

会话内消息卡片点击跳转小程序路径,open-type="contact"时有效

 

微信小程序

send-message-img

string

截图

会话内消息卡片图片,open-type="contact"时有效

 

微信小程序

show-message-card

boolean

false

是否显示会话内消息卡片,设置此参数为 true,用户进入客服会话会在右下角显示"可能要发送的小程序"提示,用户点击后可以快速发送小程序消息,open-type="contact"时有效

 

微信小程序

@getphonenumber

Handler

 

获取用户手机号回调

open-type="getPhoneNumber"

微信小程序

@getuserinfo

Handler

 

用户点击该按钮时,会返回获取到的用户信息,从返回参数的detail中获取到的值同uni.getUserInfo

open-type="getUserInfo"

微信小程序

@error

Handler

 

当使用开放能力时,发生错误的回调

open-type="launchApp"

微信小程序

@opensetting

Handler

 

在打开授权设置页并关闭后回调

open-type="openSetting"

微信小程序

@launchapp

Handler

 

打开 APP 成功的回调

open-type="launchApp"

微信小程序

  • 注1:​​button-hover​​ 默认为 ​​{background-color: rgba(0, 0, 0, 0.1); opacity: 0.7;}​
  • ​open-type="launchApp"​​​时需要调起的APP接入微信OpenSDK​​详见​​

size 有效值


说明

default

默认大小

mini

小尺寸

type 有效值


说明

primary

微信小程序、360小程序为绿色,App、H5、百度小程序、支付宝小程序、快应用为蓝色,字节跳动小程序为红色,QQ小程序为浅蓝色。如想在多端统一颜色,请改用default,然后自行写样式

default

白色

warn

红色

form-type 有效值


说明

submit

提交表单

reset

重置表单

open-type 有效值


说明

平台差异说明

feedback

打开“意见反馈”页面,用户可提交反馈内容并上传日志

App、微信小程序、QQ小程序

share

触发用户转发

微信小程序、百度小程序、支付宝小程序、字节跳动小程序、QQ小程序

getUserInfo

获取用户信息,可以从@getuserinfo回调中获取到用户信息,包括头像、昵称等信息

微信小程序、百度小程序、QQ小程序

contact

打开客服会话,如果用户在会话中点击消息卡片后返回应用,可以从 @contact 回调中获得具体信息

微信小程序、百度小程序

getPhoneNumber

获取用户手机号,可以从@getphonenumber回调中获取到用户信息

微信小程序、百度小程序、字节跳动小程序、支付宝小程序

launchApp

打开APP,可以通过app-parameter属性设定向APP传的参数

​​微信小程序​​​、​​QQ小程序​​

openSetting

打开授权设置页

微信小程序、百度小程序

getAuthorize

支持小程序授权

支付宝小程序

contactShare

分享到通讯录好友

支付宝小程序

lifestyle

关注生活号

支付宝小程序

openGroupProfile

呼起QQ群资料卡页面,可以通过group-id属性设定需要打开的群资料卡的群号,同时manifest中必须配置groupIdList

QQ小程序基础库1.4.7版本+

注意

  • 在小程序中,开发者可以登录​​微信小程序管理后台​​​ 、​​QQ小程序后台​​后,进入菜单“客服反馈”页面获取反馈内容。
  • 在 App 中,开发者登录​​DCloud开发者中心​​ 后点击应用名称,进入左侧菜单“用户反馈”页面获取反馈内容。
  • 点击 share 分享按钮时会触发​​onShareAppMessage​​
  • 支付宝小程序平台,获取用户手机号时,建议先通过条件编译的方式,调用支付宝原生API,​​参考​​

    

 

image 组件的使用:

image 就是用来显示图片的组件

属性:

属性名

类型

默认值

说明

平台差异说明

src

String

 

图片资源地址

 

mode

String

'scaleToFill'

图片裁剪、缩放的模式

 

lazy-load

Boolean

false

图片懒加载。只针对page与scroll-view下的image有效

微信小程序、App、百度小程序、字节跳动小程序

fade-show

Boolean

true

图片显示动画效果

仅App-nvue 2.3.4+ Android有效

webp

boolean

false

默认不解析 webP 格式,只支持网络资源

微信小程序2.9.0

show-menu-by-longpress

boolean

false

开启长按图片显示识别小程序码菜单

微信小程序2.7.0

@error

HandleEvent

 

当错误发生时,发布到 AppService 的事件名,事件对象event.detail = {errMsg: 'something wrong'}

 

@load

HandleEvent

 

当图片载入完毕时,发布到 AppService 的事件名,事件对象event.detail = {height:'图片高度px', width:'图片宽度px'}

 

Tips

  • ​<image>​​​ 组件默认宽度 300px、高度 225px;​​app-nvue平台,暂时默认为屏幕宽度​
  • ​src​​ 仅支持相对路径、绝对路径,支持 base64 码;
  • 页面结构复杂,css样式太多的情况,使用 image 可能导致样式生效较慢,出现 “闪一下” 的情况,此时设置​​image{will-change: transform}​​ ,可优化此问题。
  • 自定义组件里面使用​​<image>​​​时,若​​src​​ 使用相对路径可能出现路径查找失败的情况,故建议使用绝对路径。
  • webp格式的图片在Android上是内置支持的。iOS上不同平台不一样,具体如下:app-vue下,iOS不支持;app-nvue下,iOS支持;微信小程序2.9.0起,iOS支持。
  • svg 格式的图片在不同的平台支持情况不同。具体为:app-nvue 不支持 svg 格式的图片,小程序上只支持网络地址。

mode 有效值:

mode 有 13 种模式,其中 4 种是缩放模式,9 种是裁剪模式。

模式


说明

缩放

scaleToFill

不保持纵横比缩放图片,使图片的宽高完全拉伸至填满 image 元素

缩放

aspectFit

保持纵横比缩放图片,使图片的长边能完全显示出来。也就是说,可以完整地将图片显示出来。

缩放

aspectFill

保持纵横比缩放图片,只保证图片的短边能完全显示出来。也就是说,图片通常只在水平或垂直方向是完整的,另一个方向将会发生截取。

缩放

widthFix

宽度不变,高度自动变化,保持原图宽高比不变

缩放

heightFix

高度不变,宽度自动变化,保持原图宽高比不变 微信小程序 2.10.3 支持

裁剪

top

不缩放图片,只显示图片的顶部区域

裁剪

bottom

不缩放图片,只显示图片的底部区域

裁剪

center

不缩放图片,只显示图片的中间区域

裁剪

left

不缩放图片,只显示图片的左边区域

裁剪

right

不缩放图片,只显示图片的右边区域

裁剪

top left

不缩放图片,只显示图片的左上边区域

裁剪

top right

不缩放图片,只显示图片的右上边区域

裁剪

bottom left

不缩放图片,只显示图片的左下边区域

裁剪

bottom right

不缩放图片,只显示图片的右下边区域

示例代码: 

    
uni-app 中组件的基本使用_缩放_04

 

swipter 按钮组件的用法:

swipter 组件通常用于实现轮播图,可以实现上下滑动、也可以左右滑动。

注意滑动切换和滚动的区别,滑动切换是一屏一屏的切换。swiper下的每个swiper-item是一个滑动切换区域,不能停留在2个滑动区域之间。

属性说明

属性名

类型

默认值

说明

平台差异说明

indicator-dots

Boolean

false

是否显示面板指示点

 

indicator-color

Color

rgba(0, 0, 0, .3)

指示点颜色

 

indicator-active-color

Color

#000000

当前选中的指示点颜色

 

active-class

String

 

swiper-item 可见时的 class

支付宝小程序

changing-class

String

 

acceleration 设置为 {{true}} 时且处于滑动过程中,中间若干屏处于可见时的class

支付宝小程序

autoplay

Boolean

false

是否自动切换

 

current

Number

0

当前所在滑块的 index

 

current-item-id

String

 

当前所在滑块的 item-id ,不能与 current 被同时指定

支付宝小程序不支持

interval

Number

5000

自动切换时间间隔

 

duration

Number

500

滑动动画时长

app-nvue不支持

circular

Boolean

false

是否采用衔接滑动,即播放到末尾后重新回到开头

 

vertical

Boolean

false

滑动方向是否为纵向

 

previous-margin

String

0px

前边距,可用于露出前一项的一小部分,接受 px 和 rpx 值

app-nvue、字节跳动小程序不支持

next-margin

String

0px

后边距,可用于露出后一项的一小部分,接受 px 和 rpx 值

app-nvue、字节跳动小程序不支持

acceleration

Boolean

false

当开启时,会根据滑动速度,连续滑动多屏

支付宝小程序

disable-programmatic-animation

Boolean

false

是否禁用代码变动触发 swiper 切换时使用动画。

支付宝小程序

display-multiple-items

Number

1

同时显示的滑块数量

app-nvue、支付宝小程序不支持

skip-hidden-item-layout

Boolean

false

是否跳过未显示的滑块布局,设为 true 可优化复杂情况下的滑动性能,但会丢失隐藏状态滑块的布局信息

App、微信小程序

disable-touch

Boolean

false

是否禁止用户 touch 操作

App 2.5.5+、H5 2.5.5+、支付宝小程序、字节跳动小程序(只在初始化时有效,不能动态变更)

touchable

Boolean

true

是否监听用户的触摸事件,只在初始化时有效,不能动态变更

字节跳动小程序(uni-app 2.5.5+ 推荐统一使用 disable-touch)

easing-function

String

default

指定 swiper 切换缓动动画类型,有效值:default、linear、easeInCubic、easeOutCubic、easeInOutCubic

微信小程序

@change

EventHandle

 

current 改变时会触发 change 事件,event.detail = {current: current, source: source}

 

@transition

EventHandle

 

swiper-item 的位置发生改变时会触发 transition 事件,event.detail = {dx: dx, dy: dy},支付宝小程序暂不支持dx, dy

App、H5、微信小程序、支付宝小程序、字节跳动小程序、QQ小程序

@animationfinish

EventHandle

 

动画结束时会触发 animationfinish 事件,event.detail = {current: current, source: source}

字节跳动小程序不支持

change 事件返回 detail 中包含一个 source 字段,表示导致变更的原因,可能值如下:

  • autoplay 自动播放导致swiper变化。
  • touch 用户划动引起swiper变化。
  • 其他原因将用空字符串表示。

swiper做左右拖动的长列表的专项问题

  • swiper是单页组件,适合做banner图轮播和简单列表左右滑动。
  • 因为性能问题,用swiper做复杂长列表,需要较高的优化技巧以及接受一些限制。
  • 这是一个范例,​​插件市场新闻模板示例​​,它在App端使用了nvue的原生渲染,实现高性能的左右拖动长列表;并支持可自定义的任何形式的下拉刷新。它在非App端使用的模式是只缓存左右一共3列的数据,dom中的数据过多时,它会自动释放。就是说App上,只要看过这一页,再进去时内容是还在的。而在非App上,只能做到缓存3页数据,其他页即便看过,再进去也会重新加载。并且非App的这种情况下,不再提供下拉刷新。虽然插件市场也有其他前端模拟的下拉刷新,但性能不佳。一般小程序的大厂案例里,提供左右拖长列表的,都是这种做法。

Tips

  • 使用竖向滚动时,需要给​​<scroll-view>​​ 一个固定高度,通过 css 设置 height。
  • 注意:其中只可放置​​<swiper-item>​​ 组件,否则会导致未定义的行为。
  • 如果遇到current、current-item-id属性设置不生效的问题参考:​​组件属性设置不生效解决办法​​
  • banner图的切换效果和指示器的样式,有多种风格可自定义,可在​​uni-app插件市场​​搜索
  • swiper在App的vue中、百度支付宝头条QQ小程序中,不支持内嵌video、map等原生组件。在微信基础库2.4.4起和App nvue2.1.5起支持内嵌原生组件。竖向的swiper内嵌视频可实现抖音、映客等视频垂直拖动切换效果。
  • 同时监听 change transition,开始滑动时触发transition, 放开手后,在ios平台触发顺序为 transition... change,Android/微信小程序/支付宝为 transition... change transition...

​​swiper-item​​

仅可放置在 ​​<swiper>​​ 组件中,宽高自动设置为100%。注意:宽高100%是相对于其父组件,不是相对于子组件,不能被子组件自动撑开。

属性名

类型

默认值

说明

item-id

String

 

该 swiper-item 的标识符

 

示例:

    

1


2

 样式

    .swipter-container {
width: 100%;
}

效果图:

uni-app 中组件的基本使用_小程序_05

举报

相关推荐

0 条评论