小程序的运行环境分红渲染层和逻辑层,其中 WXML 模板和 WXSS 样式工做在渲染层,JS 脚本工做在逻辑层。这样在小程序中不能使用一些前端的框架,如jQuery、Zepto等。而网页开发者可使用到各类浏览器暴露出来的 DOM API,进行DOM选中和操做。javascript
小程序根目录下的 app.json 文件用来对微信小程序进行全局配置,决定页面文件的路径、窗口表现、设置网络超时时间、设置多 tab 等。前端
属性 | 类型 | 描述 |
---|---|---|
pages | string[] | 页面路径列表 |
window | Object | 全局的默认窗口表现 |
tabBar | Object | 底部 tab 栏的表现 |
networkTimeout | Object | 网络超时时间 |
debug | boolean | 是否开启 debug 模式,默认关闭 |
{
"pages": [ // 第一项为默认首页
"pages/index/index",
"pages/logs/index"
],
"window": {
"navigationBarBackgroundColor": "#ffffff", //导航栏背景颜色
"navigationBarTextStyle": "black",//导航栏标题颜色
"navigationBarTitleText": "微信", //导航栏标题文字内容
"backgroundColor": "#eeeeee", //窗口的背景色
"backgroundTextStyle": "light" //下拉 loading 的样式,仅支持 dark / light
},
"tabBar": {
"color": "#666",//未选中的的文字颜色
"selectedColor": "#ff8928",//选中的的文字颜色
"list": [{
"pagePath": "pages/index/index", //页面路径
"text": "首页",//tab 上按钮文字
"iconPath": "images/tabBar_img2.png", //未选中的图片路径
"selectedIconPath": "images/tabBar_img1.png"//选中时的图片路径
}, {
"pagePath": "pages/logs/logs",
"text": "日志"
}]
},
"networkTimeout": {
"request": 10000, //wx.request 的超时时间
"downloadFile": 10000 //wx.downloadFile 的超时时间
},
"debug": true,
"navigateToMiniProgramAppIdList": [ //容许跳转到其余小程序的appId
"wxe5f52902cf4de896"
]
}
复制代码
每个小程序页面也可使用同名 .json 文件来对本页面的窗口表现进行配置,页面中配置项会覆盖 app.json 的 window 中相同的配置项。java
{
"navigationBarBackgroundColor": "#ffffff",
"navigationBarTextStyle": "black",
"navigationBarTitleText": "微信接口功能演示",
"backgroundColor": "#eeeeee",
"backgroundTextStyle": "light"
}
复制代码
小程序根目录下的 sitemap.json 文件用来配置小程序及其页面是否容许被微信索引。web
整个小程序只有一个 App 实例,是所有页面共享的。开发者能够经过 getApp 方法获取到全局惟一的 App 示例,获取App上的数据或调用开发者注册在 App 上的函数。json
App({
onLaunch (options) { //生命周期回调——监听小程序初始化
// Do something initial when launch.
},
onShow (options) { //生命周期回调——监听小程序启动或切前台
// Do something when show.
},
onHide () { //生命周期回调——监听小程序切后台
// Do something when hide.
},
onError (msg) { //错误监听函数
console.log(msg)
},
onPageNotFound(res){ //页面不存在监听函数
// Do something when page not found.
},
globalData: 'I am global data'
})
复制代码
其余页面引用:
const appInstance = getApp()
console.log(appInstance.globalData) // I am global data
复制代码
Page({
data: { //页面的初始数据
text: "This is page data."
},
onLoad: function(options) { //生命周期回调—监听页面加载
// Do some initialize when page load.
},
onReady: function() { //生命周期回调—监听页面初次渲染完成
// Do something when page ready.
},
onShow: function() { //生命周期回调—监听页面显示
// Do something when page show.
},
onHide: function() { //生命周期回调—监听页面隐藏
// Do something when page hide.
},
onUnload: function() { //生命周期回调—监听页面卸载
// Do something when page close.
},
onPullDownRefresh: function() { //监听用户下拉动做
// Do something when pull down.
},
onReachBottom: function() { //页面上拉触底事件的处理函数
// Do something when page reach bottom.
},
onShareAppMessage: function (res) { //用户点击右上角转发
if (res.from === 'button') {
// 来自页面内转发按钮
console.log(res.target)
}
return {
title: '自定义转发标题',
path: '/page/user?id=123'
}
},
onPageScroll: function() { // 页面滚动触发事件的处理函数
// Do something when page scroll
},
onResize: function() { //页面尺寸改变时触发,详见 响应显示区域变化
// Do something when page resize
},
onTabItemTap(item) { //点击 tab 时触发
console.log(item.index); //被点击tabItem的序号,从0开始
console.log(item.pagePath); //被点击tabItem的页面路径
console.log(item.text); //被点击tabItem的按钮文字
}
})
复制代码
框架以栈的形式维护了当前的全部页面canvas
调用 API wx.navigateTo
使用组件 <navigator url="/page/index/index" open-type="navigateTo"/>
复制代码
调用 API wx.redirectTo
使用组件 <navigator url="/page/index/index" open-type="redirectTo"/>
复制代码
调用 API wx.navigateBack
使用组件<navigator url="/page/index/index" open-type="navigateBack">
用户按左上角返回按钮
复制代码
调用 API wx.switchTab
使用组件 <navigator open-type="switchTab"/>
用户切换 Tab
复制代码
调用 API wx.reLaunch
使用组件 <navigator open-type="reLaunch"/>
复制代码
能够将一些公共的代码抽离成为一个单独的 js 文件,做为一个模块。模块只有经过 module.exports 或者 exports 才能对外暴露接口。小程序
// common.js
function sayHello(name) {
console.log(`Hello ${name} !`)
}
function sayGoodbye(name) {
console.log(`Goodbye ${name} !`)
}
module.exports.sayHello = sayHello
exports.sayGoodbye = sayGoodbye
//引入并调用
var common = require('common.js')
Page({
helloMINA: function() {
common.sayHello('MINA')
},
goodbyeMINA: function() {
common.sayGoodbye('MINA')
}
})
复制代码
名称 | 说明 |
---|---|
wx.showToast | 显示消息提示框 |
wx.showLoading | 显示 loading 提示框 |
wx.request | 发起 HTTPS 网络请求 |
wx.uploadFile | 将本地资源上传到服务器 |
wx.showShareMenu | 显示当前页面的转发按钮 |
wx.login | 调用接口获取登陆凭证(code) |
wx.checkSession | 检查登陆态是否过时 |
wx.getAccountInfoSync | 获取当前账号信息 |
wx.getUserInfo | 获取用户信息 |
wx.UserInfo | 用户信息 |
wx.authorize | 提早向用户发起受权请求 |
wx.setClipboardData | 设置系统剪贴板的内容 |
wx.getClipboardData | 获取系统剪贴板的内容 |
WXML(WeiXin Markup Language)是框架设计的一套标签语言,结合基础组件、事件系统,能够构建出页面的结构。微信小程序
WXML 中的动态数据均来自对应 Page 的 data,使用双大括号将变量包起来。数组
<!--wxml-->
<view> {{message}} </view>
// page.js
Page({
data: {
message: 'Hello MINA!'
}
})
复制代码
在组件上使用 wx:for 控制属性绑定一个数组,便可使用数组中各项的数据重复渲染该组件。
默认数组的当前项的下标变量名默认为 index,数组当前项的变量名默认为 item。浏览器
<!--wxml-->
<view wx:for="{{array}}"> {{item}} </view>
// page.js
Page({
data: {
array: [1, 2, 3, 4, 5]
}
})
复制代码
在框架中,使用 wx:if="" 来判断是否须要渲染该代码块。
默认数组的当前项的下标变量名默认为 index,数组当前项的变量名默认为 item。
<!--wxml-->
<view wx:if="{{view == 'WEBVIEW'}}"> WEBVIEW </view>
<view wx:elif="{{view == 'APP'}}"> APP </view>
<view wx:else="{{view == 'MINA'}}"> MINA </view>
// page.js
Page({
data: {
view: 'MINA'
}
})
复制代码
wx:if vs hidden
由于 wx:if 之中的模板也可能包含数据绑定,因此当 wx:if的条件值切换时,框架有一个局部渲染的过程,由于它会确保条件块在切换时销毁或从新渲染。
同时 wx:if 也是惰性的,若是在初始渲染条件为false,框架什么也不作,在条件第一次变成真的时候才开始局部渲染。
相比之下,hidden 就简单的多,组件始终会被渲染,只是简单的控制显示与隐藏。
通常来讲,wx:if 有更高的切换消耗而 hidden。有更高的初始渲染消耗。
所以,若是须要频繁切换的情景下,用 hidden 更好,若是在运行时条件不大可能改变则 wx:if 较好。
WXML提供模板(template),能够在模板中定义代码片断,而后在不一样的地方调用。
<!--wxml-->
<template name="staffName">
<view>
FirstName: {{firstName}}, LastName: {{lastName}}
</view>
</template>
<template is="staffName" data="{{...staffA}}"></template>
// page.js
Page({
data: {
staffA: {firstName: 'Hulk', lastName: 'Hu'},
}
})
复制代码
WXML 提供两种文件引用方式import和include。
import能够在该文件中使用目标文件定义的template
<!-- item.wxml -->
<template name="item">
<text>{{text}}</text>
</template>
//引用
<import src="item.wxml"/>
<template is="item" data="{{text: 'forbar'}}"/>
复制代码
include 能够将目标文件除了template,wxs外的整个代码引入,至关因而拷贝到 include 位置。
<!-- header.wxml -->
<view> header </view>
<!-- footer.wxml -->
<view> footer </view>
<!-- index.wxml -->
<include src="header.wxml"/>
<view> body </view>
<include src="footer.wxml"/>
复制代码
WXSS (WeiXin Style Sheets)是一套样式语言,用于描述 WXML 的组件样式。
与 CSS 相比,WXSS 扩展的特性有:
尺寸单位
样式导入
rpx(responsive pixel): 能够根据屏幕宽度进行自适应。规定屏幕宽为750rpx。如在 iPhone6 上,屏幕宽度为375px,共有750个物理像素,则750rpx = 375px = 750物理像素,1rpx = 0.5px = 1物理像素。
/** common.wxss **/
.small-p {
padding:5px;
}
/** app.wxss **/
@import "common.wxss";
.middle-p {
padding:15px;
}
复制代码
<view style="color:{{color}};" />
<view class="normal_view" />
复制代码
WXS(WeiXin Script)是小程序的一套脚本语言,结合 WXML,能够构建出页面的结构。
<!-- tools.wxs -->
var foo = "'hello world' from tools.wxs";
var bar = function (d) {
return d;
}
module.exports = {
FOO: foo,
bar: bar,
};
module.exports.msg = "some msg";
<!-- page/index/index.wxml -->
<wxs src="./../tools.wxs" module="tools" />
<view> {{tools.msg}} </view>
<view> {{tools.bar(tools.FOO)}} </view>
<!--页面输出: -->
some msg
'hello world' from tools.wxs
复制代码
<!-- tools.wxs -->
var foo = "'hello world' from tools.wxs";
var bar = function (d) {
return d;
}
module.exports = {
FOO: foo,
bar: bar,
};
module.exports.msg = "some msg";
<!--logic.wxs-->
var tools = require("./tools.wxs");
console.log(tools.FOO);
console.log(tools.bar("logic.wxs"));
console.log(tools.msg);
<!-- /page/index/index.wxml -->
<wxs src="./../logic.wxs" module="logic" />
<!--控制台输出:-->
'hello world' from tools.wxs
logic.wxs
some msg
复制代码
WXS 中的变量均为值的引用。
没有声明的变量直接赋值使用,会被定义为全局变量。
若是只声明变量而不赋值,则默认值为 undefined。
var表现与javascript一致,会有变量提高。
var foo = 1;
var bar = "hello world";
var i; // i === undefined
变量命名必须符合下面两个规则:
首字符必须是:字母(a-zA-Z),下划线(_)
剩余字符能够是:字母(a-zA-Z),下划线(_), 数字(0-9)
复制代码
<!-- wxml -->
<wxs module="sample">
// 方法一:单行注释
/*
方法二:多行注释
*/
/*
方法三:结尾注释。即从 /* 开始日后的全部 WXS 代码均被注释
var a = 1;
var b = 2;
var c = "fake";
</wxs>
复制代码
事件是视图层到逻辑层的通信方式。
事件能够将用户的行为反馈到逻辑层进行处理。
事件能够绑定在组件上,当达到触发事件,就会执行逻辑层中对应的事件处理函数。
事件对象能够携带额外信息,如 id, dataset, touches
类型 | 触发条件 |
---|---|
touchstart | 手指触摸动做开始 |
touchmove | 手指触摸后移动 |
touchcancel | 手指触摸动做被打断,如来电提醒,弹窗 |
touchend | 手指触摸动做结束 |
tap | 手指触摸后立刻离开 |
longpress | 手指触摸后,超过350ms再离开,若是指定了事件回调函数并触发了这个事件,tap事件将不被触发 |
longtap | 手指触摸后,超过350ms再离开(推荐使用longpress事件代替) |
transitionend | 会在 WXSS transition 或 wx.createAnimation 动画结束后触发 |
animationstart | 会在一个 WXSS animation 动画开始时触发 |
animationiteration | 会在一个 WXSS animation 一次迭代结束时触发 |
animationend | 会在一个 WXSS animation 动画完成时触发 |
touchforcechange | 在支持 3D Touch 的 iPhone 设备,重按时会触发 |
submit | 提交表单 |
scroll | 滚动事件 |
事件绑定的写法以 key、value 的形式,key以bind或catch开头,而后跟上事件的类型,如bindtap、catchtouchstart。
bind事件绑定不会阻止冒泡事件向上冒泡
catch事件绑定能够阻止冒泡事件向上冒泡
名称 | 功能说明 |
---|---|
movable-view | 可移动的视图容器,在页面中能够拖拽滑动 |
cover-image | 覆盖在原生组件之上的图片视图 |
cover-view | 覆盖在原生组件之上的文本视图 |
movable-area | movable-view的可移动区域 |
scroll-view | 可滚动视图区域 |
swiper | 滑块视图容器 |
swiper-item | 仅可放置在swiper组件中,宽高自动设置为100% |
view | 视图容器 |
名称 | 功能说明 |
---|---|
icon | 图标 |
progress | 进度条 |
rich-text | 富文本 |
text | 文本 |
名称 | 功能说明 |
---|---|
button | 按钮 |
checkbox | 多选项目 |
checkbox-group | 多项选择器,内部由多个checkbox组成 |
editor | 富文本编辑器,能够对图片、文字进行编辑 |
form | 表单 |
input | 输入框 |
label | 用来改进表单组件的可用性 |
picker | 从底部弹起的滚动选择器 |
picker-view | 嵌入页面的滚动选择器 |
picker-view-column | 滚动选择器子项 |
radio | 单选项目 |
radio-group | 单项选择器,内部由多个 radio 组成 |
slider | 滑动选择器 |
switch | 开关选择器 |
textarea | 多行输入框 |
名称 | 功能说明 |
---|---|
functional-page-navigator | 仅在插件中有效,用于跳转到插件功能页 |
navigator | 页面连接 |
名称 | 功能说明 |
---|---|
audio | 音频 |
camera | 系统相机 |
image | 图片 |
live-player | 实时音视频播放 |
live-pusher | 实时音视频录制 |
video | 视频 |
名称 | 功能说明 |
---|---|
map | 地图 |
名称 | 功能说明 |
---|---|
canvas | 画布 |
名称 | 功能说明 |
---|---|
web-view | 承载网页的容器 |
ad | Banner 广告 |
official-account | 公众号关注组件 |
open-data | 用于展现微信开放的数据 |
// common.js
function sayHello(name) {
console.log(`Hello ${name} !`)
}
function sayGoodbye(name) {
console.log(`Goodbye ${name} !`)
}
module.exports.sayHello = sayHello;
//引用
exports.sayGoodbye = sayGoodbye
var common = require('common.js')
Page({
helloMINA: function() {
common.sayHello('MINA')
},
goodbyeMINA: function() {
common.sayGoodbye('MINA')
}
})
复制代码
wx.navigateTo({ //跳转-保留当前页面,跳转到应用内的某个页面
url: 'test?id=1'
})
wx.redirectTo({ //跳转-关闭当前页面
url: 'test?id=1'
})
复制代码
var app=getApp()
复制代码
<view class="d-row1-cire {{stpe>=2?'on-2':''}}"></view>
复制代码
若是文章中有误的,能够留言告知。但愿这篇文章对你有帮助!一块儿成长!一块儿进步!
此篇仅我的总结微信小程序,若是想查看更多的详情能够前往 微信小程序官网