微信小程序总复习1~6章

认识微信小程序

微信是腾讯公司于2011年1月21日推出的一款智能终端提供的即时通信服务的应用程序。

特征

小程序嵌入微信之中,不需要下载安装外部应用,用户通过扫描二维码和搜索相关功能的关键词即可使用,具备无须安装、触手可及、用完即走、无须卸载的特性。小程序可以被理解为“镶嵌在微信的超级App”
1.无须安装
小程序内嵌于微信程序之中,用户在使用过程中无须在应用商店下载安装外部应用。
2.触手可及
用户通过扫描二维码等形式直接进入小程序,实现线下场景与线上应用的即时联通。
3.用完即走
用户在线下场景中,当有相关需求时,可以直接接入小程序,使用服务功能后便可以对其不理会。实现用完即走。
4.无须卸载
用户在访问小程序后可以直接关闭小程序,无须卸载。

微信小程序开发流程

开发流程为:第一步,在微信公众平台注册小程序账号;
第二步,下载开发者工具进行创建项目并编译;
第三步,通过开发工具提交代码,待通过审核后可以发布。
微信小程序开发者工具界面功能介绍
微信小程序开发者工具界面划分为五大区域:工具栏,模拟区,目录文件区,编辑区和调试区。
图片如下:面板

面板分为九个面板:
1、Console面板:用于调试小程序的控制面板,显示错误信息在Console面板中,便于查找错误。
2、Source面板:源文件调试信息页,显示当前项目的脚本文件。
3、Network面板:网络调试信息页,观察和显示网络请求相关详细信息
4、Security面板:安全认证信息页
5、Storage面板:数据存储信息页
6、AppData面板:实时数据信息页,显示项目页面数据情况。
7、Wxml面板:布局信息页,主要调试Wxml组件和CSS样式
8、Sensor面板:重力传感信息页
9、Trace面板:路由追踪信息页
总结

上述首先介绍了微信小程序,讲解了微信小程序的特征及微信小程序应用场景的特点,然后重点讲解了微信小程序项目的开发流程,最后介绍了微信小程序开发者的使用。通过本章的学习,读者能够从概念上对小程序有一个基本认识,为后续学学习打下良好的基础。

我的第一个微信小程序项目

代码

运行效果

微信小程序开发者工具界面功能介绍:

1.工具栏:

在工具栏中可以实现多种功能,例如账号的切换,模拟区、编辑区、调试区的显示/隐藏,小程序的编译、预览,切换后台,清理缓存等
2.模拟区:

在模拟区中选择模拟手机的类型、显示比例、网络类型后,模拟器中会显示小程序的运行效果
3.目录文件区:

目录文件区用来显示当前项目的目录结构,单击左上角的“+”按钮可以进行目录和文件的创建,右键单击目录文件区中的文件或目录可以进行“硬盘打开”“重命名”“删除”等相关操作
4.编辑区:

编辑区用来实现对代码的编辑操作,编辑区中支持对.wxm、.wxss、.js及.json 文件的操作,使用组合键能提高代码的编辑效率。常用的组合键如表1-1所示。

5.调试区:

调试区的功能是帮助开发者进行代码调试及排查有问题的区域。小程序系统为开发者提供了9个调试功能模块,分别是Console、Sourees、Network、Security、Storage、AppDataWxml、Sensor和Trace。最右边的扩展菜单项“:”是定制与控制开发工具按钮

Console面板:

Comsole面板是调试小程序的控制而板,当代码执行出现错误时,错误信息将显示Consoke面板中,便于开发者排查错误,如图1-25所示。另外,在小程中,开发者可通过console.loe语句将信息输出到Console面板中。此外,开发者可以在 Console 面板直接轮人代码并调试
2.Sources面板:

Sourees面板是源文件调试信息页,用于显示当前项目的脚本文件,如图1-26所示调试区左侧显示的是源文件的目录结构,中间显示的是选中文件的源代码,右侧显示的是调试相关按钮,Sources面板中显示的代码是经过小程序框架编译过的脚本文件,开发者的代码会被包含在defne 函数中。对于Page 代码,在文件尾部通过require 函数主动调用
3.Network面板:

Network面板是网络调试信息页,用于观察和显示网络请求request和socket 等网络相关的详细信息
4.Security面板:

Security面板是安全认证信息页,开发者可以通过该面板调试当前网页的安全和认证等问题。如果设置安全论证,则会显示“The security of this page is unknown.”
5.Storage面板:

Storage 面板是数据存储信息页,开发者可以使用wx.setStorage或者wx.setStorageSyne 将数据存储到本地存储,存储在本地存储中的变量及值可以在Sorage 面板中显示
6.AppData面板:

AppDala面板是实时数据信息页,用于显示项目中被激活的所有页面的数据情况。开发者在这里不仅可以查看数据的使用情况,还可以更改数据。编辑器会实时地将数据的变更情况反映到前端界面
7.Wxml面板:

Wxml面板是布局信息页,主要用于调试Wxm】组件和相关CSS样式,显示Wxm转化后的界面。Wxml面板调试区的左侧部分是Wxm代码,右侧部分是该选择器的CSS样式
8.Sensor面板:

Sensor 面板是重力传感器信息页,开发者可以在这里选择模拟地理位置来模拟移动设备表现,用于调试重力感应 API
9.Trace面板:

Trace面板是路由追踪信息页,开发者在这里可以追踪连接到电脑中的安卓(Android)设备的路由信息
10.扩展菜单项:

最右边的扩展菜单项“:”主要包括开发工具的一些定制与设置,开发者可以在这里设置相关信息

第二章

         

一、基本目录结构:

在微信下程序的基本目录结构中,项目主目录下有2个子目录(pages和utils)和4个文件(app.js、app.json、app.wxss和project.config.json)
在主目录中3个以“app”开头的文件是微信下程序框架的主描述文件,是应用程序级别的文件
project.config.json文件是项目配置文件,包含项目名称、AppID等相关信息

Vpages目录中有2个子目录,分别是index和logs,每个子目录中保存着一个页面的相关文件。通常,一个页面包含4个不同的扩展名(.wxml、.wxss、.js、.json)的文件,分别用于表示页面结构文件、页面样式文件、页面逻辑文件、页面配置文件。按照规定,同一个页面的4个文件必须用来存放具有相同的路径与文件名

主题文件:

app.js:小程序逻辑文件

app.json:小程序公共设置文件

app.wxss:小程序主样式表文件

页面文件:

.js:页面逻辑文件

.wxml:页面结构文件

.wxss:页面样式文件

.json:页面配置文件

2小程序开发框架

小程序MINA框架将整个系统划分为视图层、逻辑层和(数据层)
视图层:MINA框架的视图层由WXML与WXSS编写,由组件来进行展示

视图层就是所有.wxml文件与.wxss文件的集合:.wxml文件用于描述页面的结构wxss 文件用于描述页面的样式

逻辑层:逻辑层用于处理事务逻辑(采用JavaScript编写)

1.增加app()和Page()方法,进行程序和页面的注册

2.提供丰富的 API,如扫一扫、支付等微信特有的能力

3.每个页面有独立的作用域,并提供模块化能力

数据层:数据层在逻辑上包括页面临时数据或缓存、文件存储(本地存储)和网络存储与调用

1.页面临时数据或缓存

在Page()中,使用setData函数将数据从逻辑层发送到视图层,同时改变对应的this. data 的值。setData()函数的参数接收一个对象,以(key,value)的形式表示将 key 在 this.data 中对应的值改变成 value
2.文件存储(本地存储)

使用数据 API接口,如下:
wx.getStorage    获取本地数据缓存
wx. setStorage   设置本地数据缓存
wx.clearStorage 清理本地数据缓存
3.网络存储与调用

上传或下载文件 API接口,如下:
wx.request           发起网络请求
wx.uploadFile      上传文件。
wx.downloadFile 下载文件
调用 URL的 API接口,如下:
wx.navigateTo 新窗口打开页面
wx.redirectTo  原窗口打开页面
三、创建小程序页面:

2.4配置文件

        小程序的配置文件按其作用范围可以分为全局配置文件(app.json)和页面配置文件(*.json)。全局配置文件作用于整个小程序,页面配置文件只作用于当前页面。由于页面配置文件的优先级高于全局配置文件的优先级,因此,当全局配置文件与页面配置文件有相同配置项时,页面配置文件会覆盖全局配置文件中的相同配置项内容
2.4.1全局配置文件

        小程序的全局配置保存在全局配置文件(apPjson)中,使用全局配置文件来配置页面文件(pages)的路径、设置窗口(window)表现、设定网络请求API的超时时间值(networkTimeout)以及配置多个切换页(tabBar)等

1.配置项

        pages配置项接受一个数组,用来指定小程序由哪些页面组成,数组的每一项都是字符串,代表对应页面的“路径”+“文件名”。pages 配置项是必填项
