Uniapp零基础开发学习笔记(6) -基础内容组件icon/text/富文本/进度条的练习使用
基础内容组件icon/text富文本/进度条的练习使用
Uniapp零基础开发学习笔记(6) -基础内容组件icon/text/富文本/进度条的练习使用
基础组件中,有一些基础内容的组件比如图标,文本之类其实用法还是比较多的,耐心一点对着官方教程学习一下可以补漏很多知识。同时表单组件的使用也一起学习,对每个表单的组件做一次深入了解。
1.基础内容组件的介绍
基础内容组件主要是图标,文本,富文本和进度条,这些都是日常用的比较多的基础组件。
2.基础内容组件的练习使用
1. icon 图标
由于 icon 组件各端表现存在差异,可以通过使用 字体图标 的方式来弥补各端差异。用字体显示图标,总体过程还是比较复杂的,但是官网上讲的不太清楚。
我找了一下网上的相关介绍,决定先用系统自带的字体文件uni.ttf,因此先做一下准备工作,从示例代码hello uniapp中把uni.ttf复制到现在工程的static目录下面。(当然也许用不着)
icon组件的属性和值
icon组件的type属性,即icon类型,不同平台的支持是不一样的。需要根据平台选择或者预编译。
完成效果如下,不知道为什么只有[‘success’, ‘success_no_circle’, ‘warn’, ‘waiting’, ‘cancel’]而
[ ‘info’, ‘download’, ‘search’,‘clear’]图标显示不了,不知道为什么。
color属性可以设置颜色,比如下面改为蓝色blue
<icon :type="value" size="26" color="blue"/>
用一个数组循环输出这些图标,参考样例的-vfor循环,代码如下:
<view class="item" v-for="(value,index) in iconType" :key="index">
<icon :type="value" size="26"/>
<text>{{value}}</text>
</view>
在脚本中定义iconType数组的初始值,在onLoad()事件中,根据平台设置图标数组的名称。这个需要关注官网描述的各个平台支持icon类型名称。
<script>
export default {
data() {
return {
title: '我的',
iconType:['success', 'success_no_circle', 'info', 'warn', 'waiting', 'cancel', 'download', 'search','clear']
}
},
onLoad() {
// #ifdef APP-PLUS|| MP-WEIXIN
this.iconType = ['success', 'success_no_circle', 'info', 'warn', 'waiting', 'cancel', 'download', 'search','clear']
// #endif
// #ifdef MP-ALIPAY
this.iconType = ['info', 'warn', 'waiting', 'cancel', 'download', 'search', 'clear', 'success', 'success_no_circle', 'loading']
// #endif
// #ifdef MP-BAIDU
this.iconType = ['success', 'info', 'warn', 'waiting', 'success_no_circle', 'clear', 'search', 'personal', 'setting', 'top', 'close', 'cancel', 'download', 'checkboxSelected', 'radioSelected', 'radioUnselect']
// #endif
},
methods: {
}
}
</script>
2. text 文本
文本组件text用于包裹文本内容。
text属性主要有selectable是否可选默认false,以及user-select(微信小程序)只是平台差异;
space有ensp,emsp,nbsp三个值主要是设置空格大小,这个可以实际看效果理解差异;
decode是否解码默认false,可以解析的有 < > & '    
支持 \n 方式换行。
这是案例的显示效果:
按钮add line点击后增加一行显示
按钮remove line点击后减少一行显示
模板内部的引用组件代码如下:
<view class="uni-padding-wrap uni-common-mt">
<!-- 使用text-box组件,定义竖直方向可以滚动 -->
<view class="text-box" scroll-y="true">
<text>{{text}}</text>
</view>
<!-- 增加两个button操作 -->
<view class="uni-btn-v">
<button type="primary" :disabled="!canAdd" @click="add">add line</button>
<button type="warn" :disabled="!canRemove" @click="remove">remove line</button>
</view>
</view>
两个按钮的属性disabled用了变量定义,并且定义了click事件。
在脚本中,增加text引用的数组,以及定义click之后产生的add,以及remove函数内容。
texts: [
'HBuilder,500万开发者选择的IDE',
'MUI,轻巧、漂亮的前端开源框架',
'wap2app,M站快速转换原生体验的App',
'5+Runtime,为HTML5插上原生的翅膀',
'HBuilderX,轻巧、极速,极客编辑器',
'uni-app,终极跨平台方案',
'HBuilder,500万开发者选择的IDE',
'MUI,轻巧、漂亮的前端开源框架',
'wap2app,M站快速转换原生体验的App',
'5+Runtime,为HTML5插上原生的翅膀',
'HBuilderX,轻巧、极速,极客编辑器',
'uni-app,终极跨平台方案',
'......'
],
text: '',
canAdd: true,//disabled引用变量
canRemove: false,//disabled引用变量
extraLine: []
在methode之内定义以下两个函数add,以及remove,在函数中设计了增加或者减少一行字符串的方法,初始字符串数组在texts定义,当前显示字符串数组为extraLine,用extraLine长度判断是否可以增减canAdd,canRemove
add: function(e) {
//每次add向extraLine数组推入一个texts数组中的字符串,索引是extraLine数组长度% 12,
//也就是循环推入每12个从头开始,设计比较巧妙
this.extraLine.push(this.texts[this.extraLine.length % 12]);
this.text = this.extraLine.join('\n');//增加换行符
this.canAdd = this.extraLine.length < 12;//最多显示12行
this.canRemove = this.extraLine.length > 0;//0行时就不能删除了
},
remove: function(e) {
//只要显示数组长度>0就可以推出1个字符串
if (this.extraLine.length > 0) {
this.extraLine.pop();
this.text = this.extraLine.join('\n');//增加换行符
this.canAdd = this.extraLine.length < 12;//最多显示12行
this.canRemove = this.extraLine.length > 0;//0行时就不能删除了
}
}
3.rich-text富文本
富文本支持默认事件,包括:click、touchstart、touchmove、touchcancel、touchend、longpress。
nodes 值为 HTML String 时,在组件内部将自动解析为节点列表,推荐直接使用 Array 类型避免内部转换导致的性能下降。App-nvue 和支付宝小程序不支持 HTML String 方式,仅支持直接使用节点列表即 Array 类型,如要使用 HTML String,则需自己将 HTML String 转化为 nodes 数组,可使用 html-parser (opens new window)转换。
节点列表内的节点现支持两种类型,通过 type 来区分,分别是元素节点和文本节点,默认是元素节点
富文本使用<rich-text>
标签定义,属性nodes可定义两种类型,一种为nodes数组,一种为文本字符串,
但两种都可以解析为富文本。
显示效果
案例模板代码:
nodes分别通过变量数组nodes和strings定义
<!-- 富文本的使用案例 nodes="nodes"-->
<view class="uni-common-mt" style="background:#FFF; padding:20rpx;">
<rich-text :nodes="nodes"></rich-text>
</view>
<!-- 富文本的使用案例 nodes="strings"-->
<view class="uni-common-mt" style="background:#FFF; padding:20rpx;">
<rich-text :nodes="strings"></rich-text>
</view>
脚本中定义:
//nodes对应一个html的节点解析的数组
nodes: [{
name: 'div',
attrs: {
class: 'div-class',
style: 'line-height: 60px; color: red;text-align:center;'
},
children: [{
type: 'text',
text: 'Hello uni-app!'
}]
}],
//strings对应一个html的节点解析的字符串
strings: '<div style="text-align:center;"><img src="https://bjetxgzv.cdn.bspapp.com/VKCEYUGU-uni-app-doc/d8590190-4f28-11eb-b680-7980c8a877b8.png"/></div>'
以nodes数组为例,示例中定义了div父节点,属于’div-class’,对应的属性就可以按照div标签的属性进行设置
比如:
font-style:italic设置为斜体; text-decoration:line-through增加删除线等等
name: 'div',
attrs: {
class: 'div-class',
style: 'line-height: 60px; color: red;text-align:center; font-style:italic ; text-decoration:line-through'
},
具体可以在网上查看html关于节点的定义方法:百度DIV标签
文本字符串则更加直白,理解了则跟nodes区别不大。
4.progress进度条
进度条progress用法比较简单,比较重要的属性如下:
percent:获取或者设置百分比,值从0-100
show-info:是否在右侧显示百分比,默认false
stroke-width:进度条线宽默认6px
activeColor:已选择的进度条的颜色
backgroundColor:未选择的进度条的颜色
示例方案显示效果:
下方为案例示例代码:
<!-- 进度条的使用案例 -->
<view class="uni-padding-wrap uni-common-mt">
<view class="progress-box">
<!-- show-info显示右侧百分比 -->
<progress :percent="pgList[0]" show-info stroke-width="3" />
</view>
<view class="progress-box">
<!-- 追加图标 -->
<progress :percent="pgList[1]" stroke-width="3" />
<uni-icons type="close" class="progress-cancel" color="#dd524d"></uni-icons>
</view>
<view class="progress-box">
<progress :percent="pgList[2]" show-info="true" stroke-width="3" />
</view>
<view class="progress-box">
<!-- 设置进度条已完成颜色为红色 -->
<progress :percent="pgList[3]" activeColor="#ff0000" stroke-width="3" />
</view>
<view class="progress-control">
<button type="primary" @click="setProgress">设置进度</button>
<button type="warn" @click="clearProgress">清除进度</button>
</view>
</view>
<!-- 进度条的使用案例结束 -->
四个进度条percent用了变量数组pgList定义,以及按钮设置了两个事件设置和清除进度setProgress和clearProgress
这些在脚本中进行定义
<script>
export default {
data() {
return {
pgList: [0, 0, 0, 0]
}
},
methods: {
setProgress() {
this.pgList = [20, 40, 60, 80]
},
clearProgress() {
this.pgList = [0, 0, 0, 0]
}
}
}
</script>
CSS样式设置4个进度条的布局方式,高度,边界距离以及图标的高度
<style>
.progress-box {
display: flex;
height: 50rpx;
margin-bottom: 60rpx;
}
.uni-icon {
line-height: 1.5;
}
.progress-cancel {
margin-left: 40rpx;
}
.progress-control button {
margin-top: 20rpx;
}
</style>
更多推荐
所有评论(0)