app.json全局配置
<template name="userTemp">
<view class="user">
<view>姓名:{{item.name}}view>
<view>性别:{{item.age}}view>
view>
template>
<block wx:for="{{users}}">
<template is="userTemp" data="{{item}}">template>
block>
特别注意 :模板中的item代指传入的对象,在调用时data="{{item}}" 必须也要为item,即模板与调用时名称要相同,如果模板写i.name,i.age那么在调用时要写data="{{i}}"
wxss详细知识
以下为两种取值方式
length | % |
---|---|
rpx px rem | 相对于父类容器所占的百分比 |
屏幕固定为750rpx 20rem |
在content外view内的部分为padding,可以通过设置border边界颜色来观察view区域,通过padding设置content与边界的距离,如图绿色部分为padding,蓝色为content
.page_title{
display:inline-block;
padding:20rpx 40rpx;
/* 上下为20rpx 左右为40rpx */
font-size:32rpx;
color:#AAAAAA;
background-color:#26d420;
border-bottom:3px solid #0c0c0c;
}
内联CSS也可称为行内CSS或者行级CSS,它直接在标签内部引入,显著的优点是十分的便捷、高效。
"style1" style="flex-direction=column">
style设置的样式会覆盖在WXSS中设置的样式。
设置边框为圆角后面的大致为圆角的程度,越大圆角的程度越大
设置后width=content+2padding+2border
由box-sizing理解盒模型
通常现在app.wxss的page{}中设置,然后就可以在页面中任何的wxss中去使用变量调用,color:var(–themColor);
WXSS以及支持的选择器
::before ::after
支持.class::after view::after #id.after等等
<view class="a b">view>
定义的view标签有两个名称a和b,设置样式时,.a或者.b均会对view标签样式进行改变
text{
background-color:#000000;
}
.first{
background-color:#DDA000;
}
#first{
background-color:#000ADD;
}
.frist button{
background-color:#ffffff;
}
/* 设置class为frist的组件中所有的button组件 */
如果text的id="first"或者class="first"那么会被.first或者#first的颜色覆盖,text的样式会被忽略
设置文本居中
设置字体居中解决方案
可以使用flex布局
块状盒装内容布局
微信开放社区
flex:none | auto | @flex-grow @flex-shrink @flex-basis
为项目属性
css-新单位vh、vw
在图片的wxss中加入
filter:blur(5rpx)
即可让图片呈现出模糊的状态,blur()中的值越大越模糊
功能或命令 | 快捷键 |
---|---|
Ctrl+/ | 添加注释 |
Ctrl+Shift+k | 删除行 |
Ctrl+K+U | 添加注释和删除注释 |
Ctrl+K+C | 添加注释和删除注释 |
Ctrl + - | 编译器字体减小 |
Ctrl + + | 编译器字体增大 |
Ctrl+Shift+Enter | 在上面插入行 |
HTML Color颜色表
颜色表
生成随机颜色
//生成随机颜色
function getRandomColor(){
var colorStr=Math.floor(Math.random()*0xFFFFFF).toString(16);//生成随机颜色值
//return "#"+"000000".substring(0,6-colorStr)+colorStr;//返回格式化的颜色字符串
return "#"+colorStr;
}
路径
./ ../ 与/
双花括号的用处
- id
- 字符串类型
- 在HTML页面中,JavaScript通过id获取组件的DOM对象,微信小程序框架提供了动态绑定,因此很少使用id属性
- class
- 字符串类型
- 通过class属性设置组件的样式类,该属性的值为样式类名称,在wxss文件中定义样式,如果与动态数据绑定结合,组件的class也将具有动态变换的能力
- style
- 字符串类型
- 在该属性值中可以就可以设置样式,如果与动态数据绑定结合,组件的style也将具有动态变换的能力
- hidden属性
- Boolean类型
- 用来决定该组件是否显示。默认为false即不隐藏
- 通过修改组件的样式来进行隐藏,实际还存在
- data-*属性
- 可以为任何类型
- 用来设置自定义属性值。当组件上绑定的事件触发时,这些自定义属性将作为参数发给事件处理函数,通过传入参数对象的currentTarget.dataset方式获取
- bind*/catch*属性
- 用来为组件定义事件
- bind事件绑定不会阻止冒泡事件向上冒泡,catch事件绑定可以阻止冒泡事件向上冒泡
value属性
value用来表示输入框的内容,在这里设置的值为输入框的初始值
password属性
Boolean类型
当为下列三种情况的时候均认为将组件设置为密码框
"输入密码" type="text" password/>
"输入密码" type="text" password="true"/>
"输入密码" type="text" password="false"/>
只有为下列情况时才设置为非密码框输入
"输入密码" type="text"/>
- min 组件的最小值,默认为0
- max 组件的最大值,默认为100
- step 步长值,必须大于0
- value 组件的当前值
- Show-value 逻辑值,是否在组件右侧显示组件当前值
- bindchange 这是一个组件事件,当拖动滑块操作完成时将触发该事件,并通过event.detail.value传递值到事件处理函数中
<icon type="图片类型" size="图标大小" color="图标颜色"/>
type:指定icon类型,有效值:success、success_no_circle、info、warn、waiting、cancel、download、search、clear。
size:指定图标的大小,单位为px.
color:设置图标的颜色
switch组件的显示样式有两种,一种为switch样式,一种为复选框checkbox样式,前者为switch,后者为checkbox,前者在手机端更常用
使用表单(form)向后端提交数据是十分方便的,表单组件button、checkbox、form、input、label、picker、radio、slider、switch、textarea,携带name属性的表单组件会通过form表单传入e.detail.value中,在该对象中,可以通过e.detail.value.name进行查询
form表单提交,可以不在js设置变量,表单组件中的值全部都在e.detail.value(表单组件必须设置name才可)直接提交给后台
在js中设置变量,可以在视图层提供观察,便于用户使用
<view class="content">
<form bindsubmit="formSubmit" bindreset="formReset">
<view class="section section_gap">
<view class="section_title">声音view>
<switch name="voice" checked="{{open}}"/>
view>
<view class="section section_gap">
<view class="section_title">音量view>
<slider name="volume" show-value value="{{vol}}">slider>
view>
<view class="section">
<view class="section_title">配置名view>
<input name="config_name" placeholder="输入配置名" value="{{configName}}"/>
view>
<view class="btn-area">
<button formType="submit" type="primary" type="primary">确定button>
<button formType="reset">重置button>
view>
form>
view>
form表单中存放form组件,并设立bindsubmit和bindreset事件,通过两个按钮(设置按钮formType属性)进行绑定,提交后,可以通过js,函数的e.detail.value…来获取属性值,如果要将表单中的值提交到后端,需要微信小程序提供的网络API
<view class="btn-area">
<button formType="submit" type="primary" type="primary">确定button>
<button formType="reset">重置button>
view>
表单的提交与重置,设置form-type(老版为formType,现在仍可使用)类型即可
<view class="section">
<view class="section_title">性别:view>
<radio-group name="sex">
<label><radio value="male" checked/>男label>
<label><radio value="female" style="margin-left:20rpx;"/>女label>
radio-group>
view>
<view class="section">
<view class="section_title">想要去的国家view>
<checkbox-group name="region">
<label class="checkbox" wx:for="{{regions}}" wx:key="name">
<checkbox value="{{item.name}}" checked="{{item.checked}}">{{item.value}}checkbox>
label>
checkbox-group>
view>
group的name为提交后的Object对象的属性名,每个元素的值对应的是组件的value属性(可以为数组)
重置时,各组件恢复默认值,而不是重置为页面初始数据data中绑定的值,如果想,则要去实现reset函数
Page({
data:{
open:true,
vol:50,
configName:"配置1"
},
formSubmit:function(e){
console.log('表单提交数据');
console.log(e.detail)
},
formReset:function(e){
this.setData({
open:true,
vol:50,
configName:"配置1"
})
}
})
<radio-group name="sex">
<label><radio value="male" checked/>男</label>
<label><radio value="female" style="margin-left:20rpx;"/>女</label>
</radio-group>
通过e.detail.value.sex获取选中的时male还是female,如果两个都没选中,则返回空字符串,即e.detail.value.sex=""
checkbox组件个checkbox-group组件与radio、radio-group类似,通常成对出现,checkbox-group将多个checkbox组合成一组
<checkbox-group name="region">
<label class="checkbox" wx:for="{{regions}}" wx:key="name">
<checkbox value="{{item.name}}" checked="{{item.checked}}"/>{{item.value}}
label>
checkbox-group>
如果这么写,那么文字部分不属于checkbox,而是属于label标签
<checkbox-group name="region">
<label class="checkbox" wx:for="{{regions}}" wx:key="name">
<checkbox value="{{item.name}}" checked="{{item.checked}}">{{item.value}}checkbox>
label>
checkbox-group>
如此,checkbox和label标签均包含文字,但label是包含一个checkbox组件,其中并没有文字,而是checkbox包含文字
<radio-group class="radio-group" bindchange="radioChange">
<label class="radio" wx:for="{{items}}">
<radio value="{{item.name}}" checked="{{item.checked}}"/>{{item.value}}
label>
radio-group>
input组件可以通过type属性指定输入的类型为data,但是,目前该组件还不能对输入的内容进行日期校验,存在非法日期值,而且需要手动输入,因此有了picker组件
picker滚动选择器组件支持三种数据类型选择器,通过mode属性来区分
分别为普通选择器、事件选择器和日期选择器,默认是普通选择器
普通的输入内容使用input组件就可以了,但只适用于输入内容较少的情况。当用户输入较多内容时,可以使用textarea组件,这个组件可接受多行输入数据,其他方面与input基本相同
<view class="section">
<view class="section_title">其它建议view>
<textarea name="suggest" style="height:100rpx;" placeholder="建议" value="{{suggest}}">
textarea>
view>
只需要动态数据绑定到js即可,内容为value中的值,可一直发生变化
swiper组件的名称叫滑块视图容器,这是一个容器控件,其中放置的组件会轮换显示。需要注意的是,swiper组件中只能放置名为swiper-item的组件,其他组件会被自动删除。但swiper-item组件中又能放置其他要显示的组件。swiper中可放置多个swiper-item组件,然后轮番显示
loading组件显示加载提示信息,组件的主要属性就是hidden,也可以设置bindtap属性来响应单击触按事件,在JS中使用计时器来进行控制
toast组件多了两个属性来进行更多的设置,这样在JS中就可以不适用计时器来设计了
duration属性并不是延时后自动关闭toast组件,而是延时后触发bindchange事件
无论是loading还是toast组件都逐渐被废弃,显示提示信息将使用新提供的API来完成
很多时候,系统弹出的提示信息希望得到用户的反馈,从而决定系统下一步要执行的操作。因此使用弹出框modal组件来处理相关功能需求
当弹出对话框时,对话框后面将添加一个屏蔽层,如果单击屏蔽层,就相当于单击cancel(取消)按钮,即使隐藏了cancel按钮,仍然会触发事件事件执行回调函数,因此即使设置了no-cancel,没有了取消按钮,也要设置bindcancel,因为点击屏蔽层也要执行这个函数
title非必要,可以不写
可以设置一个button按钮来通过点击事件控制modal的hidden属性,以此来控制modal的显示
<modal title="退出应用" hidden="{{modalHidden}}" bindconfirm="modalConfirm" bindcancel="modalCancel">您是否真的要退出应用modal>
<view class="btn-area">
<button type="default" bindtap="modalTap">退出应用button>
view>
bindconfig函数和bindcancel函数合并成了一个函数,可以通过e.type判断用户点击了哪个按钮
在新版微信中,modal组件被废弃,逐渐被wx.showModal接口函数替代
在底部弹出一个列表框供用户进行选择
action-sheet组件是从底部弹出的可选菜单项,他有两个子组件,其中一个为action-sheet-item表示每个菜单选项,一个action-sheet组件可以包含多个action-sheet-item子组件。另一个子组件名为action-sheet-cancel表示取消选项,通常一个action-sheet组件只包含一个action-sheet-cancel子组件,并显示在所有所选菜单项的想法,在点击取消按钮时触发action-sheet组件的change事件
常用属性
<view class="page_bd">
<button type="default" bindtap="actionSheetTap">弹出底部菜单button>
<action-sheet hidden="{{actionSheetHidden}}" bindchange="actionSheetChange">
<block wx:for="{{actionSheetItems}}">
<action-sheet-item class="item" bindtap="bind{{item}}">{{item}}action-sheet-item>
block>
<action-sheet-cancel class="cancel">取消action-sheet-cancel>
action-sheet>
view>
使用该组件可以在微信小程序中播放音乐,该组件属性较多,常用如下
data:{
current:{
poster:'http://r1.ykimg.com/050E0000576B75F667BC3C136B06E4E7',
name:'青云志主题曲《浮诛》',
author:'张杰',
src:'http://scl.111ttt.com/2016/1/09/28/202280605509.mp3'
},
audioAction:{
method:'pause'
}
}
audioAction对象值设置了method属性,并绑定到audio的action属性上,初始设置为暂停状态,即打开页面时音乐不会播放,如果设置为play,则打开页面时音乐自动播放
可以使用微信小程序提供的wx.createAudioContext接口函数获取界面中的audio组件,通过自定义按钮来控制音乐的播放、暂停等功能
落后!!!!!!!!!!!!!!不用了
wx.createAudioContext(audioId)
audioId就是在wxmlaudio中的id属性的值,该接口函数创建并返回audio上下文对象audioContext
audioContext对象通过audioId与界面中的一个audio组件绑定,然后使用下面的方法来操作该audio组件
通过danmu-list添加,每一个弹幕对象有3个属性,分别为文本,颜色,出现的时间,在视频播放到弹幕出现的时间时,该弹幕就从弹幕右侧出现,并向左侧移动
danmu-list:[
{
text: 弹幕文本,
color: 弹幕文本的颜色(十六进制),
time: 弹幕出现的位置(以秒计算)
},
]
在视频播放过程中,如果实时发射弹幕,就需要sendDanmu方法,只不过不需要time(即发射的时间)
而是立即在视频上出现
导航标签,类似超链接标签
属性名 | 类型 | 默认值 | 说明 |
---|---|---|---|
target | String | self | 在哪个目标上发生跳转,默认为当前小程序,可选值有self/miniProgram,可跳转到其他小程序 |
url | String | 当前小程序内的跳转链接 | |
open-type | String | navigate | 跳转方式 |
open-type有效值:
值 | 说明 |
---|---|
navigate | 保留当前页面,跳转到应用内的某个页面,但是不能跳到tabbar页面 |
redirect | 关闭当前页面,跳转到应用内的某个页面,但是不能跳到tabbar页面 |
switchTab | 跳转到tabbar页面,并关闭其他所有非tabbar页面,因此无法返回 |
reLaunch | 关闭所有页面,打开到应用内的某个页面,可以随意跳 |
navigateBack | 关闭当前页面,返回上一页面或多级页面。可通过getCurrentPages()获取当前的页面栈,决定需要返回几层 |
exit | 退出小程序,target="miniProgram"时生效 |
rich-text
详看视频
父组件向子组件传递数据
子向父传递数据使用 this.triggerEvent('',{},{})
,this.triggerEvent(' ',{},{})
第一个参数是自定义事件名称,这个名称是在页面调用组件时bind的名称,第二个对象就可以将想要的属性拿到,第三个参数文档中有介绍
slot 标签 其实就是一个占位符(插槽),等到父组件调用子组件的时候 再传递 标签过来 最终这些传递的标签 就会替换 solt插槽的位置
注意
swiper标签存在默认宽度和高度
100% * 150px
image标签也存在默认的宽度和高度
320px * 240px
因此在使用swiper播放图片的时候,要通过设置来调整image与swiper的关系
步骤
1 先看一下原图的宽高
2 让图片的高度自适应 宽度等于100%
3 设置图片标签mode属性为widthFix
让图片的标签宽高 和 图片标签的内容的宽高都等比例的发生变化
4 让swiper标签的高度 变成和图片的高一样即可
如果字符串与一个数值相乘,则结果为数值,其中空字符串为0
isNaN()函数
把一个值传给isNaN()后,该函数会把传入的值尝试转化为数值,如果不能转化则返回true
双引号与单引号
""会搜索引号的内容是不是有变量,有则输出其值,没有则输出其内容,单引号不进行检索,所以当为纯字符串时,单引号的效率更高
== 与 === 的区别
=== 只有在两个操作数在不转换的前提下相等才返回true
==两个操作符会先进行类型转换再确定操作数是否相等
e.target.id e.target获取当前组件
e.currentTarget.dataset.
split()函数
split(separator)[length],其中不包括separator,此处为小程序中的写法,与js中的有些不同
JavaScript中splilt()函数用法
toString()函数
将数据转化为字符串并返回
JavaScript中的toString()方法
wx.setStorage({
key:"key",
data:"value",
success:function(e){
console.log("success");
console.log(e);
},
fail:function(err){
console.log("fail");
console.log(err);
},
complete:function(e){
console.log("complete");
console.log(e);
}
})
errMsg属性的值都为“setStorage:ok”,表示本地缓存成功
wx.setStorageSync(KEY,DATA)
其中KEY、DATA与wx.setStorage中Object的同名属性相同
在很多情况下,使用这个同步接口就可以,但是最好在外部包一个错误捕获。
try{
wx.setStorageSync('key','value')
}catch(e){
console.log(e)
}
如下,创建数组,和调用获取信息以及保存数据都有所不同
Page({
data:{
//expr:"历史记录"
exprs:[]
},
onLoad:function(options){
this.setData({
exprs:wx.getStorageSync("exprs") || []
})
}
})
var saveExprs = function(expr){
var exprs = wx.getStorageSync('exprs') || []
exprs.unshift(expr); //在数组开头增加一个元素
wx.setStorageSync('exprs',exprs); //保存数据
}
在进行保存时,调用该函数即可
当小程序发布后,用户不能直观的看到这些数据,因此,需要编写代码将本地存储的数据调出来,显示到一个界面,让用户可以看到。可以设置新的页面,通过切换来展示数据,也可以在原页面进行显示
获取本地缓存数据
这是一个异步接口,从本地缓存中获取指定key对应的内容,该接口函数有一个Object类型的参数,通过设置Object对象的属性进行操作,具体属性如下
Page({
data:{
expr:"历史记录"
},
onLoad:function(options){
this.setData({
expr:wx.getStorageSync("expr")
})
}
})
wx.navigateTo接口函数的参数是一个Object对象,具有的属性如下
在微信小程序中,本地缓存有永久存储的特性,但是数据量的大小是有限制的,最大为10MB,在极端情况下,会导致容量不够而不能使用,因此微信小程序提供了两个清理本地缓存的接口函数
try{
wx.clearStorageSync()
}catch(e){
console.log(e)
}
语法:setInterval(param1,param2)
param1 要调用的函数或要执行的代码串。
param2 周期性调用param1的时间间隔,单位:毫秒
表示每隔多少毫秒执行一次param1。
停止执行需要使用clearInterval()。
setTimeout(param1,param2)定时执行函数
param2 秒后执行 param1函数
可以有两种写法,一种为setTimeout内执行代码,一种为setTimeout内调用函数
setTimeout(function(){
console.log('123')
},2000)
setTimeout(this.funcA,2000)
funcA:function(){
console.log('funcA')
}
显示消息提示框,该函数接受一个Object的参数
注意,三个回调函数的执行时机是在wx.showToast函数执行成功、失败、完毕之后马上执行,并不是等到duration延时之后才执行,提示框显示出来就表示执行成功,直接执行success和complete函数
微信小程序wx.showToast字数限制不能换行的问题
使用wx.showToast接口函数时,当有icon图标时提示信息只能显示一行,此时,如果想显示多行文字可以设置icon:'none',来隐藏图标,而让文字全部显示出来
在需要显示提示框时,只需要在JS中直接调用即可,不需要添加loading组件或者toast组件
目前wx.showModal函数的content属性只能显示普通字符串,还无法设置HTML代码或嵌入其他小程序组件,功能中还没有modal组件在WXML里设计出接收用户输入的对话框
该接口函数的参数为一个Object对象,通过对象的属性对弹出框进行控制
modalTap3:function(){
wx.showModal({
title:'提示',
content:'这是使用API显示的弹出窗',
success:function(res){
if(res.confirm){
console.log('用户单击确定')
}else if(res.cancel==1){
console.log('用户单击取消')
}
}
})
}
该接口函数的参数是一个Object对象,通过对象的属性对弹出菜单框进行控制
actionSheetTap2:function(e){
wx.showActionSheet({
itemList: items,
success:function(res){
console.log("success");
console.log(res);
if(!res.cancel){//用户单击的不是取消菜单项
console.log(res.tapIndex)
}
},
complete:function(e){
console.log("complete");
console.log(e);
}
})
}
在单击菜单项时,控制台输出信息res.tapIndex,即菜单项的下标,而没有cancel属性
在单击取消时,cancel属性值为true,而没有tapIndex属性(有出入)
新版API
这是一个函数可以完成从服务的获取数据,向服务器端提交数据等各种网络交互操作。wx.request接口函数的参数为一个Object对象,用来控制网络交互
微信小程序中的wx.request接口函数发起的是https请求。一个微信小程序,同时只能有5个网络请求连接
合法域名必须为https
访问的网址要添加到后台
内部函数调用外部函数
var items=['菜单1','菜单2','菜单3','菜单4'];
var pageObject={
data:{
actionSheetHidden:true, //action-sheet组件的隐藏状态
actionSheetItems:items //菜单数组
},
//按钮单击事件
actionSheetTap:function(e){
this.setData({
actionSheetHidden:false
})
},
//action-sheet的change事件
actionSheetChange:function(e){
this.setData({
actionSheetHidden:true
})
}
}
//循环生成4个菜单项的单击事件
for(var i=0;i<items.length;++i){
(function(itemName){
pageObject['bind'+itemName]=function(e){
console.log('click'+itemName);
console.log(e);
this.setData({
actionSheetHidden:true
})
}
})(items[i])
}
Page(pageObject) //初始化页面,将对象传入,Page({}) //对象在外面定义,而不是直接写入
注意
forEach()方法没有返回值
forEach
let {index}=this.data.dataset
等价于let index=this.data.dataset.index
methods: {
helloTap(){
let {arr}=this.data;
arr.forEach((v,i)=>{
console.log(v.id);
v.name+="3";
this.setData({
arr//赋值方法
})
})
}
}