设置 pages 配置项时,应注意以下3点:
        (1)数组的第一项用于设定小程序的初始页面
        (2)在小程序中新增或减少页面时,都需要对数组进行修改
        (3)文件名不需要写文件扩展名。小程序框架会自动寻找路径及对.js、.json、wxml 和wxss 文件进行整合数据绑定
2.window配置项

        window 配置项负责设置小程序状态栏、导航条、标题、窗口背景色等系统样式

1.配置项

        pages配置项接受一个数组,用来指定小程序由哪些页面组成,数组的每一项都是字符串,代表对应页面的“路径”+“文件名”。pages 配置项是必填项
设置 pages 配置项时,应注意以下3点:
        (1)数组的第一项用于设定小程序的初始页面
        (2)在小程序中新增或减少页面时,都需要对数组进行修改
        (3)文件名不需要写文件扩展名。小程序框架会自动寻找路径及对.js、.json、wxml 和wxss 文件进行整合数据绑定
2.window配置项

        window 配置项负责设置小程序状态栏、导航条、标题、窗口背景色等系统样式

5.debug配置项

        debug 配置项用于开启开发者工具的调试模式,默认为false。开启后,页面的注册、路由、数据更新、事件触发等调试信息将以info的形式输出到Console(控制台)面板上
2.4.2页面配置文件

        页面配置文件(*.json)只能设置本页面的窗口表现,而且只能设置window 配置项的内容。在配置页面配置文件后,页面中的window 配置值将覆盖全局配置文件(app.json)中的配置值

2.5逻辑层文件

        小程序的逻辑层文件分为项目逻辑文件和页面逻辑文件
2.5.1项目逻辑文件

        项目逻辑文件app.js中可以通过App()函数注册小程序生命周期函数、全局属性和全局方法,已注册的小程序实例可以在其他页面逻辑文件中通过getApp()获取。
        App()函数用于注册一个小程序,参数为 0bject,用于指定小程序的生命周期函数、用户自定义属性和方法,其参数如表所示

当启动小程序时,首先会依次触发生命周期函数onLanuch和onShow方法,然后通过epp.json的 pages属性注册相应的页面,最后根据默认路径加载首页;当用户单击左上角的“关闭”按钮或单击设备的Home键离开微信时,小程序没有被直接销毁,而是进入后台这两种情况都会触发onHide方法;当用户再次进入微信或再次打开小程序时,小程序会从后台进人前台,这时会触发onShow方法。只有当小程序进人后台一段时间(或者系统资源占用过高)时,小程序才会被销毁

2.5.2页面逻辑文件

        页面逻辑文件的主要功能有:设置初始数据;定义当前页面的生命周期函数;定义事件处理函数等。每个页面文件都有一个相应的逻辑文件
        在逻辑层,Page()方法用来注册一个页面,并且每个页面有且仅有一个,其参数如表所示

2.5.2页面逻辑文件

        页面逻辑文件的主要功能有:设置初始数据;定义当前页面的生命周期函数;定义事件处理函数等。每个页面文件都有一个相应的逻辑文件
        在逻辑层,Page()方法用来注册一个页面,并且每个页面有且仅有一个,其参数如表所示

<view>姓名:{{name}}</view>
<view>年龄:{{age}}</view>
<view>出生日期:
{{birthday[0].year}}年
{{birthday[1].month}}月
{{birthday[2].date}}日
</view>
<view>爱好:{{object.hobby}}</view>


运行结果:

第三章

