微信小程序 组件
组件
https://developers.weixin.qq.com/miniprogram/dev/component/
一、基础组件
view
组件->视图容器
相当于 div
小程序官方推荐使用 flex 布局
清空根目录 app.wxss 样式,在 index.wxss 设置样式
<!--index.wxml--> <view>view示例</view> <view class="container"> <view style="background-color:lightblue" >A</view> <view style="background-color:lightgreen" hover-class="hoverclass" hover-stay-time="3000">B</view> <view style="background-color:lightsalmon" >C</view> </view> /** 清空 app.wxss **/ .container { /* height: 100%; display: flex; flex-direction: column; align-items: center; justify-content: space-between; padding: 200rpx 0; box-sizing: border-box; */ } /**index.wxss**/ .container { background-color: #eee; display: flex; justify-content: space-evenly; } .container view{ width: 100rpx; height: 100rpx; line-height: 100rpx; text-align: center; color: #fff; } .hoverclass{ box-shadow: 0 0 15px yellow; }
Ps:
Some selectors are not allowed in component wxss,ID selectors, and attribute selectors.
不能使用id选择器、属性选择器和标签名选择器,请改用class选择器。
小程序设置flex的文档
https://developers.weixin.qq.com/ebook?action=get_post_info&docid=00080e799303986b0086e605f5680a
设置 view 组件的 hover-class 属性
hover-class 设置按下去时候的样式类,当 hover-class="none" 没有效果,默认是none
hover-start-time 否按住后多久出现点击态,默认50毫秒
hover-stay-time 手指松开后点击态保留时间,默认400毫秒
scroll-view
组件->视图容器
滚动的视图区域,通过 scroll-x 以及 scroll-y 设置滚动
<!--index.wxml--> <view>横向滚动示例</view> <scroll-view class="container1" scroll-x> <view class="item" style="background-color:lightblue">1</view> <view class="item" style="background-color:lightgreen">2</view> <view class="item" style="background-color:lightsalmon">3</view> <view class="item" style="background-color:pink">4</view> </scroll-view> <view>纵向滚动示例</view> <scroll-view class="container2" scroll-y> <view class="item" style="background-color:lightblue">1</view> <view class="item" style="background-color:lightgreen">2</view> <view class="item" style="background-color:lightsalmon">3</view> <view class="item" style="background-color:pink">4</view> </scroll-view> /**index.wxss**/ .container1 { background-color: #eee; width: 100%; height: 300rpx; white-space: nowrap; /*不运行换行*/ } .container1 .item{ width: 100%; height: 300rpx; line-height: 300rpx; text-align: center; color: #fff; font-size: 100rpx; display: inline-block; } /**index.wxss**/ .container2 { background-color: #eee; width: 100%; height: 300rpx; /* white-space: nowrap; 不运行换行*/ } .container2 .item{ width: 100%; height: 300rpx; line-height: 300rpx; text-align: center; color: #fff; font-size: 100rpx; display: inline-block; }
text
组件->基础内容
相当于span,可以横向嵌套,设置一段文字单独的样式
<!--index.wxml--> <text> 可以单独设置<text style="background:red;color:#fff;">span</text>元素的颜色 </text>
image
组件->媒体组件
用来设置图片,因为小程序要求程序大小不能超过2兆,项目中代码不会太大,比较大是静态资源,一般静态资源采用远程加载的方式
mode属性
不设置 mode 默认是 scaleToFill 模式,表示不保持图片比例
aspectFit 保持图片比例,按照长边缩放图片
aspectFill 保持图片比例,按照短边缩放图片,图片会被裁剪
widthFix 宽度不变,高度自动变化
<!--index.wxml--> <image src="http://ruyic.com/blog/uploads/image/202311/169936706514263.jpg" mode="widthFix" class="img"/> /**index.wxss**/ .img { width: 300rpx; height: 300rpx; background-color: #eee; }
button
组件->表单组件
按钮属于表单组件,但是平时开发中,按钮用的还是很多的
<!--index.wxml--> <!-- 预设颜色 --> <button>基本按钮,字体是黑色的</button> <button type="warn">警告按钮,字体是红色的</button> <button type="primary">微信风格,背景绿色,字体是白色</button> <!-- palain --> <button type="primary" plain>值为true,按钮是镂空的</button> <!-- 下面两个比较有用 --> <button disabled>禁用</button> <button loading>带loading图标</button> <!-- 可以自定义宽度 --> <button style="width:80%;" type="primary">自定义宽度</button>
还有 hover-class 设置按下去的样式
navigator
组件->导航
之前用的API跳转,实际还可以使用导航组件跳转
1. 包裹文字或按钮
2. 默认是点击时占一行,可以设置样式改变占用的大小
<!--index.wxml--> <navigator url="/pages/logs/logs" class="nav"> 跳转到logs </navigator> /**index.wxss**/ .nav { width: 200rpx; background-color: #eee; }
icon
组件->基础内容
微信小程序官方组件库提供的icon,但并不多,所以我们一般用到第三方库或iconfont
type 类型 success/success_no_circle/info/warn/waiting/cancel/download/search/clear
size 大小,默认单位是px,2.4.0支持rpx/px,2.21.3支持rem等
color 颜色,同css的color单词颜色
<!--index.wxml--> <icon type="success" /> <icon type="success" size="50"/> <icon type="success" size="40" color="lightgreen"/>
progress
组件->基础内容
进度条
<!--index.wxml--> <!-- show-info显示20% --> <progress percent="20" show-info/> <!-- stroke-width="2"设置粗细 --> <progress percent="40" stroke-width="2"/> <!-- 设置颜色 --> <progress percent="60" color="pink"/> <!-- active加载的时候有动画 --> <progress percent="80" active/> /**index.wxss**/ progress { margin-bottom: 20rpx; }
rich-text
组件->基础内容
富文本,在富文本输入框中支持html结构的字符串渲染为wxml
直接写html是不支持的,富文本把htmlStr字符串当做wxml渲染出来,样式也是生效的
<!--index.wxml--> <rich-text nodes="{{htmlStr}}"/> // index.js Page({ data: { htmlStr: ` <div class="div_class"> <h1>title</h1> <p class="p"> Life is <i>like</i> a box of <b> chocolates</b> </p> </div>`, }, }) /**index.wxss**/ .div_class { background-color: cornsilk; } .p{ color: coral; }
二、表单组件
form
事件
bindsubmit 提交表单时候触发 submit 事件 event.detail={ value: {'name': 'value'}, formId: ''}
bindreset 重置表单时触发 reset 事件
input
输入框没有默认的样式,要自己写,所以往往外层包一个view组件
属性
placeholder 预设 placeholder="请输入..."
placeholder-class 指定样式
type 的类型
text 弹起文本输入键盘
number 弹起数字输入键盘
password 密码
disabled 禁用
confirm-type 设置键盘右下角是什么键
send 发送
next 下一个
go 前往
事件
bindinput 键盘输入时触发(双向绑定的时候,避免提示,帮一个空的该事件)
bindfocus 输入框聚焦
bindblur 失焦点(翻译小程序用过)
<!--index.wxml--> <form active=""> <view class="inpntContainer"> <input type="text" name="" id="" placeholder="请输入..." placeholder-class="placeholder"/> </view> <view class="inpntContainer"> <input type="number" name="" id=""/> </view> <view class="inpntContainer"> <input type="password" name="" id=""/> </view> <view class="inpntContainer"> <input type="password" name="" id="" disabled placeholder="禁用"/> </view> </form> /**index.wxss**/ .inpntContainer { padding: 0 20rpx; margin: 30rpx 0; border-top: 1rpx solid #ccc; border-bottom: 1rpx solid #ccc; } input{ margin: 30rpx 0; } .placeholder{ color: red; }
label
用于文字和表单控件绑定在一起
checkbox
checkbox-group
复选框
属性
disabled 禁用
checked 默认选中
外层是 checkbox-group,里面是 checkbox
<!--index.wxml--> <form active=""> <checkbox-group name="checkbox" bindchange=""> <checkbox value="check1">check1</checkbox> <checkbox value="check2" checked>check2</checkbox> <checkbox value="check3" disabled>check3</checkbox> </checkbox-group> </form>
radio
radio-group
单选框
属性
disabled 禁用
checked 默认选中
color
<!--index.wxml--> <form active=""> <radio-group name="radio"> <radio value="male" checked>女</radio> <radio value="female">男</radio> </radio-group> </form>
slider
滑块
bindchange 事件获取一次滑动的值 e.detail.value
属性
min
max 最大值,默认是100,我们可以设置200
step 步长,默认是1,可以设置 step="10"
disabled
backgroundColor 背景颜色
selectedColor 已选的颜色
<!--index.wxml--> <form active=""> <slider bindchange="sliderChange" max="200"></slider> </form> // index.js Page({ data: { }, sliderChange(e){ console.log(e.detail.value); } })
switch
开关
属性
checked 是否选中
disabled 禁用
bindchange 事件
<!--index.wxml--> <form active=""> <switch bindchange="switchChange"></switch> <switch class="switch"></switch> </form> // index.js Page({ data: { }, switchChange(e){ console.log(e.detail.value); } }) /**index.wxss**/ .switch .wx-switch-input{ width: 82rpx !important; height: 40rpx !important; } /* 设置小球 */ .switch .wx-switch-input::after{ width: 34rpx !important; height: 34rpx !important; } /* 设置关闭状态,右边的阴影 */ .switch .wx-switch-input::before{ width: 82rpx !important; height: 34rpx !important; }
textarea
文本域
<!--index.wxml--> <form active=""> <textarea placeholder="请输入..."></textarea> </form> /**index.wxss**/ textarea{ width: 100%; border: 1rpx solid #ccc; padding: 30rpx; }
picker-view
picker-view 里面只能嵌套 picker-view-column
<!--index.wxml--> <form active=""> <picker-view indicator-style="height:40px;" style="height:180px;border:1px solid #ccc;" value="{{value}}" bindchange="pickerChange"> <!-- 年 --> <picker-view-column> <view wx:for="{{years}}" wx:key="this" style="line-height:40px;">{{item}}年</view> </picker-view-column> <!-- 月 --> <picker-view-column> <view wx:for="{{months}}" wx:key="this" style="line-height:40px;">{{item}}月</view> </picker-view-column> <!-- 日 --> <picker-view-column> <view wx:for="{{days}}" wx:key="this" style="line-height:40px;">{{item}}日</view> </picker-view-column> </picker-view> </form> // index.js const years = []; const months = []; const days = []; const date = new Date(); for(let i = 1990; i <= date.getFullYear(); i++){ years.push(i); } for(let i = 1; i <= 12; i++){ months.push(i); } for(let i = 1; i <= 31; i++){ days.push(i); } // console.log(years, months, days); Page({ data: { years, months, days, value: [33, 0, 15] // 默认值从0开始算 }, pickerChange(e){ console.log(e.detail.value); } })
keyboard-accessory
设置 input/textarea 聚焦时候键盘上 cover-view/cover-image 工具栏视图