微信小程序基础知识(一)


资料来源:《微信小程序》黑马程序员编著


一、微信小程序介绍:

  • 微信小程序是一种不需要安装即可使用的应用,用户只要“扫一扫”或“搜一搜”即可打开应用,无须安装或卸载。微信小程序运行于微信之上,它的交互类似于手机原生应用,但是每个应用的体积非常小(目前上限是2048kb),具有无须安装、触手可及、用完即走、无须卸载的特点。
  • 微信小程序借鉴了现有的Web技术,通过独立的运行环境实现了跨平台,并提供了接近原生APP的使用体验,具有明显的优势。为了降低微信小程序的开发成本,提高开发效率,微信小程序的开发方式与Web APP相似,即通过WXML(类似HTML)、WXSS(类似CSS)和JavaScript进行开发,(小程序也有一套脚本语言,为WXS(WeiXin Script),语法与JavaScript类似又存在少量差异,具体可以查看小程序官方手册对WXS的说明)并且提供了丰富的组件、API(https://developers.weixin.qq.com/miniprogram/dev/framework/)和接口,从而具有更接近原生APP的使用体验。微信小程序相比Web APP也有一些不足,它不支持HTML标签和DOM操作,对CSS的支持也有限,一些成熟的前端库和框架(如jQuery、Vue.js)也无法使用,如果将Web APP修改成微信小程序需要进行大量的改动。微信小程序适合开发一些业务逻辑简单、低频次使用、对性能要求不高的应用。
  • 开发环境的搭建:微信公众平台(https://mp.weiixn.qq.com)中选择小程序并注册一个小程序账号-->登录注册的账号-->开发工具中选择稳定版本的工具进行安装(涉及到的其他信息后续会介绍到)-->跳转的网页有工具的介绍
  • 项目创建:打开已安装的微信开发者工具-->选择小程序-->完善项目的信息(选择不使用云服务)-->此时一个带有模板的项目已创建

  •  项目目录介绍:app.js是应用程序的逻辑文件;app.json是应用程序的配置文件(进行页面路径、窗口表现、底部tab栏···);app.wxss是应用程序的公共样式文件;project.config.json是项目的配置文件;sitemap.json用来配置小程序及其页面是否允许被微信索引。;index目录和logs目录是两个页面,每个页面包含四个文件,分别是结构文件、样式文件、逻辑文件和配置文件;

二、页面和语法介绍

  • WXML和WXSS的语法:WXML和WXSS的语法与HTML和WXSS类似,这里做简单的介绍,后续会慢慢的补充。
常见的页面组件
标签功能标签功能
<view>视图容器<icon>图标文件
<text>文本域<checkbox>复选框
<button>按钮<radio>单选框
<image>图片<input>输入框
<form>表单<progress>进度条
input组件的type属性
可选值说明
text文本输入键盘(默认)
number数字输入键盘
idcard身份证输入键盘
digit带小数点的数字键盘
WXSS选择器
选择器示例说明
.class.container选择所有class="container"的组件
#id#id选择id="#id"的组件
elementview、text、button选择所有view组件
element,element(并集)view、text选择所有
::after(伪类选择器)view::after在view组件内的后面插入内容
::before(伪类选择器)view::before在view组件内的前面插入内容
  • 尺寸单位:移动端网页像素单位的换算难点在于有物理像素和逻辑像素两种单位,物理像素是指屏上有多少个像素,而逻辑像素是指WXSS中使用的像素单位。小程序中引入rpx规定了任何手机屏幕的宽度都为750rpx(逻辑像素),由小程序内部负责将逻辑像素转换为当前手机中的物理像素。
  • 样式导入和公共样式文件:在WXSS中可以使用@import语句导入外联样式表。语法:@import “路径”;可以将多个页面的公共样式文件写在app.wxss中,页面样式的优先级高于公共样式文件,发生冲突时会覆盖公共样式文件。
  • 配置文件:小程序的每个页面均可以使用json文件对页面的效果进行配置。页面配置分为页面级和应用级,pages/index/index.json时页面级配置文件,而app.json是应用级配置文件。
常用的页面级配置
属性说明
navigationBarBackgroundColor导航栏背景颜色,默认为#000000
navigationBarTextStyle导航栏标题颜色,仅支持black、white(默认)
navigationBarTitleText导航栏的标题文字内容
backgroundColor窗口的背景色,默认为#ffffff
backgroundTextStyle下拉loading的样式,仅支持dark(默认)、light
enablePullDownRefresh是否全局开启下拉刷新,默认为false
onReachBottomDistance页面上拉触底事件触发时距页面底部距离(单位为px),默认为50
disableScroll默认为false。设为true时,页面整体不能上下滚动

若将enablePullDownRefresh设为true,页面可以下拉刷新,当下拉刷新操作执行时,就会触发下拉刷新事件onPullDownRefresh,在pages/index/index.js文件中可以找到该事件的处理函数。onReachBottomDistance主要用于开发自动加载更多的功能,也就是当页面中的内容非常长的时候,为了加快加载速度,并不是一次性加载所有的数据,而是先加载一部分数据将页面填满,知道出现滚动条,页面可以向上滚动。当用户向上拉时,如果快要到达底部了,就立即加载后面的数据。因此,onReachBottomDistance的值越大,加载的时机越提前。如果达到了给定的值,就会触发上拉触底事件onReachBottom,在pages/index/index.js文件中可以找到该事件的处理函数。

应用级配置文件(app.json)
属性说明
pages页面路径列表
window全局的默认窗口表现
tabBar底部tab栏的表现
networkTimeout网络超时时间
debug是否开启调试模式,默认为false
requireBackgroundModes需要在后台使用的能力,如音乐播放
plugins使用到的插件

上述属性中,pages用来在app.json中设置页面;window的值是一个对象,可以将页面级的配置写在window中,作为应用级配置使用,从而一次设置多个页面,且优先级低于页面级配置;tabBar、plugins和requiredBackgroundModes后续会介绍;debug开启后可以在控制台中输出调试信息,帮助开发者快速定位到一些常见的问题。networkTimeout可以设置网络请求过程中的超时时间,详细如下表

networkTimeout属性
属性类型说明
requestNumberwx.requert()的超时时间(ms),默认为60000
connectSocketNumberwx.connectSocket()的超时时间(ms),默认为60000
uploadFileNumberwx.uploadFile()的超时时间(ms),默认为60000
downloadFileNumberwx.downloadFile()的超时时间(ms),默认为60000

上表中,以wx.开始的是小程序中的API,如wx.request()用于发送网络请求,关于这些API的具体使用方法后面会逐渐介绍。

  • 页面逻辑:在项目中,类似pages/index/index.js文件用于编写页面逻辑。文件中的Page()函数用来注册一个页面,该函数的参数是一个对象,通过该对象可以指定页面的初始数据、生命周期函数、事件处理函数等。
Page()函数参数对象的属性
属性类型说明
dataObject页面的初始数据
onLoadFunction生命周期回调函数,监听页面加载
onReadyFunction生命周期回调函数,监听页面初次渲染完成
onShowFunction生命周期回调函数,监听页面显示
onHideFunction生命周期回调函数,监听页面隐藏
onUnloadFunction生命周期回调函数,监听页面卸载
onPullDownRefreshFunction页面事件处理函数,监听用户下拉动作
onReachBottomFunction页面事件处理函数,页面上拉触底
onShareAppMessageFunction页面事件处理函数,用户单击右上角的分享按钮
onPageScrollFunction页面事件处理函数,页面滚动会连续触发
其他Any开发者可以添加任意的函数或者数据,在页面的函数中可以通过this.*来访问
  •  生命周期函数: onLoad:页面加载时触发,一个页面只会调用一次。通过参数options可以获取打开当前页面路径中的参数。onReady:页面初次渲染完成的时候调用。一个页面只会调用一次,代表页面已经准备妥当,此时可以与视图层进行交互。onShow:当页面显示时触发。如从后台切入前台时触发。onHide:当页面隐藏时触发。如从前台切入后台时触发。onUnload:页面卸载时触发。如使用路由API中的wx.redirectTo()或wx.navigateBack()跳转其他页面时触发。
  • 页面事件函数:onPullDownRefresh需要在配置文件中将enablePullDownRefresh设为true才会有效。
  • 组件事件函数:(1)事件对象:通过事件对象e,可以获取type(事件类型)、timestamp(事件生成时的时间戳)、target(触发事件的组件的一些属性值集合)、currentTarget(当前组件的属性值集合)、detail(额外的信息)等信息。注意:target和currentTarget在父子组件嵌套的情况下会有分明。(2)常用事件:小程序有明确的视图层和逻辑层的划分,视图层使用WXML和WXSS编写,有组件来进行展示;逻辑层使用JavaScript编写,但小程序并非运行在浏览器环境中,不能使用BOM和DOM。通过事件可以实现以视图层到逻辑层的通信。(3)事件绑定和冒泡:组件绑定事件时,有两种方式,分别是“bind事件类型”和“catch事件类型”。bind方式不会阻止事件向上冒泡,而catch方式阻止冒泡事件向上冒泡。
常用的冒泡事件
事件类型触发条件
touchstart手指触摸动作开始
touchmove手指触摸后移动
touchcancel手指触摸动作被打断,如来电提醒、弹窗
touchend手指触摸动作结束
tap手指触摸后马上离开
longpress手指触摸后,超过350ms再离开。如果指定了事件回调函数并触发了这个事件,tap事件将不被触发
  • 注册程序:在小程序启动、显示、隐藏时执行某些操作,可以通过App()函数来实现。App()函数用于注册小程序,它接受一个对象参数,通过参数指定小程序的生命周期回调等。App()函数必须在app.js中调用且只能调用一次,不然会出现无法预期的后果。
App()函数参数对象的属性
属性类型说明
onLaunchFunction生命周期回调,监听小程序初始化(全局只触发一次)
onShowFunction生命周期回调,监听小程序显示
onHideFunction生命周期回调,监听小程序隐藏
onErrorFunction错误监听函数,小程序发生脚本错误,或者API调用失败时触发
onPageNotFoundFunction页面不存在监听函数,小程序要打开的页面不存在时触发
其他Any可以添加一些作为所有页面共享的数据,通过getApp()获取小程序App实例即可

三、基本知识介绍

  • “{{}}”双大括号和setData()函数:在WXML中使用双大括号“{{}}”可以实现数据绑定和算术计算,这种语法又称为Mustache语法。双大括号中可以写一个变量名,如{{result}},在页面打开后会到Page({data:{result:""},···})中读取result的值,显示在页面中。注意:不能通过直接赋值的方式来改变页面中{{result}}的值,如this.data.result=str。需要通过this.setData()方法来实现,该方法的参数是一个对象。
  • 同一组件的相同事件:可以为多个相同组件绑定相同事件处理函数,只需为不同的组件设置不同id或dataset即可。具体为通过事件对象的属性集实现。
  • 条件渲染和<block>:微信小程序中通过wx:if语法来定义条件渲染。此外,还支持wx:if和wx:else以及wx:if、wx:elif和wx:else的结构语法。有时控制一块区域是否出现则使用<block>标签会更加方便。<block>标签并不是一个组件,仅仅是一个包装元素,不会在页面中做任何渲染,只接受控制属性。
  • 列表渲染:例:<label wx:for="{{ranges}}" wx:key="value"><checkbox value="{{item.value}}" checked="{{item.checked}}" />{{item.name}}</label>;wx:for用作列表渲染,,用于根据给定的数组重复渲染该组件。在列表渲染标签内,可以使用item表示数组的当前项,使用index表示当前项的下标。wx:key表示每一项的唯一标识,值为value表示将每一项的value属性作为唯一标识,也可以用保留关键字*this表示将每一项本身作为唯一标识。列表渲染中,设置wx:key可以在数据改变后在页面中重新渲染时,使原有的组件保持自身的状态,而不是重新创建且提高了列表渲染时的效率。
  • swiper组件:swiper组件是滑块视图容器,语法:<swiper><swiper-item></swiper-item></swiper>小程序中没有严格规定<swiper-item>标签内可以嵌套哪些组件,如果放入image组件,就实现了轮播图的效果;如果放入一块页面内容,就可以实现标签页切换的效果。
swiper组件的常用属性
属性类型说明
indicator-dotsBoolean是否显示面板指示点,默认为false
indicator-colorColor指示点颜色,默认为rgba(0,0,0,3)
indicator-active-colorColor当前选中的指示点颜色,默认为#000000
autoplayBoolean是否自动切换,默认为false
currentNumber当前所在滑块的index,默认为0
current-item-idString当前所在滑块的item-id(不能同时指定current)
intervalNumber自动切换时间间隔(ms),默认为5000
durationNumber滑动动画市场(ms),默认为500
circularBoolean是否采用衔接滑动,默认为false
verticalBoolean滑动方向是否为纵向,默认为false
bindchangeEventHandlecurrent改变时会触发change事件
  • include代码引用:单标签,在wxml文件中可以使用<include>标签引用其他文件中的代码,相当于把引用的代码复制到<include>标签的位置。<include>标签可以方便的查找代码和减少重复的代码。语法:<include src="path" />。
  • scroll-view组件:scroll-view组件用于实现可滚动视图区域。一般来说,当页面的高度超过了显示区域的高度时,先设置外层容器的高度,使之低于内部的高度,然后在外层容器的样式中设置overflow-y:scroll,就可以实现上下滚动了。但是这种方式只是从样式上实现了滚动,如果需要在滚动到顶部或底部时触发事件,就需要手动编写代码来实现了。
scroll-view组件常用属性
属性类型说明
scroll-xBoolean允许横向滚动,默认为false
scroll-yBoolean允许纵向滚动,默认为false
scroll-topNumber/String设置竖向滚动条的位置
scroll-leftNumber/String设置横向滚动条的位置
bindscrolltoupperEventHandle添加到顶部/左边时触发的事件
bindscrolltolowerEventHandle添加到底部/右边时触发的事件
scroll-with-animationBoolean在设置滚动条位置时是否使用动画过渡
scroll-into-viewString设置哪个方向可滚动,则在哪个方向滚动到该元素。值应为某子元素id(id不能以数字开头)
bindscrollEventHandle滚动时触发的事件
滚动事件对象属性
属性说明
scrollLeft横向滚动条左侧到视图左边的距离
scrollTop纵向滚动条上端到视图顶部的距离
scrollHeight纵向滚动条在Y轴上最大滚动距离
scrollWidth横向滚动条在X轴上最大滚动距离
deltaX横向滚动条的滚动状态
deltaY纵向滚动条的滚动状态
  • image组件:微信小程序提供了image组件来定义图片,类似于HTML中的<img>标签,image组件除了用来显示图片,还支持对图片进行裁剪或缩放,提供了4种缩放模式和9种裁剪模式。image组建的默认宽高为300pxX225px,且image组件中的二维码不支持长按识别,如果需要实现长按识别可以使用wx.previewImage()这个API来实现。
image属性
属性类型说明
srcString图片资源地址
modeString图片裁剪、缩放的模式,默认为scaleToFill
lazy-loadBoolean图片是否懒加载,默认为false。只针对page与scroll-view下的image有效
binderrorHandleEvent图片发生错误时的事件
bindloadHandleEvent图片载入完成时的事件
4种缩放模式
缩放模式说明
scaleToFill不保持纵横比缩放图片,使图片的宽高完全拉伸至填满image元素。适用于容器与图片宽高比相同的情况,如果不同,图片会变形
aspectFit保持纵横比缩放图片,使图片的长边能完全显示出来。适用于将图片完整显示出来。例如,详情页的图片
aspectFill保持纵横比缩放图片,只保证图片的短边能完全显示出来,长边将会发生截取。适用于容器固定,图片自动缩放的情况,如列表页的缩略图
widthFix宽度不变,高度自动变化,保持原图宽高比不变
9种裁剪模式
裁剪模式说明
top不缩放图片,只显示图片的顶部区域
bottom不缩放图片,只显示图片的底部区域
center不缩放图片,只显示图片的中间区域
left不缩放图片,只显示图片的左边区域
right不缩放图片,只显示图片的右边区域
top left不缩放图片,只显示图片的左上方区域
top right不缩放图片,只显示图片的右上方区域
bottom left不缩放图片,只显示图片的左下方区域
bottom right

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

  • 音频API:微信小程序提供了播放音频的API,在使用音频API时,需要创建一个InnerAudioContext实例。如:var audioCtx=wx.createInnerAudioContext()。audioCtx就是一个InnerAudioContext实例,也就是一个对象,利用这个对象的属性和方法可以完成具体的工作。
InnerAudioContext实例常用属性和方法
类型名称说明
属性src音频资源的地址,用于直接播放
startTime开始播放的位置(s),默认为0
autoplay是否自动开始播放,默认为false
loop是否循环播放,默认为false
volume音量。范围0~1。默认为1
duration音频的长度(s),在当前有合法的src时返回(只读)
currentTime音频的播放位置(s)。在当前有合法的src时返回(只读)
paused当前是否暂定或停止状态(只读)
方法play()播放
pause()暂停(暂停后的音频再播放会从暂停处开始播放)
stop()停止(停止后的音频再播放会从头开始播放)
seek()跳转到指定位置
destroy()销毁当前实例
onCanplay()音频进入可以播放状态的事件(参数为回调函数)
onPlay()音频播放事件(参数为回调函数)
onPause()音频暂停事件(参数为回调函数)
onStop()音频停止事件(参数为回调函数)
onEnded()音频自然播放至结束的事件(参数为回调函数)
onSeeked()音频进行跳转操作的事件(参数为回调函数)
onTimeUpdate()音频播放进度更新事件(参数为回调函数)
onError()音频播放错误事件(参数为回调函数)
  • slider组件:单标签,slide组件是小程序组件中的一种,用于滑动选择某一个值。如可以实现播放器的进度条。
slide组件常用属性
属性类型说明
minNumber最小值,默认为0
maxNumber最大值,默认为100
stepNumber步长,取值大于0,可按(max-min)整除,默认为1
valueNumber当前取值,默认为0
activeColorColor已选择的颜色,默认为#1aad19
backgroundColorColor背景条的颜色,默认为#e9e9e9
block-sizeNumber滑块的大小,取值范围为12~28,默认为28
block-colorColor滑块的颜色,默认为#ffffff
show-valueBoolean是否显示当前value,默认为false
bindchangeEventHandle完成一次拖动后触发的事件
bindchangingEventHandle拖动过程中触发的事件
  • app.json的tabBar对象
tabBar底部标签栏属性
属性说明
color未选择时,底部导航文字的颜色
selectorColor选中时,底部导航文字的颜色
borderStyle底部导航边框的颜色(如果没有写入样式会出现浅灰色线条)
backgroundColor底部导航背景色
list导航配置数组
list数组中标签按钮属性
属性说明
pagePath页面访问地址
iconPath未选择时,图片路径
selectedIconPath选中时,图片路径
text导航图标下方文字
  • wx.makePhoneCall()接口实现呼叫功能。如wx.makePhoneCall({phoneNumber:'号码'})。
  • video组件:video组件常用于视频的播放,其默认宽度为300px,高度为225px,可通过WXSS设置宽度和高度。
video组件的常用属性
属性类型说明
srcString视频的资源地址
loopBoolean是否循环播放,默认为false
controlsBoolean是否显示默认播放控件(播放/暂停按钮、播放进度、时间),默认为true
danmu-listObject弹幕列表
danmu-btnBoolean是否显示弹幕显示/隐藏按钮,旨在初始化时有效,不能动态变更,默认为false
enable-danmuBoolean是否展示弹幕,旨在初始化时有效,不能动态变更,默认为false
autoplayBoolean是否自动播放,默认为false
posterString视频封面的图片网络资源地址,如果controls属性值为false则设置poster无效
bindplayEventHandle当开始/继续播放时触发play事件
bindpauseEventHandle当暂停播放时触发pause事件

wx.createVideoContext()接口可以创建VideoContext对象,用于对video组件进行控制,其参数是video组件的id属性,如:wx.createVideoContext(‘#id’)。该对象的常用方法如下,更多属性和方法查看官方文档。

VideoContext对象常用方法
名称说明
play()播放视频
pause()暂停视频
stop()停止视频
seek(number)跳转到指定的位置
playbackRate(number)设置倍速播放
requestFullScreen()进入全屏
exitFullScreen()退出全屏

还可以使用wx.chooseVideo()接口来获取视频,具体细节请查看官方文档。

  • 腾讯视频插件:关于插件的内容这里不做介绍。
  • map组件:map组件常用来开发与地图相关的应用,如导航系统、打车软件、订单物流等。通过指定经纬度,即可显示该区域的地图,还可以添加标记点、路线、圆、控件等。由于map组件需要给定经纬度,可以通过腾讯位置服务网站提供的坐标拾取器(https://lbs.qq.com/getPoint)来获取。
map组件的常用属性
属性类型说明
longitudeNumber经度
latitudeNumber纬度
scaleNumber缩放级别,取值范围是5~18,默认为16
markersArray标记点
polylineArray路线
circlesArray
show-locationBoolean显示带有方向的当前定位点
bindmarkertapEventHandle单击标记点时触发,会返回marker的id
bindregionchangeEventHandle视野发生变化时触发
bindtapEventHandle单击地图时触发
bindupdatedEventHandle在地图渲染更新完成时触发

上表中的markers、polyline、circles的值都是由对象组成的数组。下面的表格分别进行介绍。

markers标记点属性
属性类型必填说明
idNumber标记点id,marker单击事件回调会返回此id
longitudeNumber经度,浮点数,范围-180~180
latitudeNumber纬度,浮点数,范围-90~90
titleString标注点名
zlndexNumber显示层级
iconPathString显示的图标,使用项目目录下的图片路径
rotateNumber顺时针旋转的角度,范围0~360,默认为0
alphaNumber透明度,范围0~1,默认为1(不透明)
widthNumber图片宽度,默认为图片实际宽度
heightNumber图片高度,默认为图片实际高度
polyline坐标点属性
属性类型必填说明
pointsArray经纬度数组,如[{latitude:0,longtitude:0}]
colorString线的颜色,8位十六进制表示,后两位表示alpha值,如#000000AA
widthNumber线的宽度
dottedLineBoolean是否虚线,默认为false
circles圆属性
属性类型必填说明
latitudeNumber纬度,浮点数,范围-90~90
longitudeNumber经度,浮点数,范围-180~180
colorString描边的颜色,8位十六进制表示,后两位表示alpha值,如#000000AA
fillColorString填充颜色,8位十六进制表示,后两位表示alpha值,如#000000AA
radiusNumber半径
strokeWidthNumber描边的宽度
  • 微信内置地图和定位:小程序提供了打开微信内置地图的API和定位用户位置的API,需要用户授权才能使用,也就是会自动提示用户“是否同意获取您的位置”,同意后即可获取。通过wx.getLovation()方法获取用户当前的位置,获取后再通过wx.openLocation()方法显示该位置的地图。如:

buttonTap:function(){

        wx.getLocation({

                type:'gcj02',

                success:function(res){

                        wx.openLocation({

                                latitude:res.latitude,

                                longitude:res.longitude

                        })

                }

        })

}

 上述代码中,第3行的type属性用于设置返回的坐标信息,默认值位wgs84,表示返回GPS坐标,设为gcj02表示返回用于wx.openLocation()方法的坐标。在将用户的位置获取成功后,就会执行第4行的回调函数,通过第5行代码打开微信内置地图。

picker组件:picker组件是从底部谈起的滚动选择器,目前支持5中选择器,通过mode属性来区分,分别是普通选择器(mode="selector")、多列选择器(mode=“multiSelector”)、时间选择器(mode="time")、日期选择器(mode=“date”)和省市区选择器(mode="region"),默认是普通选择器。虽然选择器数量比较多,但使用方法都很简单,具体可通过官方文档(https://developers.weixin.qq.com/miniprogram/dev/component/picker.html#%E7%A4%BA%E4%BE%8B%E4%BB%A3%E7%A0%81)提供的属性来学习。

  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值