3.1盒子模型

        微信小程序的视图层由WXML和WXSS 组成。其中,WXSS(WeiXin Style Sheets)是基于CSS拓展的样式语言,用于描述WXML的组成样式,决定WXML的组件如何显示。WXSS 具有外边距(maCSS的大部分特性
        一个独立的盒子模型由内容(content)、内边距(padding)、边框(border)和外边距(margin)4个部分组成

此外,对 padding、border 和 margin 可以进一步细化为上、下、左、右4个部分,在 CSS所示。中可以分别进行设置

图中各元素的含义如下:

        width和height :内容的宽度和高度
        padding -top、padding -right、padding -botom和 padding-left:上内边距、右内边
距、底内边距和左内边距。
        border -top、border -right、border -bottom 和 border -left:上边框、右边框、底边框
和左边框
        margin -top、margin -right、margin-bottom 和margin_left:上外边距、外边距底外边距和左外边距
        因此,一个盒子实际所占有的宽度(高度)应该由“内容”+“内边距”+“边框+“外边距”组成

3.2块级元素与行内元素

元素按显示方式分为块级元素、行内元素和行内块元素,它们的显示方式由display 属性控制
        3.2.1块级元素

        块级元素默认占一行高度,一行内通常只有一个块级元素(浮动后除外),添加新的块级元素时,会自动换行,块级元素一般作为盒子出现。块级元素的特点如下:
(1)一个块级元素占一行。
(2)块级元素的默认高度由内容决定,除非自定义高度。
(3)块级元素的默认宽度是父级元素的内容区宽度,除非自定义宽度。
(4)块级元素的宽度、高度、外边距及内边距都可以自定义设置。
(5)块级元素可以容纳块级元素和行内元素。
        <view/>组件默认为块级元素,使用<view/>组件演示盒子模型及块级元素的示例代码如下

<view style="border: 1px solid #f00">块级元素1</view>
<view style="border: 1px solid #0f0;margin:15px;padding:20px">块级元素2</view>
<view style="border: 1px solid #00f;width:200px;height:80px">块级元素3</view>
<view style="border: 1px solid #ccc">
  <view style="height:60px">块级元素4</view>
</view>
<view style="border: 1px solid #f00;width: 100px;background-color: #ccc;">
  父级元素高度随内容决定,内容为文本
</view>

<view style="border: 1px solid #f00">块级元素1</view>
<view style="border: 1px solid #0f0;margin:15px;padding:20px">块级元素2</view>
<view style="border: 1px solid #00f;width:200px;height:80px">块级元素3</view>
<view style="border: 1px solid #ccc">
  <view style="height:60px">块级元素4</view>
</view>
<view style="border: 1px solid #f00;width: 100px;background-color: #ccc;">
  父级元素高度随内容决定,内容为文本
</view>
<view style="border: 1px solid #f00">块级元素1</view>
<view style="border: 1px solid #0f0;margin:15px;padding:20px">块级元素2</view>
<view style="border: 1px solid #00f;width:200px;height:80px">块级元素3</view>
<view style="border: 1px solid #ccc">
  <view style="height:60px">块级元素4</view>
</view>
<view style="border: 1px solid #f00;width: 100px;background-color: #ccc;">
  父级元素高度随内容决定,内容为文本
</view>
<view style="border: 1px solid #f00">块级元素1</view>
<view style="border: 1px solid #0f0;margin:15px;padding:20px">块级元素2</view>
<view style="border: 1px solid #00f;width:200px;height:80px">块级元素3</view>
<view style="border: 1px solid #ccc">
  <view style="height:60px">块级元素4</view>
</view>
<view style="border: 1px solid #f00;width: 100px;background-color: #ccc;">
  父级元素高度随内容决定,内容为文本
</view>

3.2.3行内块元素

        当元素的 display 属性被设置为inline-block 时,元素被设置为行内块元素。行内块元素可以被设置高度、宽度、内边距和外边距。示例代码如下

<view>
  元素显示方式的<view style="display: inline-block;border: 1px solid #f00;margin: 10px;padding: 10px;width: 200px;">
  块级元素、行内元素和行内块元素
  </view>三种类型
</view>

3.3浮动与定位

3.3.1元素浮动与清除

        元素浮动就是指设置了浮动属性的元素会脱离标准文档流的控制,移到其父元素中指定位置的过程。在CSS中,通过foat属性来定义浮动,其基本格式如下:        {float:none|left|right;}

其中
        none——默认值,表示元素不浮动;
        left——元素向左浮动;
        right——元素向右浮动。
在下面的示例代码中,分别对box1、box2、box3元素左浮动:

<!--元素浮动与清除-->
<view>box1,box2,box3 没浮动</view>
<view style="border: 1px solid #f00;padding: 5px;">
  <view style="border: 1px solid #0f0;">box1</view>
  <view style="border: 1px solid #0f0;">box2</view>
  <view style="border: 1px solid #0f0;">box3</view>
</view>
<view>box1 左浮动</view>
<view style="border: 1px solid #f00;padding: 5px;">
  <view style="float: left;border: 1px solid #0f0;">box1</view>
  <view style="border: 1px solid #0f0;">box2</view>
  <view style="border: 1px solid #0f0;">box3</view>
</view>
<view>box2 左浮动</view>
<view style="border: 1px solid #f00;padding: 5px;">
  <view style="float: left;border: 1px solid #0f0;">box1</view>
  <view style="float: left;border: 1px solid #0f0;">box2</view>
  <view style="border: 1px solid #0f0;">box3</view>
</view>
<view>box3 左浮动</view>
<view style="border: 1px solid #f00;padding: 5px;">
  <view style="float: left;border: 1px solid #0f0;">box1</view>
  <view style="float: left;border: 1px solid #0f0;">box2</view>
  <view style="float: left;border: 1px solid #0f0;">box3</view>
</view>

浮动与定位

元素浮动与清除

元素浮动就是指设置了浮动属性的元素会脱离标准文档流的控制, 移到其父元素中指定位置的过程。 在CSS 中, 通过float 属性来定义浮动, 其基本格式如下:

{float:none |left |right;}

其中 , none ——— 默认值 , 表示元素 不浮动 ;
left ——— 元素 向左浮动 ;
right ——— 元素 向右浮动 。
由于浮动元素不再占用原文档流的位置, 因此它会对页面中其他元素的排列产生影响  代码如下:

<view>box1,box2,box3没浮动</view>
<view style="border: 1px solid #f00;padding: 5px;">
<view style="border: 1px solid #0f0;">box1</view>
<view style="border: 1px solid #0f0;">box2</view>
<view style="border: 1px solid #0f0;">box3</view>
</view>
<view>box1左浮动</view>
<view style="border: 1px solid #f00;padding: 5px;">
  <view style="float:left;border:  1px solid #0f0;">box1</view>
  <view style="border: 1px solid #0f0;">box2</view>
  <view style="border: 1px solid #0f0;">box3</view>
</view>
<view>box1,box2左浮动</view>
<view style="border: 1px solid #f00;padding: 5px;">
  <view style="float:left;border:  1px solid #0f0;">box1</view>
  <view style="float:left;border: 1px solid #0f0;">box2</view>
  <view style="border: 1px solid #0f0;">box3</view>
</view>
<view>box1,box2,box3左浮动</view>
<view style="border: 1px solid #f00;padding: 5px;">
  <view style="float:left;border:  1px solid #0f0;">box1</view>
  <view style="float:left;border: 1px solid #0f0;">box2</view>
  <view style="float:left;border: 1px solid #0f0;">box3</view>
</view>
运行效果:由于浮动元素不在占用原文档流的位置,因此他会对页面中其他元素的排列产生影响。在CSS中,clear属性用于清除浮动元素对其他元素的影响,其基本格式如下:{clear:left |both|none}
代码如下:<view>box1,box2左浮动box3清除左浮动</view>
<view style="border: 1px solid #f00;padding: 5px;">
  <view style="float:left;border:  1px solid #0f0;">box1</view>
  <view style="float:left;border: 1px solid #0f0;">box2</view>
  <view style="clear:left;border: 1px solid #0f0;">box3</view>
</view>

元素定位

          浮动布局虽然灵活,但无法对元素的位置进行精确的控制。在CSS中,通过position属性可以实现对页面元素的精确定位。
其基本格式如下:
{position:static|relative|absolute|fixed}
static——默认值,该元素按照标准流进行定位。
relative——相对定位,相对于它在原文档流的位置进行定位,它后面的盒子仍以标准流方式对待它。
absolue——绝对定位,相对于其上一个已经定位的父元素进行定位,绝对定位的盒子从标准流中脱离,
fixed——固定定位,相对于浏览窗口

flex布局

           flex 布局是万维网联盟(World Wide Web Consortium, W3C) 在2009 年提出的一种新布局方案, 该布局可以简单快速地完成各种可以伸缩的设计, 以便很好地支持响应式布局。flex 是flexible box 的缩写, 意为弹性盒子模型, 可以简便、完整、响应式地实现各种页面布局。
      flex 布局主要由容器和项目组成, 采用flex 布局的元素称为flex 容器(flex container),flex 布局的所有直接子元素自动成为容器的成员, 称为flex 项目(flex item)。
       容器默认存在两根轴: 水平的主轴(main axis) 和垂直的交叉轴(cross axis)。 主轴的开始位置(与边框的交叉点) 叫做main start, 结束位置叫做main end; 交叉轴的开始位置叫做cross start, 结束位置叫做cross end。
       项目默认沿主轴排列。 单个项目占据的主轴空间叫做main size, 占据的交叉轴空间叫做cross size。 flex 布局模型如图 所示。

设置display 属性可以将一个元素指定为flex 布局, 设置flex - direction 属性可以指定主轴方向。 主轴既可以是水平方向, 也可以是垂直方向。

align-items

align-items用于指定项目在交叉轴上的对齐方式,其语法格式如下:
.box{align-items:flex-start|flex-end|center|baseline|stretch;}
align - items———与交叉轴方向有关, 默认交叉由上到下;
flex - start———交叉轴起点对齐;
flex - end———交叉轴终点对齐;
center———交叉轴中线对齐;
baseline———项目根据它们第一行文字的基线对齐;
stretch———如果项目未设置高度或设置为auto, 项目将在交叉轴方向拉伸填充容器, 此为默认值。

 代码如下

//wxml
<view class="cont1">
<view class="item">1</view>
<view class="item item2">2</view>
<view class="item item3">3</view>
<view class="item item4">4</view>
</view>
 
 
//wxss
.cont1{
  display: flex;
  flex-direction: row;
  align-items: baseline;
}
.item{
  background-color: #ccc;
  border: 1px solid #f00;
  height: 100px;
  width: 50px;
  margin: 2px;
}
.item2{
  height: 80px;
}
.item3{
  display: flex;
  height: 50px;
  align-items: flex-end;
}
.item4{
  height: 120px;
}

align-content

align-content用来定义项目有多根轴线(出现换行后)在交叉轴上的对齐方式,如果只有一根轴线,该属性不起作用。语法格式如下:.box{align-content:flexx-start|flex-end|center|space-between|space-around|stretch}

space-between———与交叉轴两端对齐, 轴线之间的间隔平均分布;
space-around———每根轴线两侧的间隔都相等, 轴线之间的间隔比轴线与边框间隔大一倍。
其余各属性值的含义与align - items 属性的含义相同。如图所示:如果将box1 box2 box3 的父元素采用相对定位,将box2采用绝对定位(子绝父相)运行结果如下:

第四章

 4.1页面组件


4.1组件的定义及属性

        组件是页面视图层(WXML)的基本组成单元,组件组合可以构建功能强大的页面结构。小程序框架为开发者提供了容器视图、基础内容、表单、导航、多媒体、地图、画布开放能力等8类(30多个)基础组件。
        每一个组件都由一对标签组成,有开始标签和结束标签,内容放置在开始标签和结束标签之间,内容也可以是组件。组件的语法格式如下:<标签名 属性名=”属性值”>内容…</标签名>

        组件通过属性来进一步细化。不同的组件可以有不同的属性,但它们也有一些共用属性,如id、class、style、hidden、data-*、bind */catch *等  
        1.id 组件的唯一表示,保持整个页面唯一,不常用
        2. class 组件的样式类,对应 WXSS 中定义的样式
        3.  style 组件的内联样式,可以动态设置内联样式
        4. hidden 组件是否显示,所有组件默认显示
        5. data-*自定义属性,组件触发事件时,会发送给事件处理函数。事件处理函数可
以通过传人参数对象的 currentTarget,dataset 方式来获取自定义属性的值
        6. bind*/catch* 组件的事件,绑定逻辑层相关事件处理函数
4.2 容器视图组件

        容器视图组件是能容纳其他组件的组件,是构建小程序页面布局的基础组件,主要包括view、scroll-view和swiper 组件。
4.2.1 View

        view组件是块级组件,没有特殊功能,主要用于布局展示,相当于HTML中的div,是布局中最基本的用户界面(User Interface,UI)组件,通过设置view的CSS属性可以实现各种复杂的布局。view组件的特有属性如表所示:代码和运行效果

4.2.2 Scroll-View

通过设置seroll-view组件的相关属性可以实现滚动视图的功能,其属性如表所示【注意】
        (1)在使用竖向滚动时,如果需要给scroll-view组件设置一个固定高度,可以通过WXSS设置height来完成。
        (2)请勿在scroll-view组件中使用 textarea、map、canvas、video 组件。
        (3)scroll-into-view属性的优先级高于scroll -top。
        (4)由于在使用scroll-view组件时会阻止页面回弹,所以在scroll-view 组件滚动时无法触发onPullDownRefresh。
        (5)如果要实现页面下拉刷新,请使用页面的滚动,而不是设置scroll-view 组件。这样做,能通过单击顶部状态栏回到页面顶部。
通过serol-view 组件可以实现下拉刷新和上拉加载更多

4.2.3 Swiper

        swiper组件可以实现轮播图、图片预览、滑动页面等效果。一个完整的swiper 组件由<swiper/>和<swiper-item/>两个标签组成,它们不能单独使用。<swiper/>中只能放置-个或多个<swiper-item/>,若放置其他组件则会被删除;<swiper-item/>内部可以放置任何组件,默认宽高自动设置为100%。swiper组件的属性如表所示

4.3 基础内容组件

基础内容组件包括icon、text和progress,主要用于在视图页面中展示图标、文本和进度条等信息。
4.3.1 icon

icon组件即图标组件,通常用于表示一种状态,如success、info、warn、waiting、cancel等。其属性如表所示。
示例代码如下:<!-- 4.3.1 wxml文件 -->
<view>icon类型:
  <block wx:for="{{iconType}}">
    <icon type="{{item}}"/>{{item}}
  </block>
</view>
<view>icon大小:
  <block wx:for="{{iconSize}}">
    <icon type="success" size="{{item}}"/>{{item}}
  </block>
</view>
<view>icon颜色:
  <block wx:for="{{iconColor}}">
    <icon type="success" size="30" color="{{item}}"/>{{item}}
  </block>
</view>

//  4.3.1 wxss文件
 data:{
  iconType:["success","success_no_circle","info","warn","waiting","cancel","download","search","clear"],
  iconSize:[10,20,30,40],
  iconColor:["#f00","#0f0","#00f"]
 }

4.3.2 text

        text 组件用于展示内容,类似HTML中的<span >,text 组件中的内容支持长按选中,支持转义字符“\”,属于行内元素。text组件的属性如表所示。

//  4.3.2 wxss文件
data:{
  x:[1,2,3,4,5],
  y:[1,2,3,4,5,6,7,8,9]
}

/* 4.3.2 wxss文件 */
.aa{
  text-align: center;
}
运行结果

progress

          progress 组件用于显示进度状态, 如资源加载、用户资料完成度、媒体资源播放进度等。progress组件属于块级元素, 其属性为:

代码

<view>显示百分比</view>
<progress percent='80' show-info='80'></progress>
<view>改变宽度</view>
<progress percent='50' stroke-width='2'></progress>
<view>自动显示进度条</view>
<progress percent='80' active></progress>

运行结果

表单组件

          表单组件的主要功能是收集用户信息, 并将这些信息传递给后台服务器, 实现小程序与用户之间的沟通。 表单组件不仅可以放置在< form/ > 标签中使用, 还可以作为单独组件和其他组件混合使用。
1.button

             button 组件用来实现用户和应用之间的交互, 同时按钮的颜色起引导作用。 一般来说,在一个程序中一个按钮至少有3 种状态: 默认点击(default)、建议点击(primary)、谨慎点击(warn)

代码<button type="default">type:default</button>
<button type="primary">type:primary</button>
<button type="warn">type:warn</button>
<button type="default"bindtap='buttonSize'size="{{size}}">变size</button>
<button type="default"bindtap='buttonPlain'plain="{{plain}}">该变plain</button>
<button type="default"bindtap='buttonLoading'loading="{{load}}">该变loading显示</button>

Page({
  data:{
    size:'default',
    plain:'false',
    loading:'false'
  },
  buttonPlain:function(){
    this.setData({plain:!this.data.plain})
  },
  buttonLoading:function(){
    this.setData({loading:!this.data.loading})
  }
})
运行结果

.radio

             单选框用来从一组选项中选取一个选项。在小程序中, 单选框由< radio - group/ > (单项选择器) 和< radio/ > ( 单选项目) 两个组件组合而成, 一个包含多个< radio/ > 的< radio - group/ > 表示一组单选项, 在同一组单选项中< radio/ > 是互斥的, 当一个按钮被选中后, 之前选中的按钮就变为非选。

代码

<view>选择您喜爱的城市:</view>
<radio-group bindchange="citychange">
<radio value="西安">西安</radio>
<radio value="北京">北京</radio>
<radio value="上海">上海</radio>
<radio value="广州">广州</radio>
<radio value="深圳">深圳</radio>
</radio-group>
<view>你的选择:{{city}}</view>
<view>选择您喜爱的计算机语言:</view>
<radio-group class="radio-group"bindchange="radiochange">
<label class="radio"wx:for="{{radios}}">
<radio value="{{item.value}}"checked="{{item.checked}}"/>{{item.name}}
</label>
</radio-group>
<view>你的选择:{{lang}}</view>

Page({
data:{
  radios:[
    {name:'java','value':'JAVA'},
    {name:'python',value:'python',checked:'true'},
    {name:'php',value:'PHP'},
    {name:'swif',value:'Swif'},
  ],
  city:",lang:"
},
citychange:function(e){
  this.setData({city:e.detail.value});
},
radiochange:function(event){
  this.setData({lang:event.detail.value});
  console.log(event.detail.value)
}
})

运行结果

switch 

              switch 组件的作用类似开关选择器,属性如下:

<view>
<switch bindchange="swl">{{var1}}</switch>
</view>
<view>
<switch checked bindchange="sw2">{{var2}}</switch>
</view>
<view>
<switch type="checkbox" bindchange="sw3">{{var3}}</switch>
</view>
Page({
  data:{
    var1:'关',
    var2:'开',
    var3:'未选'
  },
  sw1:function(e){
    this.setData({var1:e.detail.value?'开':'关'})
  },
  sw2:function(e){
    this.setData({var2:e.detail.value?'开':'关'})
  }, 
  sw3:function(e){
    this.setData({var3:e.detail.value?'已选':'未选'})
  }
})

slider 组件为滑动选择器, 可以通过滑动来设置相应的值, 其属性

Page({
   data:{
     size:'20'
   },
   sliderchange:function(e){
     this.setData({size:e.detail.value})
   }
})
<view>默认min=0 max=100 step=1</view>
<slider></slider>
<view>显示当前值</view>
<slider show-value></slider>
<view>设置min=20 max=200 step=10</view>
<slider min='0' max='200' step='10' show-value></slider>
<view>背景条红色,已选定颜色绿色</view>
<slider color="#f00" selected-color='#0f0'></slider>
<view>滑动该变icon的大小</view>
<slider show-value bindchange='sliderchange'>  </slider>
<icon type="success"size='{{size}}'></icon>

.多列选择器

          多列选择器(mode = multiSelector) 允许用户从不同列中选择不同的选择项, 其选项是二维数组或数组对象。WXML

<view>多列选择器</view>
<picker rmode="multiSelector" bindchange="bindMultiPicker-Change"bindcolumnchange="bindMultiPickerColumnChange"
value="{{multiIndex}}"
range="{{multiArray}}">
<view>
当前选择:{{multiArray[0][multiIndex[0]]}},{{multiArray[1][multiIndex[1]]}},{{multiArray[2][multiIndex[2]]}}
</view>
</picker>

     JS

Page({
data:{
  multiArray:[['陕西省','广东省'],['西安市','汉中市','延安市'],['雁塔区','长安区']],
  multiIndex:[0,0,0]
},
bindMultiPickerChange:function(e){
  console.log('picker发送选择改变,携带值为',e.detail.value)
  this.setData({
    multiIndex:e.detail.value
  })
},
bindMultiPickerColumnChange:function(e){
  console.log('修改的列为',e.detail.column,',值为',e.detail.value);
  var data={
    multiArray:this.data.multiArray,
    multiIndex:this.data.multiIndex
  };
  data.multiIndex[e.detail.column]=e.detail.value;
  switch(e.detail.column){
    case 0:
    switch(data.multiIndex[0]){
     case 0:
    data.multiArray[1]=['西安市','汉中市','延安市'];
    data.multiArray[2]=['雁塔区','长安区'];
    break;
    case 1:
    data.multiArray[1]=['深圳市','珠海市'];
    data.multiArray[2]=['南山区','罗湖区'];
    break;
  }
  data.multiIndex[1]=0;
  data.multiIndex[2]=0;
  break;
  case 1:
  switch(data.multiIndex[0]){
    case 0:
    switch(data.multiIndex[1]){
      case 0:
      data.multiArray[2]=['雁塔区','长安区'];
      break;
      case 1:
      data.multiArray[2]=['汉台区','南郑区'];
      break;
      case 2:
      data.multiArray[2]=['宝塔区','子长县','延川县'];
      break;
    }
    break;
    case 1:
    switch(data.multiIndex[1]){
      case 0:
      data.multiArray[2]=['南山区','罗湖区'];
      break;
      case 1:
      data.multiArray[2]=['香洲区','斗门区'];
      break;
    }
    break;
  }
  data.multiIndex[2]=0;
  console.log(data.multiIndex);
  break;
}
this.setData(data);
},
})

运行结果.form

       form 组件为表单组件, 用来实现将组件内的用户输入信息进行提交。 当< form/ > 表单中formType为submit 的<button/ > 组件时, 会将表单组件中的value 值进行提交。其属性:

<form bindsubmit="formSubmit" bindreset="formReset">
<view>姓名:
<input type="text" name="xm"/>
</view>
<view>性别:
<radio-group name="xb">
<label>
<radio value="男" checked/>男</label>
<label>
<radio value="女"/>女</label>
</radio-group>
</view>
<view>爱好:
<checkbox-group name="hobby">
<label wx:for="{{hobbies}}">
<checkbox value="{{item.value}}"checked='{{item.checked}}'>{{item.value}}</checkbox>
</label>
</checkbox-group>
</view>
<button form-type="submit">提交</button>
<button form-type="reset">重置</button>
</form>

input 

       input组件为输入框,用户可以输入相应的信息,其属性为:

<input placeholder="这是一个可以自动聚焦的input" auto-focus/>
<input placeholder="这个是只有在按钮点击的时候才聚焦" focus="{{focus}}"/>
<button bind:tap="bindButtonTap">使得输入框获取焦点</button>
<input maxlength="10" placeholder="最大输入长度为10"/>
<view class="section_title">你输入的是:{{inputValue}}</view>
<input bindinput="bindKeyInput" placeholder="输入同步到view中"/>
<input bindinput="bindReplaceInput" placeholder="连续两个1会变成2"/>
<input password type="number" placeholder="输入数字密码"/>
<input password type="text" placeholder="输入字符密码"/>
<input type="digit" placeholder="带小数点的数字键盘"/>
<input type="idcard" placeholder="带身份证输入键盘"/>
<input placeholder-style="color:red" placeholder="占位符字体是红色的"/>

.textarea

         textarea组件为多行输入框组件,可以实现多行内容的输入,属性如图:

<textarea bindblur="bindTextAreaBlur" auto-height placeholder="自动变高"></textarea>
<textarea placeholder="placeholder颜色是红色的"placeholder-style="color:red;"></textarea>
<textarea placeholder="这个只有在按钮点击的时候才聚焦"focus="{{focus}}"></textarea>
<button bind:tap="bindButtonTap">使得输入框获取焦点</button>
<form bindsubmit="bindFormSubmit">
<textarea placeholder="form中的textarea"name="textarea"></textarea>
<button form-type="submit">提交</button>
</form>
Page({
  data:{
    height:10,
    focus:false
  },
  bindButtonTap:function(){
    this.setData({
      focus:true
    })
  },
  bindTextAreaBlur:function(e){
    console.log(e.detail.value)
  },
  bindFormSubmit:function(e){
    console.log(e.detail.value.textarea)
  }
})

缩放模式

scaleToFill 不保持纵横比缩放图片, 使图片的宽高完全拉伸至填满image 元素。
aspectFit 保持纵横比缩放图片, 使图片的长边能完全显示出来。 也就是说, 可以将图片完整地显示出来。
aspectFill  保持纵横比缩放图片, 只保证图片的短边能完全显示出来。 也就是说,图片通常只在水平或垂直方向是完整的, 在另一个方向将会发生截取。
widthFix 宽度不变, 高度自动变化, 保持原图宽高比不变\

示例代码:
.wxml代码

<block wx:for="{{modes}}">
<view>当前图片的模式是:{{item}}</view>
<image mode="{{item}}"src="image/we.jpg"style="width:50%,height:50%"/>
</block>
Page({
  data:{
    modes:['scaleToFill','aspectFit','aspectFill','widthFix']
  }
})

.裁剪模式

■ top不缩放图片, 只显示图片的顶部区域。
■ bottom 不缩放图片, 只显示图片的底部区域。
■ center不缩放图片, 只显示图片的中间区域。
■ left 不缩放图片, 只显示图片的左边区域。
■ right 不缩放图片, 只显示图片的右边区域。
■ top-left 不缩放图片, 只显示图片的左上边区域。
■ top-right 不缩放图片, 只显示图片的右上边区域。
■ bottom-right 不缩放图片, 只显示图片的左下边区域。
wxml

<block wx:for="{{modes}}">
<view>当前图片的模式是:{{item}}</view>
<image mode="{{item}}"src="image/we.jpg"style="width:100%,height:100%"></image>
</block>

js

Page({
  data:{
    modes:['top','center','bottom','left','top_left','top_right','bottom_left','bottom_right']
  }
})

运行结果

audio

                        audio组件用来实现音乐播放、暂停等,属性为:wxml

<audio src="{{src}}"action="{{action}}"poster="{{poster}}"name="{{name}}"author="{{author}}"loop controls></audio>
<button type="primary" bind:tap='play'>播放</button>
<button type="primary" bind:tap="pause">暂停</button>
<button type="primary" bind:tap="playRate">设置速率</button>
<button type="primary" bind:tap="currentTime">设置当前时间(秒)</button>

js

Page({
  data:{
    poster:'http://y.gtimg.cn/music/photo_new/T002R300x300M000003rsKF44GyaSK.jpg? max_age=2592000',
    name:'此时此刻',
    author:'许巍',
    src:'http://ws.stream.qqmusic.qq.com/M500001VfvsJ21xFqb.mp3? guid= ffffffff82def4af4b12b3cd9337d5e7&uin=346897220&vkey =6292F51E1E384E06DCBDC9AB7C49FD713D632D313AC4858BACB8DDD29067D3C601481D36E62053BF8 DFEAF74 C0A5CCFADD6471160CAF3E6A&from tag=46'
  },
  play:function(){
    this.setData({
      action:{
        method:'play'
      }
    })
  },
  pause:function(){
    this.setData({
      action:{
        method:'pause'
      }
    })
  },
  playRate:function(){
    this.setData({
      action:{
        method:'setPlaybackRate',
        data:10
      }
    })
    console.log('当前速率:'+this.data.action.data)
  },
  currentTime:function(e){
    this.setData({
      action:{
        method:'setCurrentTime',
        data:120
      }
    })
  }
})

运行结果

.video 

       video组件用来实现视频的播放、暂停等,属性如:

wxml

<video src="{{src}}"controls></video>
<view class="btn-area">
<button bind:tap="bindButtonTap">获取视频</button>
</view>

js

Page({
  data:{
    src:'',
  },
  bindButtonTap:function(){
    var that=this
    wx.chooseVideo({
      sourceType:['album','camera'],
      maxDuration:60,
      camera:['front','back'],
      success:function(res){
        that.setData({
          src:res.tempFilePath
        })
      }
    })
  }
})

运行结果

camera

           camera 组件为系统相机组件, 可以实现拍照或录像功能。 在一个页面中, 只能有一camera 组件。 在开发工具中运行时, 使用电脑摄像头实现拍照或录像; 在手机中运行时, 使用手机前后摄像头实现拍照或录像。wxml

<camera device-position="back"flash="off"binderror="error"style="width:100%;height:350px"></camera>
<button type="primary"bindtap="takePhoto">拍照</button>
<view>预览</view>
<image mode="widthFix" src="{{src}}"></image>

js

Page({
  takePhoto(){
    const ctx=wx.createCameraContext()
    ctx.takePhoto({
      quality:'high',
      success:(res)=>{
        this.setData({
          src:res.tempImagePath
        })
      }
    })
  },
  error(e){
    console.log(e.detail)
  }
})

运行结果

其他组件 

1.map

             map 组件用于在页面中显示地图或路径, 常用于LBS (基于位置服务) 或路径指引, 功能相对百度地图、高德地图较简单, 目前具备绘制图标、路线、半径等能力, 不能在croll -view、swiper、picker - view、movable - view 组件中使用。其属性 map组件的markers属性用于在地图上显示标记的位置,其相关属性如图         map组件的polyline 属性用来指定一系列坐标点, 从数组第一项连线到最后一项, 形成一条路线, 可以指定线的颜色、宽度、线型以及是否带箭头等, 其相wxmlwxml

<map id="map"
longitude="108.9200"
latitude="34.1550"
scale="14"
controls="{{controls}}"
bindcontroltap="controlstap"
markers="{{markers}}"
bindmarkertap="markertap"
polyline="{{polyline}}"
bindregionchange="regionchange"
show-location style="width: 100%;height: 300px;"
></map>

js

Page({
  data:{
    markers:[{
      iconPath:"/pages/we.jpg",
      id:0,
      longitude:"108.9290",
      latitude:"34.1480",
      width:50,
      height:50
    }],
    polyline:[{
      points:[
        {
          longitude:"108.9200",
          latitude:"34.1400",
        },
        {
          longitude:"108.9200",
          latitude:"34.1500"
        },
        {
          longitude:"108.9200",
          latitude:"34.1700"
        }
      ],
      color:"#00ff00",
      width:2,
      dottedLine:true
    }],
    controls:[{
      id:1,
      iconPath:'/pages/xi.jpg',
      position:{
        left:0,
        top:300,
        width:30,
        height:30
      },
      clickable:true
    }]
  },
  regionchange(e){
    console.log(e.type)
  },
  markertap(e){
    console.log(e.markerId)
  },
  controltap(e){
    console.log(e.controlId)
  }
})

运行结果

canvas

            canvas 组件用来绘制图形, 相当于一块无色透明的普通图布。 canvas 组件本身并没有绘图能力, 仅仅是图形容器, 通过绘图API 实现绘图功能。同一页面中的canvas - id 不能重复, 否则会出错。属性如图实现绘图需要3 步:
(1) 创建一个canvas 绘图上下文。

var context =wx.createCanvasContext('myCanvas')

(2) 使用canvas 绘图上下文进行绘图描述。
 

context .setFillStyle('green')
context .fillRect(10,10,200,100)

(3) 画图

context.draw()

wxml

<canvas canvas-id="myCanvas"style="border:1px solid red"></canvas>

js

Page({
  onLoad:function(options){
    var ctx=wx.createCanvasContext('myCanvas')
    ctx.setFillStyle('green')
    ctx.fillRect(10,10,200,100)
    ctx.draw()
  }
})

运行结果

第五章

 5.1 即速应用概述

5.1.1 即速应用的优势

        即速应用是深圳市咫尺网络科技开发有限公司开发的一款同时兼具微信小程序和支付宝小程序快速开发能力的工具,用户只需简单拖拽可视化组件,就可以实现在线小程序开发。据不完全统计,在微信小程序正式发布的1年内,在即速应用上打包代码并成功上线的微信小程序已经超过5万个。
        即速应用的功能特点主要体现在以下几个方面:
1.开发流程简单,零门槛制作

        使用即速应用来开发微信小程序的过程非常简单,无须储备相关代码知识,没有开发经验的人也可以轻松上手。(1)登录即速应用的官方网站(www.jisuapp.cn),进人制作界面,从众多行业模板中选择一个合适的模板
(2)在模板的基础上进行简单编辑和个性化制作
(3)制作完成后,将代码一键打包并下载
(4)将代码上传至微信开发者工具
(5)上传成功后,等待审核通过即可

2.行业模板多样,种类齐全

        即速应用为广大开发者提供了非常齐全的行业解决方案。目前,即速应用已经上线60多个小程序行业模板,涉及餐饮(单店版、多店版)、婚庆、旅游、运动、美容、房地产家居、医药、母婴、摄影、社区、酒店、KTV、汽车、资讯等多个行业
        这些小程序行业模板可以有效地帮助企业拓宽资源整合渠道,降低运营成本,提高管理效率
3.丰富的功能组件和强大的管理后台

        即速应用的功能组件和管理后台非常实用,可以根据实际情况解决商家的不同需求。例如,到店体系可以实现电子点餐、排队预约和线上快速结算;社区体系可以实现评论留言和话题管理;多商家系统可以实现分店统一管理、多门店统一运营;营销工具可以实现会员卡、优惠券的设置等营销方式……
        目前,即速应用有4个版本,分别为基础版、高级版、尊享版和旗舰版。基础版为免费使用的版本,适合制作个人小程序,其他版本根据功能不同可以满足不同企业的需求。即速应用的应用范围主要包括以下类型:
(1)资讯类:

新闻、媒体
(2)电商类:

网购(服装、电器、读书、母婴………)
(3)外卖类:

餐饮及零售
(4)到店类:

餐饮及酒吧
(5)预约类:

酒店、KTV、家教、家政,其他服务行业

1.菜单栏

        菜单栏中的“风格”选项用于设置小程序页面的风格颜色,“管理”选项用于进入后台管理页面,“帮助”选项用于提示帮助功能,“客服”选项用于进入客服界面,“历史’选项用来恢复前项操作,“预览”选项用在PC端预览制作效果,“保存”选项用于保存已制作的内容,“生成”选项用于实现小程序打包上线设置
2.工具栏

        工具栏包括“页面管理”“组件库”2个选项卡,“页面管理”实现添加页面和添加分组以及对某一页面进行改名、收藏、复制、删除操作。“组件库”有9个基础组件、7个布局组件、18个高级组件和2个其他组件
3.编辑区

        编辑区是用来制作小程序页面的主要区域,通过拖拽组件实现页面制作,右边的“前进”“后退”选项可以进行恢复操作,“模板”选项可以用来选择模板,“元素”选项可以用来显示页面中的组件及其层次关系,“数据”选项可以用来进行页面数据管理,“模块”选项可以用来选择模块
4.属性面板

        属性面板用来设置选定组件的属性及样式,包括“组件”和“组件样式”两个选项卡“组件”选项卡用来设置组件内容及点击事件:“组件样式”选项卡用来设置组件的样式不同组件有不同的样式需要设置
5.2 即速应用组件

        即速应用提供了大量的组件供用户快速布局页面,包括7个布局组件、9个基本组件18个高级组件和2个其他组件
5.2.1 布局组件

        布局组件用于设计页面布局,主要包括双栏、面板自由面板、顶部导航、底部导航、分割线和动态分类如图所示

1.双栏组件

        双栏组件用来布局整体,它可以把一个区块分为两部分,操作时显示一个分隔的标志,便于操作,预览时国则不会出现。双栏组件默认设置每个栏占50%总宽,也可以按实际需要调整比例。双栏里面可以添加基本的组件,从而达到整体的布局效果。双栏还可以嵌套双栏,即可以在其中的一个栏里嵌入一个双栏,从面将整体分成3部分(若需要将整体分成4部分,就再嵌套一个双栏,依次类推)。双栏组件的属性面板如图所示

 2.分割线组件

        分割线组件被放置于任意组件之间,用于实现分割分割线组件的属性面板如图所示。

3.弹窗组件

4.面板组件

        面板组件相当于一个大画板,用户可以将很多基本(甚至高级)的组件(如文本组件图片组件、按钮组件,标题组件、分类组件、音组件、双栏组件、计数组件等)放进面板组件里一起管理。面板组件的属性面板如图所示

5.自由面板组件

        自由面板组件是指放置在该面板内的组件可以自由拖动,调节组件大小。用户既可以向自由面板内拖入部分组件(包括文本组件、图片组件和按钮组件),也可以拖入任意相关容器组件,用于不规则布局。

6.滑动面板

7.动态分类组件

动态分类组件仅适用于电商、到店类小程序。用户通过选择动态分类组件的样式,可以实现顶部分类、侧边栏分类来展示应用数据、商品数据等。动态分类的二级有图模式只适用于电商类小程序。动态分类组件的属性面板如图所示

8,分类导航

9.侧边栏

10.悬浮窗

11.分类横滑

5.2.2 基本组件

基本组件是小程序页面常用的组件,包括文本、图片、按钮、标题、轮播、分类、图片列表、图文集和视频,如图所示

1.文本组件

文本组件用于展示文字、设置点击事件,是小程序页面中最常用的组件。文本组件的属性面板如图所示

2.图片组件

图片组件用于在页面中展示图片,其属性面板如图所示

3.按钮组件

按钮组件用于在页面中设置按钮,其属性面板如图所示

4.标题组件

标题组件用于在页面中设置标题,其属性面板如图所示

5.商品列表

6.视频

7.轮播组件

轮播组件用于实现图片的轮播展示,其属性面板如图所示

单击“添加轮播分组”按钮进人管理后台,然后单击“轮播管理”一“新建分组”选项可以创建轮播分组如图所示

8.公告

9.添加组合

5.3 即速应用后台管理

        即速应用后台提供了非常强大的后台管理,开发者在后台进行修改操作就可以让数据即时更新,开发者还可以通过后台来查看小程序数据管理、用户管理、商品管理、营销工具多商家管理等功能
1.数据管理

        数据管理包括数据总览、访客分析和传播数据功能
        数据总览提供小程序总浏览量、昨日/今日访问量、总用户量、总订单数及浏览量曲线图,如图所示

访客分析是以图例的形式来展示用户从微信的哪个模块来访问及访问的次数、比例、用户来源地区、用户访问时间及使用设备等,便于管理者更好地做好营销工作,如图所示

     传播数据主要是用于提供新老访客的比例,以及访客使用哪些主要平台打开应用的次数及占比
2.分享设置

        分享设置主要提供可以分享应用的方式
3.用户管理

        用户管理主要用于实现对用户进行添加、分组、群发消息、储值金充值、赠送会员卡等功能,如图所示

4.应用数据

        应用数据是后台管理的主要内容,前端组件(动态列表、动态表单)的数据都是通过在应用数据中的数据对象来管理的,类似通过数据库存放和管理数据

5.轮播管理

        轮播管理是前端软播组件的后台数据管理器,通过软播管理来设置前端软播组件展示的图片内容
6.分类管理

        分类管理适用于电商、到店、应用数据。分类管理可以通过选择动态分类组件样式来实现在顶部分类或侧边栏分类以展示应用数据、商品数据等效果。动态分类的二级有图模式只适用于电商
7.商品管理

        商品管理是后台管理的主要内容,前端商品列表组件的数据来源于后台商品管理。商品管理可以管理商品列表、积分商品、位置管理、支付方式、订单管理、拼团订单管理、订单统计、账单明细、运费管理和评价管理功能,如图

8.经营管理

        经营管理主要包括子账号管理、手机端客户关系管理和短信接收管理,便于管理者管理小程序的运营
9.营销工具

        营销工具是小程序营销推广的有力工具,主要有会员卡、优惠券、积分、储值、推广秒杀、集集乐、拼团活动、大转盘、砸金蛋、刮刮乐等。这些营销工具都需要事前在后台合理设置后,才能在活动中发挥更大的作用

10.多商家管理

        多商家管理是即速应用为有众多商家的商城(如“华东商城”“义乌商城”等)开设的管理功能,方便管理者统计每家店铺的订单及进行收益分析

5.4 打包上传

即速应用可以将小程序的代码打包,该代码包可以通过微信开发者工具来对接微信小程序
5.4.1 打包

进入即速应用后台管理,选择左边选项“系统设置”按钮,单击“微信小程序设置”选项,进人如图所示的页面

第六章

1.网络API

           微信小程序处理的数据通常从后台服务器获取, 再将处理过的结果保存到后台服务器,这就要求微信小程序要有与后台进行交互的能力。 微信原生API 接口或第三方API 提供了各类接口实现前后端交互。
          网络API 可以帮助开发者实现网络UPL 访问调用、文件的上传和下载、网络套接字的使用等功能处理。 微信开发团队提供了10个网络API 接口。
wx.request(Object) 接口 用于发起HTTPS 请求。
wx.uploadFile(Object) 接口 用于将本地资源上传到后台服务器。
wx.downloadFile(Object) 接口 用于下载文件资源到本地。
wx.connectSocket(Object) 接口 用于创建一个WebSocket 连接。
wx.sendSocketMessage(Object) 接口 用于实现通过WebSocket 连接发送数据。
wx.closeSocket(Object) 接口 用于关闭WebSocket 连接。
 wx.onSocketOpen(CallBack) 接口 用于监听WebSocket 连接打开事件。
 wx.onSocketError(CallBack) 接口 用于监听WebSocket 错误。
wx.onSocketMessage(CallBack) 接口 用于实现监听WebSocket 接收到服务器的消息事件。
wx.onSocketClose(CallBack) 接口 用于实现监听WebSocket 关闭。

 1.发起网络请求

              wx.request(Object) 实现向服务器发送请求、获取数据等各种网络交互操作, 其相关参数如表。    例如,通过wx.request(Object)获取百度(http://www.baidu.com)首页数据。(需要在微信公众平台小程序服务配置中的request合法域名http://www.baidu.com“) 。
示例代码如下:

 .wxml代码
<button type="primary"bindtap="getbaidutap">获取HTML数据</button>
<textarea value='{{html}}'auto-height maxlength='0'></textarea>
.js代码
Page({
  data:{
     html:''
   },
   getbaidutap:function(){
    var that=this;
     wx.request({
      url:'https://www.baidu.com',
       data:{},
       hearder:{'Content-Type':'application/json'},
      success:function(res){
        console.log(res);
        that.setData({
          html:res.data
         })
      }
    })
  }

例如,通过wx.request(Object)的GET方法获取邮政编码对应的地址信息。 
示例代码:

.wxml代码
<view>邮政编码:</view>
<input type="text" bindinput="input" placeholder='6位邮政编码'/>
<button type="primary" bind:tap="find">查询</button>
<block wx:for="{{address}}">
<block wx:for="{{item}}">
<text>{{item}}</text>
</block>
</block>
.js代码
Page({
  data:{
    postcode:'',//查询邮政编码
    address:[],//邮政编码对应的地址
    errMsg:'',//错误信息
    error_code:-1//错误码
  },
  input:function(e){//输入事件
    this.setData({
      postcode:e.detail.value,
    })
    console.log(e.detail.value)
  },
  find:function(){//查询事件
    var postcode=this.data.postcode;
    if(postcode != null && postcode != " "){
  var self=this;
    //显示toast提示消息
    wx.showToast({
      title: '正在查询,请稍候....',
      icon:'loading',
      duration:10000
    });
    wx.request({
      url: 'https://v.juhe.cn/postcode/query',//第三方后台服务器
      data:{
        'postcode':postcode,
        'key':'0ff9bfccdf147476e067de994eb5496e'//第三方提供
      },
      header:{
        'Content-Type':'application/json',
      },
      method:'GET',//方法为GET
      success:function(res){
        wx.hideToast();//隐藏toast
        if(res.data.error_code==0){
          console.log(res);
          self.setData({
            errMsg:'',
            error_code:res.data.error_code,//错误代码
            address:res.data.result.list//获取到的数据
          })
        }
        else{
          self.setData({
            errMsg:res.data.reason || res.data.reason,//错误原因分析
            error_code:res.data.error_code
          })
        }
      }
    })
  }
}

例如,通过wx.request(Object)的POST方法获取邮政编码对应的地址信息。
示例代码:

.wxml代码
<view>邮政编码:</view>
<input type="text" bindinput="input" placeholder='6位邮政编码'/>
<button type="primary" bind:tap="find">查询</button>
<block wx:for="{{address}}">
<block wx:for="{{item}}">
<text>{{item}}</text>
</block>
</block>

.js代码
Page({
  data:{
    postcode:'',//查询邮政编码
    address:[],//邮政编码对应的地址
    errMsg:'',//错误信息
    error_code:-1//错误码
  },
  input:function(e){//输入事件
    this.setData({
      postcode:e.detail.value,
    })
    console.log(e.detail.value)
  },
  find:function(){//查询事件
    var postcode=this.data.postcode;
    if(postcode != null && postcode != " "){
  var self=this;
  //显示toast提示消息
  wx.showToast({
    title: '正在查询,请稍候。。。。',
    icon:'loading',
    duration:10000
  });
  wx:wx.request({
    url: 'https://v.juhe.cn/postcode/query',//第三方后台服务器
    data:{
      'postcode':postcode,
      'key':'0ff9bfccdf147476e067de994eb5496e'//第三方提供
    },
    header:{
      'content-type':'application/x-www-form-urlencoded'
    },
    method:'POST',//方法为POST
    success:function(res){
      wx.hideToast();//隐藏toast
      if(res.data.error_code==0){
        console.log(res);
        self.setData({
          errMsg:'',
          error_code:res.data.error_code,//错误代码
          address:res.data.result.list//获取到的数据
        })
      }
      else{
        self.setData({
          errMsg:res.data.reason || res.data.reason,//错误原因分析
          error_code:res.data.error_code
        })
      }
    }
  })
    }
  }

2.上传文件

          wx.uploadFile(Object) 接口用于将本地资源上传到开发者服务器, 并在客户端发起一个HTTPSPOST 请求, 其相关参数如表 所示               通过wx.uploadFile(Object) , 可以将图片上传到服务器并显示。示例代码如下:

.wxml代码
<button type="primary" bind:tap="uploadimage">上传图片</button>
<image src="{{img}}" mode="widthFix"/>
.js代码
Page({
  data:{
    img:null,
  },
  uploadimage:function(){
    var that=this;
    //选择图片
    wx.chooseImage(res)({
      success:function(res){
      var tempFilePaths=res.tempFilePaths
      upload(that,tempFilePaths);
    }
  })
  function upload(page,path){
    //显示toast提示消息
    wx.showToast({
      icon:'loading',
      title: '正在上传'
    }),
    wx.uploadFile({
      url:"http://localhost",
      filePath:path[0],
      name:'file',
      success:function(res){
        console.log(res);
        if(res.statusCode !=200){
          wx.showModal({
            title:'提示',
            content:'上传失败',
            showCancel:false
          })
          return;
        }
        var data =res.data
        page.setData({
          img:path[0]
        })
      },
      fail:function(e){
        console.log(e);
        wx.showModal({
          title: '提示',
          content: '上传失败',
        showCancel:false
        })
      },
      complete:function(){
        //隐藏Toast
        wx.hideToast();
      }
    })
  }
  }
})

3.下载文件 

          wx.downloadFile(Object)接口用于实现从开发者服务器下载文件资源到本地, 在客户端直接发起一个HTTPGET请求, 返回文件的本地临时路径。 其相关参数如表所示。例如,通过wx.downloadFile(Object)实现从服务器中下载图片,后台服务采用WAMP软件在本机搭建。示例代码如下:

.wxml代码
<button type="primary" bind:tap="downloadimage">下载图像</button>
<image src="{{img}}" mode="widthFix" style="width: 90%;height: 500px;"></image>
.js代码
Page({
  data:{
    img:null
  },
  downloadimage:function(){
    var that=this;
    wx.downloadFile({
      url: 'http://localhost/1.jpg',//通过WAMP软件实现
      success:function(res){
        console.log(res)
        that.setData({
          img:res.tempFilePath
        })
      }
    })
  }
})

2.多媒体API

         多媒体API 主要包括图片API、录音API、音频播放控制API、音乐播放控制API 等, 其目的是丰富小程序的页面功能。
1.图片API

         图片API 实现对相机拍照图片或本地相册图片进行处理, 主要包括以下4 个API 接口:
 wx.chooseImage(Object) 接口 用于从本地相册选择图片或使用相机拍照。
wx.previewImage(Object) 接口 用于预览图片。
wx.getImageInfo(Object) 接口 用于获取图片信息。
 wx.saveImageToPhotosAlbum(Object) 接口 用于保存图片到系统相册。
1.选择图片或拍照

             wx.chooseImage(Object) 接口用于从本地相册选择图片或使用相机拍照。 拍照时产生的临时路径在小程序本次启动期间可以正常使用, 若要持久保存, 则需要调用wx.saveFile 保存图片到本地。 其相关参数如表6-4所示。  若调用成功, 则返回tempFilePaths 和tempFiles, tempFilePaths 表示图片在本地临时文件路径列表。tempFiles 表示图片的本地文件列表, 包括path 和size。
示例代码:

wx.chooseImage({
  count:2,//默认值为9
  sizeType:['original','compressed'],//可以指定是原图还是压缩图,默认二者都有
  sourceType:['album','camera'],//可以指定来源是相册还是相机,默认二者都有
  success:function(res){
    //返回选定照片的本地文件路径列表,tempFilePath可以作为img标签的src属性来显示图片
    var tempFilePaths=res.tempFilePaths
    var tempFiles=res.tempFiles
    console.log(tempFilePaths)
    console.log(tempFiles)
  }
})

2.预览图片

          wx.previewImage(Object) 接口主要用于预览图片, 其相关参数如表6 -5 所示。

wx.previewImage({
 //定义显示第二张
 current:"http://bmob-cdn-16488.b0.upaiyun.com/2018/02/05/2.png",
 urls:["http://bmob-cdn-16488.b0.upaiyun.com/2018/02/05/1.png",
"http://bmob-cdn-16488.b0.upaiyun.com/2018/02/05/2.png",
"http://bmob-cdn-16488.b0.upaiyun.com/2018/02/05/3.jpg"]
})

3.获取图片信息

         wx.getImageInfo(Object)接口用于获取图片信息, 其相关参数如表6 -6 所示。

wx.chooseImage({
  success:function(res){
    wx.getImageInfo({
      src: res.tempFilePaths[0],
      success:function(e){
        console.log(e.width)
        console.log(e.height)
      }
    })
  },
})

4.保存图片到系统相册

           wx.saveImageToPhotosAlbum(Object) 接口用于保存图片到系统相册, 需要得到用户授权scope.writePhotosAlbum。 其相关参数如表6 -7 所示。

2. 录音API

               录音API 提供了语音录制的功能, 主要包括以下两个API 接口:
    wx.startRecord(Object) 接口 用于实现开始录音。
    wx.stopRecord(Object) 接口 用于实现主动调用停止录音。
1.开始录音

              wx.startRecord(Object) 接口用于实现开始录音。 当主动调用 wx.stopRecord(Object)接口或者录音超过1 分钟时, 系统自动结束录音, 并返回录音文件的临时文件路径。 若要持久保存, 则需要调用wx.saveFile()接口。 其相关参数如表所示。

2.停止录音 

            wx.stopRecord(Object) 接口用于实现主动调用停止录音。
示例代码:

wx.startRecord({
  success:function(res){
    var tempFilePath=tempFilePath
  },
  fail:function(res){
    //录音失败
  }
})
setTimeout(function(){
  //结束录音
  wx.stopRecord()},10000)

3 .音频播放控制API

          音频播放控制API 主要用于对语音媒体文件的控制, 包括播放、暂停、停止及audio 组件的控制, 主要包括以下3 个API:
 wx.playVoice(Object)接口 用于实现开始播放语音。
 wx.pauseVoice(Object)接口 用于实现暂停正在播放的语音。
 wx.stopVoice(Object)接口  用于结束播放语言
1.播放语音

         wx.playVoice(Object)接口用于开始播放语音, 同时只允许一个语音文件播放, 如果前一个语音文件还未播放完, 则中断前一个语音文件的播放。 其相关参数如表 所示。

wx.startRecord({
    success:function(res){
      var tempFilePath=res.tempFilePath
      wx.playVoice({
        //录音完后立即播放
        filePath:tempFilePath,
        complete:function(){
          
        }
      })
    }
  })

2.暂停播放

        wx.pauseVoice(Object)用于暂停正在播放的语音。再次调用wx.playVoice(Object)播放同一个文件时, 会从暂停处开始播放。 如果想从头开始播放, 则需要先调用wx.stopVoice(Object)。
示例代码:

 wx.startRecord({
    success:function(res){
      var tempFilePath=res.tempFilePath
      wx.playVoice({
        filePath: tempFilePath
      })
      setTimeout(function(){
        //暂停播放
        wx.pauseVoice()
      },5000)
    }
  })

3.结束播放

        wx.stopVoice(Object)用于结束播放语音。
示例代码

wx.startRecord({
    success:function(res){
      var tempFilePath=res.tempFilePath
      wx.playVoice({
        filePath:tempFilePath
      })
      setTimeout(function(){
        wx.stopVoice()
      },5000)
    }
  })

4 .音乐播放控制API

       音乐播放控制API 主要用于实现对背景音乐的控制, 音乐文件只能是网络流媒体, 不能是本地音乐文件。 音乐播放控制API 主要包括以下8 个API:
 wx.playBackgroundAudio(Object)接口 用于播放音乐。
 wx.getBackgroundAudioPlayerState(Object)接口 用于获取音乐播放状态。
 wx.seekBackgroundAudio(Object)接口 用于定位音乐播放进度。
 wx.pauseBackgroundAudio() 接口 用于实现暂停播放音乐。
 wx.stopBackgroundAudio() 接口 用于实现停止播放音乐。
 wx.onBackgroundAudioPlay(CallBack) 接口 用于实现监听音乐播放。
 wx.onBackgroundAudioPause(CallBack) 接口 用于实现监听音乐暂停。
 wx.onBackgroundAudioStop(CallBack) 接口 用于实现监听音乐停止。
1.播放音乐

         wx.playBackgroundAudio(Object)用于播放音乐, 同一时间只能有一首音乐处于播放状态, 其相关参数如表所示。

wx.playBackgroundAudio({
  dataUrl: 'http://bmob-cdn-16488.b0.upaiyun.com/2018/02/09/117e4a1b405195b18061299e2de89597.mp3',
  title:'有一天',
  coverImgUrl:'http:///bmob-cdn-16488.b0.upaiyun.com/2018/02/09/f604297140c9681880cc3d3e581f7724.jpg',
  success:function(res){
    console.log(res)//成功返回playBackgroundAudio:ok
  }
})

 2.获取音乐播放状态

                wx.getBackgroundAudioPlayerState(Object) 接口用于获取音乐播放状态, 其相关参数如表所示。

wx.getBackgroundAudioPlayerState({
  success:function(res){
    var status=res.status
    var dataUrl=res.dataUrl
    var currentPosition=res.currentPosition
    var duration=res.duration
    var downloadPercent=res.downloadPercent
    console.log("播放状态:"+status)
    console.log("音乐文件地址:"+dataUrl)
    console.log("音乐文件当前播放位置:"+currentPosition)
    console.log("音乐文件的长度:"+duration)
    console.log("音乐文件的下载进度:"+downloadPercent)
  }
})

3. 控制音乐播放进度

           wx.seekBackgroundAudio(Object)接口用于控制音乐播放进度, 其相关参数如表所示

wx.seekBackgroundAudio({
  position: 30,
})

4.暂停播放音乐 

              wx.pauseBackgroundAudio() 接口用于暂停播放音乐。
示例代码:
 

wx.playBackgroundAudio({
  dataUrl: '/music/a.mp3',
  title:'我的音乐',
  coverImgUrl:'images/poster.jpg',
  success:function(){
    console.log('开始播放音乐了');
  }
});
setTimeout(function(){
  console.log('暂停播放');
  wx.pauseBackgroundAudio();
},5000);//5秒后自动暂停

5.停止播放音乐

                   wx.stopBackgroundAudio() 接口用于停止播放音乐。
示例代码:

wx.playBackgroundAudio({
  dataUrl: '/music/a.mp3',
  title:'我的音乐',
  coverImgUrl:'images/poster.jpg',
  success:function(){
    console.log('开始播放音乐了');
  }
});
setTimeout(function(){
  console.log('暂停播放');
  wx.stopBackgroundAudio();
},5000);//5秒后自动停止

6.监听音乐播放

               wx.onBackgroundAudioPlay(CallBack) 接口用于实现监听音乐播放, 通常被wx.playBackgroundAudio(Object)方法触发, 在CallBack 中可改变播放图标。
示例代码;

wx.playBackgroundAudio({
  dataUrl: this.data.musicData.dataUrl,
  title:this.data.musicData.title,
  coverImgUrl:this.data.musicData.coverImgUrl,
  success:function(){
    wx.onBackgroundAudioStop(function(){
      that.setData({
        isplayingMusic:false
      })
    })
  }
})

7.监听音乐暂停

                       wx.onBackgroundAudioPause(CallBack)接口用于实现监听音乐暂停,通常被wx.pauseBackgroundAudio()方法触发。在CallBack中可以改变播放图标。
8.监听音乐停止


           wx.onBackgroundAudioStop(CallBack)接口用于实现监听音乐停止,通常被音乐自然播放停止或wx.seekBackgroundAudio(Object)方法导致播放位置等于音乐总时长时触发。在CallBack中可以改变播放图标。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值