总结微信小程序

第一章总结

1.1认识微信小程序

1.无须安装     2.触手可及   3.用完及走   4.无须安装

简单的业务逻辑,低频的使用场景

1.2微信小程序的开发流程

微信小程序的开发流程为:第一步,在微信公众平台上注册小程序账号;第二步,下载开发者工具进行编码;第三步,通过开发者工具提交代码,待审核后便可以发布。

微信小程序界面划分于5大区域:工具栏、模拟区、目录文件区、编辑区和调试区。

(1)工具栏
实现多种功能,例如账号切换,小程序编译、清理存缓、预览等

(2)模拟区
在模拟区中选择手机类型、显示比例、网络类型,模拟器会显示运行效果

(3)目录文件区
用来显示当前的目录结构

(4)编辑区
用来实现对代码的编辑操作,编辑区中支持对.wxml、.wxss、.js及.json文件的操作

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

第二章 微信小程序开发基础总结

1 小程序的基本目录结构

主页文件
微信小程序的主体部分由3 个文件组成, 这3 个文件必须放在项目的主目录中, 负责小程序的整体配置, 它们的名称是固定的。

(1)app.js:小程序逻辑页面,主要用来注册小程序全局实例。

(2)app.json:小程序公共配置文件,配置小程序全局设置。

(3)app.wxss:小程序主样式表文件,类似的HTML的.CSS文件。

小程序通常是由多个页面组成的, 每个页面包含4 个文件, 同一页面的这4 个文件必须具有相同的路径与文件名。 当小程序被启动或小程序内的页面进行跳转时, 小程序会根据app.json设置的路径找到相对应的资源进行数据绑定。

(1).js文件:页面逻辑文件,在该文件中编写JavaScript代码控制页面的逻辑。
(2).wxml:页面结构文件,用于设计页面的布局、数据绑定等。
(3).wxss:页面样式表文件,用于定义本页面中用到的各类样式表。
(4).json:页面配置文件,该文件在页面中不可缺少。

2.2 小程序开发框架

2.2 创建小程序页面

选中pages文件先将文件夹中名为index文件删除,再新建一个文件(在pages文件中)。在你新建的文件夹中新建四个页面文件

在app.json文件中修改第一句代码,改为你新建的文件名字

在new.js中输入:

Page({
 
  
 
})

在new.json中输入:

{}

在new.wxml中输入:

大家好

运行结果

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

全局配置文件

全局配置文件是来配置页面文件(pages)的路径、设置窗口(window)表现、设定网络请求API的超时时间值(networTimeout)以及配置多个切换页(tabBar)等。

                                                    全局配置项

{
//设置页面路径
"pages":[],
//设置默认页面的窗口表现
"window":{},
//设置底部tap的表现
"tabBar":{},
//设置网络请求API的超时时间值
"networkTimeout":{},
//设置是否开启debug模式
"debug":false
}

window配置项

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

例,app.json文件:

  "window": {
    "navigationBarTextStyle": "black",
    "navigationBarTitleText": "Weixin",
    "navigationBarBackgroundColor": "#ffffff"

  }

tabBar配置项

当需要在程序顶部或底部设置菜单栏时,可以通过配置tabBar配置项来实现。

                 tabBar配置项表

{
  "tabBar": {
    "color": "#000000",
    "selectedColor": "#000000",
    "borderStyle": "black",
    "backgroundColor": "#ffffff",
    "list": [{
      "pagePath": "pages/news/news",
      "text": "text",
      "iconPath": "img/R-C.jpg",
      "selectedIconPath": "img/R-C.jpg"
    },
     {
      "pagePath": "pages/logs/logs",
      "text": "text",
      "iconPath": "img/R-C.jpg",
      "selectedIconPath": "img/R-C.jpg"
     }
  ]
  },

networTimeout配置项

networkTimeout用于request、connectSocket、uploadFile、downloadFile等网络请求的超时时间,单位均为毫秒。详细属性见下图:

               networTimeout配置项表

{
"networkTimeout": {
    "request": 200000,
    "connectSocket": 20000,
    "uploadFile": 20000,
    "downloadFile": 20000
  }
}

运行结果

2.4 逻辑层文件 

小程序开发框架的逻辑层使用 JavaScript 引擎为小程序提供开发者 JavaScript 代码的运行环境以及微信小程序的特有功能。

逻辑层将数据进行处理后发送给视图层,同时接受视图层的事件反馈。

开发者写的所有代码最终将会打包成一份 JavaScript 文件,并在小程序启动的时候运行,直到小程序销毁。这一行为类似 ServiceWorker,所以逻辑层也称之为 App Service。

 小程序启动后首先触发onLaunch方法,然后触发onShow方法,在onShow方法中通过this参数获取自定义属性和自定义方法并显示。

app.js文件:

// app.js
App({
  onLaunch(){
    console.log("小程序初始化  >>>")
  },
  onShow(){
    console.log("小程序启动")
  },
  onHide(){
    console.log("小程序进入后台")
  },
  onError(){
  }
})

运行效果:

页面逻辑文件

页面逻辑文件主要功能有:设置初始化数据,注册当前页面生命周期,注册事件处理函数等。小程序的逻辑文件是JavaScript文件,所有的逻辑文件,包括app.js,最终将会打包成一个js文件,在小程序启动时运行,直到小程序的销毁,类似于ServiceWorker,所以逻辑层也称为App Service。
在小程序中,每个逻辑文件都有独立的作用域,并具备模块化能力。每个小程序都需要在 app.js 中调用 App 方法注册小程序实例,绑定生命周期回调函数、错误监听和页面不存在监听函数等。

设置初始数据

例,在new.js和new.wxml中输入代码:

new.wxml


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

new.js


Page({
  //页面的初始数据
  data:{
    name:'牢大', //字符串
    age:22,      //数字
    birthday:[{year:1997},{month:8},{date:18}], //数组
    object:{hobby:'唱歌,跳舞,rapper'} //对象
  }
})


运行结果界面

例,在logs.js和news.js加入代码:

  //生命周期函数--监听页面加载
  onLoad(){
    console.log("index1 onLoad.....")
  },
  //生周期函数--监听页面初次渲染完成
  onReady(){
    console.log("index1 onReady....")
  },
  //生命周期函数--监听页面显示
  onShow(){
    console.log("index1 onShow....")
  },
  //生命周期函数--监听页面隐藏
  onHide(){
    console.log("index1 onHide....")
  },
  //生命周期函数--监听页面卸载
  onUnload(){
    console.log("index1 onUnload....")
  },

定义事件处理函数

示例代码:

<button bind:tap="my">单击执行逻辑层事件</button>
 
 my:function(){
    console.log("你点击了view")
  },
 

使用 setData 更新数据

在new.js和new.wxml添加代码:

<view>姓名:{{name}}</view>
<button bind:tap="chtext">修改姓名</button>
<view>年龄:{{age}}</view>
<button bind:tap="chage">修改年龄</button>
<view>出生日期:
  {{birthday[0].year}}年
  {{birthday[1].month}}月
  {{birthday[2].date}}日             
</view>
<button bind:tap="charray">修改出生日期</button>
<view>爱好:{{object.hobby}}</view>
<button bind:tap="chobject">修改爱好</button>
<view>{{address}}</view>
<button bind:tap="adddata">添加数据</button>
<button bind:tap="myclick">单击专属动作</button>

new.js

Page({
  //页面的初始数据
  data:{
    name:'牢大', //字符串
    age:13,      //数字
    birthday:[{year:2004},{month:13},{date:38}], //数组
    object:{hobby:'唱歌,肘击,打篮球'} //对象
  },
  chtext:function() {
    this.setData({
      name:'科比'
    });
  },
  chage:function() {
    this.setData({
      age:+12
    });
  },
  charray:function() {
    this.setData({
      birthday:[{year:2025},{month:12},{date:90}]
    });
  },
  chobject:function() {
    this.setData({
      'object.hobby':'唱歌,黑人rappe,打篮球, 开直升机,肘击'
    });
  },
  adddata:function() {
    this.setData({
      'address':'尼克杨-传奇机长,冰红茶'
    });
  },
  myclick:function(){
    console.log("你使用了肘击")
  },
});

点击事件前

点击事件后

小程序第三章简述

一、盒子模型
盒子模型就是我们在页面设计中经常用到的一种思维模型。 
不同部分的说明:

Margin(外边距) - 清除边框外的区域,外边距是透明的。
Border(边框) - 围绕在内边距和内容外的边框。
Padding(内边距) - 清除内容周围的区域,内边距是透明的。
Content(内容) - 盒子的内容,显示文本和图像。


块级元素
块级元素默认占一行高度, 一行内通常只有一个块级元素(浮动后除外), 添加新的块级元素时, 会自动换行, 块级元素一般作为盒子出现。 块级元素的特点如下:
(1) 一个块级元素占一行。

(2) 块级元素的默认高度由内容决定, 除非自定义高度。

(3) 块级元素的默认宽度是父级元素的内容区宽度, 除非自定义宽度。

(4) 块级元素的宽度、高度、外边距及内边距都可以自定义设置。

​
<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>
 
​

行内元素:
行内元素, 不必从新一行开始, 通常会与前后的其他行内元素显示在同一行中, 它们不占有独立的区域, 仅靠自身内容支撑结构, 一般不可以设置大小, 常用于控制页面中文本的样式。 将一个元素的display 属性设置为inline 后, 该元素即被设置为行内元素。 
行内元素的特点如下:

(1) 行内元素不能被设置高度和宽度, 其高度和宽度由内容决定。

(2) 行内元素内不能放置块级元素, 只级容纳文本或其他行内元素。

(3) 同一块内, 行内元素和其他行内元素显示在同一行。

<view style="padding: 20px;">
<text style="border: 1px solid #f00;">文本1</text>
<text style="border: 1px solid #0f0;margin: 10px;padding: 5px;">文本2</text>
<view style="border: 1px solid #00f;display: inline;">块级元素设置为行内元素</view>一行显示不全,自动换行显示
</view>

行内块元素
当元素的display 属性被设置为inline - block 时, 元素被设置为行内块元素。 行内块元素可以被设置高度、宽度、内边距和外边距。 示例代码如下:
<view>
  <view style="display: inline-block;border: 1px solid #f00;margin: 10px;padding: 10px;width: 20px;">块级元素、行内元素和行内块元素</view>
</view>
运行结果

 运行效果:

 示例代码

index.wxml


<canvas canvas-id="one" style="width: 800px; height: 500px;"></canvas>

index.js

Page({
  onReady: function () {
    const ctx = wx.createCanvasContext('one');
 
    // 设置五环颜色
    const colors = ['#6495ed', '#000000', '#9acd32', '#ff0000', '#ffd700'];
 
    // 绘制蓝色环
    ctx.beginPath();
    ctx.arc(50, 50, 40, 0, 2 * Math.PI);
    ctx.setStrokeStyle(colors[0]);
    ctx.stroke();
 
    // 绘制黑色环
    ctx.beginPath();
    ctx.arc(110, 50, 40, 0, 2 * Math.PI);
    ctx.setStrokeStyle(colors[1]);
    ctx.stroke();
 
    // 绘制绿色环
    ctx.beginPath();
    ctx.arc(170, 50, 40, 0, 2 * Math.PI);
    ctx.setStrokeStyle(colors[2]);
    ctx.stroke();
 
    // 绘制红色环
    ctx.beginPath();
    ctx.arc(80, 90, 40, 0, 2 * Math.PI);
    ctx.setStrokeStyle(colors[3]);
    ctx.stroke();
 
    // 绘制黄色环
    ctx.beginPath();
    ctx.arc(140, 90, 40, 0, 2 * Math.PI);
    ctx.setStrokeStyle(colors[4]);
    ctx.stroke();
 
    ctx.draw();
  }
});

作业2 使用相应组件,完成“书单”页面。

 代码:

wxss

 
 .index{
  float: left;
  margin-top: 8px;
  width: 450px; 
  height: 220px;
}
.pic{
  margin: 0 auto;
  float: left;
  display: block;
  width: 180px; 
  height: 160px;
}
.yi{
  margin-top: 10px;
}
.i{
  margin-top: 5px;
}
.i2 {
  position: absolute; 
 
}
.i2 image{
  position: relative;
  top: 274px;
  left: 2px;
}
 
.i3{
  margin-top: 5px;
  position: absolute;
}
.i3 image{
  position: relative;
  top: 390px;
}
.one{
  margin-top: 5px;
  float: right;
}
.two{
  margin-top: 5px;
  float: right;
}
.pic2{
  margin: 0 auto;
  float: left;
  display: block;
  width: 180px; 
  height: 160px;
  margin-top: 60px;
}
.zi1{
  margin: 0 auto;
  display: block;
  font-size: 30px;
  float: none;
  display: block;
  margin-left: 200px;
  margin-top: 10px; 
}
.zi2{
  display: block;
  font-size: 15px;
 float: none;
  display: block;
  margin-left: 200px;
  margin-top: 10px;
}
.zi3{
  display: block;
  font-size: 10px;
  float: right;
  display: block;
  margin-left: 200px;
  margin-top: 10px;
}
wxml

 
<view style="font-size: 30px;"> ⬅书单</view>
 
 <view>
 <view class="i">
 <image src="" mode="pic" class="index"/>
 </view></view>
 <view>
   <view style="position: absolute;top: 65px;color: grey;left: 40px;font-size: 33px;">培养商业意识,走出生活,职场和事业的困境。</view>
   <view style="position: absolute;top: 65px;color: grey;left: 15px;top: 170px;font-size: 18px;">创新者是如何思考问题的?本书单包括了互联网,思维方式,商业,文案,市场,营销等方方面面,是在思维方式上的创新,略去传统商学院的教条</view>
 </view>
 <view class="one">
 <view class="zi1">十日终焉</view>
 <view class="zi2">白羊</view>
 <view class="zi3">(不后宫,不套路,不无敌,不系统,不无脑,不爽文,介意者慎入。) 当我以为这只是寻常的一天时,却发现自己被捉到了终焉之地。 当我以为只需要不断的参加死亡游戏就可以逃脱时,却发现众人开始觉醒超自然之力。 当我以为这里是「造神之地」时,一切却又奔着湮灭走去。</view>
 </view>
 <view class="i2">
 <view class="i2"><image src="/pages/img/a.jpg" mode=""class="pic"/></view></view>
 <view class="fo" style="border-bottom: 1px solid darkgrey;padding: 10px;"></view>
 <view class="i3">b
 <view><image src="/pages/img/b.jpg" mode=""class="pic2"/></view></view>
 <view class="two">
 <view class="zi1">异兽迷城</view>
 <view class="zi2">澎湃</view>
 <view class="zi3">【番茄独家更新至1138章】高阳是个孤儿,六岁穿越到“平行世界”,从此生活在一个温馨的五口之家。 十八岁那年,高阳偶然发现世界真相:这里根本不是平行世界,而是一个神秘领域,身边的亲人朋友全是可怕的“兽”!发现真相的高阳差点被杀,关键时刻获得系统【幸运】——活得越久就越强! 一场羔羊与狼的厮杀游戏由此展开…。</view>
 </view>

 3.使用相应组件,完成类似如图4-30所示的“西安找拼车”小程序部分界面。

运行结果

 wxml代码:

wxml

<view style="background-color: black;height: 60px;"><view style="color: white;padding-top: 20px;">×西安找拼车</view>
</view>
<view style="color:grey;padding-top: 10px;background-color: darkgray;height: 35px;">
联系方式(手机号和微信至少填一项)</view>
<view class="fo" style="border-bottom: 1px solid darkgrey;padding: 0px;"></view>
<view>
  <view style="font-size: 20px;position: absolute;top: 115px;">称呼*</view>
  <view style="font-size: 20px;color: grey;position: absolute;left: 140px;top:115px">请输入称呼</view>
</view>
<view class="fo" style="border-bottom: 1px solid darkgrey;padding: 20px;"></view>
<view>
  <view style="font-size: 20px;position: absolute;top:150px">手机号</view>
  <view style="font-size: 20px;color: grey;position: absolute;left: 140px;top:150px">请输入手机号</view>
</view>
<view class="fo" style="border-bottom: 1px solid darkgrey;padding: 20px;"></view>
<view>
  <view style="font-size: 20px;position: absolute;top: 195px;">微信号</view>
  <view style="font-size: 20px;color: grey;position: absolute;left: 140px;top:195px">请输入微信号</view>
</view>
<view class="fo" style="border-bottom: 1px solid darkgrey;padding: 23px;"></view>
<view style="color:grey;padding-top: 10px;background-color: darkgray;height: 35px;">
拼车信息</view>
<view class="fo" style="border-bottom: 1px solid darkgrey;padding: 0px;">
</view>
<view>
  <view style="font-size: 20px;position: absolute;top: 290px;">出发地点*</view>
  <view style="font-size: 20px;color: grey;position: absolute;left: 140px;top:290px">限7个字</view>
</view>
<view class="fo" style="border-bottom: 1px solid darkgrey;padding: 25px;"></view>
<view>
  <view style="font-size: 20px;position: absolute;top: 340px;">目的地*</view>
  <view style="font-size: 20px;color: grey;position: absolute;left: 140px;top:340px">限7个字</view>
</view>
<view class="fo" style="border-bottom: 1px solid darkgrey;padding: 25px;"></view>
<view>
  <view style="font-size: 20px;position: absolute;top: 390px;">空座位*</view>
  <view style="font-size: 20px;color: grey;position: absolute;left: 140px;top:390px">请输入空座位</view>
</view>
<view class="fo" style="border-bottom: 1px solid darkgrey;padding: 25px;"></view>
 
 
 

二.编程题

“人生进程”是一款极简的小程序,它只有一个功能:就是计算一个人从出生到现在已经度过了多少个月,如图4-31所示。请编写程序完成此功能。

步骤:

首先分别新建三个文件夹加一个原有的文件夹:

 "pages/index/index",

    "pages/ee/ee",

    "pages/qww/qww",

    "pages/22/22"

在app.json中输入添加代码:

{
  "pages": [
    "pages/index/index",
    "pages/yy/yy",
    "pages/ww/ww",
    "pages/qq/qq"
  ],
  "window": {
    "backgroundColor": "#F6F6F6",
    "backgroundTextStyle": "light",
    "navigationBarBackgroundColor": "#F6F6F6",
    "navigationBarTitleText": "云开发 QuickStart",
    "navigationBarTextStyle": "black"
  },
  "tabBar": {
    "color": "#666666",
    "selectedColor": "#ff0000",
    "borderStyle":"black",
    "backgroundColor": "#ffffff",
    "list": [{
      "pagePath": "pages/index/index",
      "iconPath": "./pages/images/mao.png",
      "selectedIconPath": "./pages/images/mao.png",
      "text": "首页"
    },
    {
      "pagePath": "pages/yy/yy",
      "iconPath": "./pages/images/mao.png",
      "selectedIconPath": "./pages/images/mao.png",
      "text": "年月日"
    },
    {
      "pagePath": "pages/ww/ww",
      "iconPath": "./pages/images/mao.png",
      "selectedIconPath": "./pages/images/mao.png",
      "text": "静思"
    },
    {
      "pagePath": "pages/qq/qq",
      "iconPath": "./pages/images/mao.png",
      "selectedIconPath": "./pages/images/mao.png",
      "text": "关于"
    }]
  },
  "style": "v2",
  "componentFramework": "glass-easel",
  "lazyCodeLoading": "requiredComponents"
}

 在index.wxml中写入代码:

<view style="text-align: center;font-size: 16x;position: absolute;left: 120px;">中国阶段人均寿命900个月</view>
<view style="position: absolute;padding-top: 30px;font-size: 26px;left: 70px;">2005年8月至今155个月</view>
<view  style=" border:1px solid black;width: 100px;position: absolute;height: 20px;top: 92px;left: 85px;"></view>
<view style="position: absolute;padding-top: 90px;font-size: 16px;padding-left: 188px;"></view><view style="border: 5px;color: black;position: absolute;left: 240px;top: 92px;">换一个日期</view>
<view  style=" border:1px solid black;width: 100px;position: absolute;height: 20px;top: 92px;left: 230px;"></view>
<view style="position: absolute;padding-top: 90px;font-size: 16px;padding-left: 490px;"><view style="position: absolute;left: 100px;top: 92px;">清除记录</view></view>
<view><image src="../images/hong.jpg" mode="" style="position: absolute;top:140px;left: 85px;height: 370px;width: 250px;"/></view>
<view style="position: absolute;top:540px;font-size: 18px;left:10px;">能把后面前行行走的机会抓住的人,十有八九都会成功</view>

在index.wxss中写入代码:

 
 .tou{
  float: left;
  margin-top: 8px;
  width: 450px; 
  height: 220px;
}
.tu1{
  margin: 0 auto;
  float: left;
  display: block;
  width: 180px; 
  height: 160px;
}
.yi{
  margin-top: 10px;
}
.ig1{
  margin-top: 5px;
}
.ig2 {
  position: absolute; 
 
}
.ig2 image{
  position: relative;
  top: 274px;
  left: 2px;
}
 
.ig3{
  margin-top: 5px;
  position: absolute;
}
.ig3 image{
  position: relative;
  top: 390px;
}
.yi{
  margin-top: 5px;
  float: right;
}
.er{
  margin-top: 5px;
  float: right;
}
.tu2{
  margin: 0 auto;
  float: left;
  display: block;
  width: 180px; 
  height: 160px;
  margin-top: 60px;
}
.zi1{
  margin: 0 auto;
  display: block;
  font-size: 30px;
  float: none;
  display: block;
  margin-left: 200px;
  margin-top: 10px; 
}
.zi2{
  display: block;
  font-size: 15px;
 float: none;
  display: block;
  margin-left: 200px;
  margin-top: 10px;
}
.zi3{
  display: block;
  font-size: 10px;
  float: right;
  display: block;
  margin-left: 200px;
  margin-top: 10px;
}

在yy.wxml中写入代码:

<view style="text-align: center;">中国现阶段人均寿命900个月</view>
<form bindsubmit="bind" style="line-height: 60px;">
<view style="display: flex; font-size: 20px;">
<input type="text" name="time" placeholder="请输入时间" class="mm"/>至今:{{people}}个月</view>
<view style="display: flex;">
<button formType="submit" class="bt">请输入后再点击此按钮</button>
<button formType="reset" style="width: 150px;font-size: 13px;">清除记录</button>
</view>
</form>
<view style="margin-top:50px;">
<image src="../images/hong.jpg" class="r" style="width: 250px;" />
</view>
<view style="width: 350px;">
  <text bindtap="changeText1">{{ text1 }}</text>
</view>

在ee.js中写入代码:

Page({
     data:{  
      text1: '点击',
          people:new Date().toLocaleDateString()
    
        },
      changeText1: function() {
        this.setData({
          text1: '能把在前面行走的机会抓住的人,十有八九都会成功。'
        });
      },
        bind:function(e){
          var time = new Date().toLocaleDateString()
          var year = time.substring(0,time.indexOf("/"))
          var mo = time.substring(time.indexOf("/")+1,time.lastIndexOf("/")) 
          
          var value = e.detail.value.time
          var year2 = value.substring(0,time.indexOf("/"))
          var mo2 = value.substring(time.indexOf("/")+1,time.lastIndexOf("/"))
      
          var m1 = (year - year2 -1)*12+12-(mo2-mo)
          this.setData({
            people : m1
          })
        }
  })

在ee.wxss中写入代码:

.mm{
  width: 110px;
  padding-top: 18px;
  padding-left: 30px;
}
.bt{
  padding-right: 20px;
  width: 175px;
  font-size: 13px;
  font-weight: bold;
}
.r{
  width: 190px;
  height: 350px;
  margin-left: 80px;
 
}

运行效果如下:

即速应用】是国内领先的企业微信小程序制作开发工具,免代码生成企业微信小程序平台,拥有海量企业微信小程序模板案例,为小程序企业公司,H5网站提供小程序 …

即速应用的功能特点主要体现在以下几个方面:

1.开发流程简单,零门槛制作
使用即速应用来开发微信小程序的过程非常简单, 无须储备相关代码知识, 没有开发经验的人也可以轻松上手。

(1) 登录即速应用的官方网站(www.jisuapp.cn), 进入制作界面, 从众多行业模板中选择一个合适的模板。

(2) 在模板的基础上进行简单编辑和个性化制作。

(3) 制作完成后, 将代码一键打包并下载。

(4) 将代码上传至微信开发者工具。

(5) 上传成功后, 等待审核通过即可。

使用流程 1  填写手机号设置密码注册      还可yi

 即速应用的主界面主要分为4个区域, 分别为菜单栏、工具栏、编辑区和属性面板。

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

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

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

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


 

即速应用组件

布局组件

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

1.双栏组件

双栏组件用来布局整体,它可以把一个区块分为两部分,操作时显示一个分隔的标志,便于操作,预览时则不会出现。双栏组件默认设置每个栏占50%总宽,也可以按实际需要调整比例。

2.面板组件

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

3.自由面板组件

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

4.顶部导航组件

顶部导航组件固定于页面顶部,用于编辑顶部的导航。常用的手机应用在顶部有一条导航,上面写有手机应用App的名称或logo,以及返回键等。顶部导航组件的属性面板设置如图所示。

5.分割线组件

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

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

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

1.文本组件

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

2.图片组件

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

3.按钮组件

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

 4.标题组件

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

5.轮播组件

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

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

6.分类组件

分类组件可以设置不同内容展示在不同类别中, 还可以添加、删除分类的个数及进行相应的设置。 分类组件的属性面板如图所示

7.图片列表组件

图片列表组件可以将图片以列表的形式展示, 还可以设置图片的名称、标题和点击事件。 图片列表组件的属性面板如图所示。

8.图文集组件

图文集组件用于展示图片、标题和简介, 其属性面板如图所示

9.视频组件

视频组件用于展示视频, 其属性面板如图所示。

视频组件提供网页应用、小程序和云服务3种视频来源。 网页应用使用视频通用代码来确定视频来源。 例如, 打开优酷网站, 找到需要的视频, 进入“分享给朋友” 页面, 通用代码就显示出来, 如图所示。

单击“复制通用代码” 按钮, 把复制好的通用代码粘贴到如图所示的文本框中, 保存后即可在小程序项目中添加该视频

4.高级组件

高级组件通常需要后台数据, 通过设置后台数据来实现数据后台化, 让小程序的数据随时更新, 及时修改, 如图所示。 下面介绍其中的几种常用组件。

1.动态列表组件

动态列表组件是容纳基础组件来展示后台数据的容器, 通过添加基础组件来展示对应的后台数据, 其属性面板如图所示。

要使用动态列表组件, 必须在后台进行数据管理, 单击“管理对象” 按钮, 进入管理后台, 如图所示。

单击“新增数据对象” 按钮, 进入“数据对象列表” 页面, 如图所示。

单击“添加字段” 按钮, 添加相应字段, 如图所示。

单击“保存” 按钮并返回, 进入“对象管理” 页面, 如图所示。

单击“数据管理” 按钮, 进入“数据管理” 页面, 如图所示

单击“ + 添加数据” 按钮新建数据, 进入“添加数据” 页面, 如图所示。

添加相应数据并保存, 继续添加所需数据, “数据管理” 页面如图所示。

 退回到编辑页面, 为了方便布局, 拖拽“自由面板” 组件到动态列表中, 然后拖拽一个图片和两个文本组件到自由面板组件, 如图所示。

 在动态列表属性面板的绑定数据对象中选择“羽绒服” 数据对象, 同时图片组件绑定数据对象样式字段, 文本组件分别绑定数据对象的名称和价格字段, 如图所示。

最终效果如图所示。

2.个人中心组件

个人中心组件显示个人相关信息的组件, 包括图像、昵称、我的订单、收货地址、购物车等, 如图所示。

 个人中心组件的属性面板如图所示

3.动态表单组件

动态表单组件相当于HTML中的<form> 标签, 是一个容器组件, 可以添加子表单组件和基本组件, 用来收集用户提交的相关信息给后台数据对象。 动态表单组件的属性面板如图所示

 在编辑页面, 添加相应的动态表单子组件(如“评分”), 如图所示。

单击如图所示属性面板中的“管理对象” 按钮,添加数据对象列表, 如图所示。

前端提交相关数据, 可以通过后台进行查看并统计, 如图所示

4.评论组件

评论组件提供信息发布或回复信息的组件, 评论组件的属性面板如图所示。

5.计数组件

计数组件可以用于点赞、统计浏览量等类似的计数功能。 计数组件的属性面板如图所示。

6.地图组件

地图组件用于显示指定地址的地图, 常用于实现定位及导航功能, 地图组件的属性面板如图所示。

7.城市定位组件

城市定位组件通常与列表类组件搭配使用, 常见搭配有动态列表和商品列表。 例如, 城市定位组件与商品列表搭配, 可以实现通过城市定位来搜索出某具体位置信息下的商品列表。

城市定位组件的属性面板如图所示。

8.悬浮窗组件

悬浮窗组件的固定搭配有: 客服、我的订单、购物车、回到顶部。 悬浮窗组件通常出现在个人中心或商品列表页面, 其属性面板如图所示

5.其他组件

其他组件包括音频组件和动态容器组件

1.音频组件

音频组件用于播放音乐(每个页面有一个音频组件即可), 手动点击播放按钮后即可实现播放。 音频文件可以选择音频库中的音乐, 也可以上传本地音频进行更换, 音频组件的属性面板如图所示。

2.动态容器组件
动态容器组件用于动态页面, 即所在页面绑定了数据对象。 动态容器组件中可以添加多种组件———文本组件、图片组件、按钮组件、标题组件、分类组件、音频组件、双栏组件、计数组件。 其中, 文本组件和图片组件可以绑定相应的数据对象字段(填充相应动态数据), 若有计数组件, 则会自动与动态容器关联。 动态容器组件的属性面板如图所示

 6.即速应用后台管理

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

1.数据管理

数据管理包括数据总览、访客分析和传播数据功能。

数据总览提供小程序总浏览量、昨日/ 今日访问量、总用户量、总订单数及浏览量曲线图, 如图所示。

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

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

2.分享设置

分享设置主要提供可以分享应用的方式, 如图所示。

3.用户管理

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

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

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

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

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

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

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

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

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

1.打包
进入即速应用后台管理, 选择左边选项“分享设置” 按钮, 单击“微信小程序” 选项, 进入如图所示的页面。

选择“代码包下载” 选项, 单击“确定” 按钮, 进入如图所示的页面。

通过“微信公众平台→小程序→设置→开发设置” 获取AppID 和AppSecret, 在“服务器配置” 中填写相关信息, 选择相应分类, 单击“打包” 按钮, 即可成功打包, 如图所示

单击“下载” 按钮, 即可下载该小程序代码包。

2.上传

打开微信Web开发者工具, 新建项目, 并填写相关内容。 其中, 项目目录为下载包解压后的目录, 如图所示。

单击“确定” 按钮, 打开小程序代码, 编译无误后, 填写该项目的版本号, 单击“上传” 按钮即可实现该小程序代码上传, 如图所示

上传成功后, 打开微信公众平台的“开发管理” 界面, 就可以看到该小程序的版本信息, 如图所示

待审核通过后, 即可在“微信” → “发现” → “小程序” 中搜索到该小程序。

网络API

微信小程序处理的数据通常从后台服务器获取,再将处理过的结果保存到后台服务器,这就要求微信小程序要有与后台进行交互的能力。微信原生API接口或第三方API提供了各类接口实现前后端交互。
网络API可以帮助开发者实现网络URL访问调用、文件的上传和下载、网络套接字的使用等功能处理。微信开发团队提供了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)实现向服务器发送请求、获取数据等各种网络交互操作,其相关参数如表6-1所示。一个微信小程序同时只能有5个网络请求连接,并且是HTTPS请求

 示例1,通过wx.request(Object)获取百度(https://www.daidu.com)首页的数据。代码如下y

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

运行结果

 示例2,通过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;
      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',
        success:function(res){
          wx.hideToast();
          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.uploadFile(Object)接口用于将本地资源上传到开发者服务器, 并在客户端发起一个HTTPS POST请求, 其相关参数如表所示。

通过wx.uploadFile(Object), 可以将图片上传到服务器并显示。示例代码如下

//wxml
<button type="primary"bindtap="uploadimage">上传图片</button ><image src="../img/a.jpg"mode="widthFix"/>
 
 
 
 
//js
Page({
  data: {
    img:null,
  },
  uploadimage:function(){
    var that=this;
    wx.chooseImage({
      success:function(res){
        var tempFilePaths = res.tempFilePaths
        upload(that,tempFilePaths);
      }
    })
    function upload(page,path){
      wx.showToast({
        icon:"loading",
        title:"正在上传"
      }),
      wx.uploadFile({
        filePath: path[0],
        name: 'file',
        url: 'http://localhost/',
        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(){
          wx.hideToast();
        }
      })
    }
  }
});

运行结果

下载文件 

wx. downloadFile(Object)接口用于实现从开发者服务器下载文件资源到本地,在客户端直接发起一个HTTPGET请求,返回文件的本地临时路径。其相关参数如表6-3所示。

例如,通过wx. downloadFile(Object)实现从服务器中下载图片,后台服务采用WAMP软件在本机搭建。
示例代码如下:

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
        })
      }
    })
  }
 })


<button type="primary" bind:tap="downloadimge">下载图像</button>
<image src="{{img}}"mode='widthFix'style = "width:90%;height:500px"></image>

运行结果

多媒体API

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

图片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"
]
})

运行结果 

获取图片信息

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


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

保存图片到系统相册

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

wx.chooseImage({
  success:function(res){
    wx.saveImageToPhotosAlbum({
      filePath: res.tempFilePaths[0],
      success:function(e){
        console.log(e)
      }
    })
  },
})

运行结果

录音API

录音API提供了语音录制的功能, 主要包括以下两个API接口:

wx.startRecord(Object)接口用于实现开始录音。

wx.stopRecord(Object)接口用于实现主动调用停止录音

1.开始录音

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

2.停止录音

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

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

运行结果

音频播放控制API


音频播放控制API主要用于对语音媒体文件的控制,包括播放、暂停、停止及audio组件的控制,主要包括以下3个API:

wx.playVoice(Object)接口用于实现开始播放语音。
wx.pauseVoice(Object)接口用于实现暂停正在播放的语音。
wx.stopVoice(Object)接口用于结束播放语音。


1.播放语音


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

示例代码如下运行结果

//js
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)用于结束播放语音。示例代码如下:

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

音乐播放控制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)
  }
})

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("音乐文件的下载进度"+status)
  }
})

接口调用成功后返回的参数如表所示。

示例代码如下

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("音乐文件的下载进度"+status)
  }
})

3.控制音乐播放进度

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

4.暂停播放音乐

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

//js
wx.playBackgroundAudio({
  dataUrl: '/music/a.mp3',
  title:'我的音乐',
  coverImgUrl:'/images/1-3.png',
  success:function(){
    console.log('开始播放音乐了')
  }
});
setTimeout(function(){
  console.log('暂停播放');
  wx.pauseBackgroundAudio();
},5000)

5.停止播放音乐

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

//js
wx.playBackgroundAudio({
  dataUrl: '/music/a.mp3',
  title:'我的音乐',
  coverImgUrl:'/images/1-3.png',
  success:function(){
    console.log('开始播放音乐了')
  }
});
setTimeout(function(){
  console.log('暂停播放');
  wx.stopBackgroundAudio();
},5000);

6.监听音乐播放

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

//js
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中可以改变播放图标。

9.案例展示

示例代码如下

//wxml
<view class="container">
<image class="bgaudio" src="{{changedImg ? music.coverImg: '/images/1-3.png'}}"/>
<view class="control-view">
<image src="/images/smoke1.png" bind:tap="onPositionTap" data-how="0"/>
<image src="/pages/test/{{isPlaying ? 'pause':'play'}}.png" bind:tap="onAudioTap"/>
<image src="/images/smoke2.png" bind:tap="onStopTap"/>
<image src="/images/smoke3.png" bind:tap="onPositionTap" data-how="1"/>
</view>
</view>
 
 
 
 
//json
{
  
}
 
 
 
//wxss
.bgaudio{
  height: 350rpx;
  width: 350rpx;
  margin-bottom: 100rpx;
}
.control-viewimage{
  height: 64rpx;
  width: 64rpx;
  margin: 30rpx;
}
 
 
 
 
 
//js
Page({
  data:{
    //记录播放状态
    isPlaying:false,
  coverImg:"",
    changedImg:false,
    //音乐内容
    music:{
      "url":
      "http://bomb - cdn - 16488.b0.upaiyun.com/2018/02/09/117e4a1b405195b18061299e89597.mp3",
      "title":"盛晓玫 - 有一天",
      "coverImg":
      "http://bomb - cdn - 16488.b0.upaiyun.com/2018/02/09/f604297140c9681880cc3d3e581f7724.jpg"
    },
  },
  onLoad:function(){
    //页面加载,注册监听事件
    this.onAudioState();
  },
  //点击播放或者暂停按钮时触发
  onAudioTap:function(event){
    if(this.data.isPlaying){
      //正常播放,就暂停并修改
      wx.pauseBackgroundAudio();
    }else{
      //暂停就播放
      let music = this.data.music;
      wx.playBackgroundAudio({
        dataUrl: music.url,
        title:music.title,
        coverImgUrl:music.coverImg
      })
    }
  },
  //点击即可停止播放音乐
  onStopTap:function(){
    let that = this;
    wx.stopBackgroundAudio({
      success:function(){
        //改变coverImg和播放状态
        that.setData({ isPlaying:false,changedImg:false });
      }
    })
  },
  //点击快进或快退,触发
  onPositionTap:function(event){
    let how = event.target.dataset.how;
    //获取音乐的播放状态
    wx.getBackgroundAudioPlayerState({
      success:function(res){
        //在播放才生效
        //1播放中
        let status = res.status;
        if(status === 1){
          //总时长
          let duration = res.duration;
          //位置
          let currentPosition = res.currentPosition;
          if(how === "0"){
            let position = currentPosition - 10;
            if(position <0 ){
              position =1;
            }
            //快退
            wx.seekBackgroundAudio({
              position: position,
            });
            wx.showToast({
              title: '快退10s',
              duration:500
            });
          }
          if(how === "1"){
            let position = currentPosition + 10;
            if(position>duration){
              position=duration -1;
            }
            //快进
            wx.seekBackgroundAudio({
              position: position,
            });
            wx.showToast({
              title: '快进10s',
              duration:500
            });
          }
        }else{
          wx.showToast({
            title: '音乐未播放',
            duration:800
          });
        }
      }
    })
  },
  //播放状态
  onAudioState:function(){
    let that = this;
    wx.onBackgroundAudioPlay(function(){
      that.setData({ isPlaying:true,changedImg:true });
      console.log("on play");
    });
    wx.onBackgroundAudioPause(function(){
      that.setData({ isPlaying:false });
      console.log("on pause");
    });
    wx.onBackgroundAudioStop(function(){
      that.setData({ isPlaying:false,changedImg:false });
      console.log("on stop");
    });
  }
})

运行示例

文件API
从网络上下载或录音的文件都是临时保存的,若要持久保存,需要用到文件API。文件API提供了打开、保存、删除等操作本地文件的能力,主要包括以下5个API接口:

(一)wx.saveFile(Object)接口用于保存文件到本地。
(二)wx.getSaveFileList(Object) 接口用于获取本地已保存的文件列表。
(三)wx.getSaveFileInfo(Object) 接口用于获取本地文件的文件信息。
(四)wx.removeSaveFile(Object) 接口用于删除本地存储的文件。
(五)wx.openDocument(Object) 接口用于新开页面打开文档,支持格式:doc、xls、ppt、pdf、docx、xlsx、ppts。

1.保存文件

wx.saveFile(Object)用于保存文件到本地, 其相关参数如表所示。示例代码如下:

saveImg: (function(){
  wx.chooseImage({
    count:1,
    sizeType:['original','compressed'],
    sourceType:['album','camera'],
    success:function(res){
      var tempFilePaths = res.tempFilePaths[0]
      wx.saveFile({
        tempFilePath:tempFilePaths,
        success:function(res){
          var saveFilePath = res.saveFilePath;
          console.log(saveFilePath)
        }
      })
    }
  })
})

2.获取本地文件列表

wx.getSaveFileList(Object) 接口用于获取本地已保存的文件列表, 如果调用成功, 则返回文件的本地路径、文件大小和文件保存时的时间戳(从1970/01/0108: 00:00到当前时间的秒数)文件列表。其相关参数如表所示。示例代码如下:

//js
wx.getSavedFileList({
  success:function(res){
    that.setData({
      fileList:res.fileList
    })
  }
})

3.获取本地文件的文件信息

wx.getSaveFileInfo(Object)接口用于获取本地文件的文件信息,此接口只能用于获取已保存到本地的文件,若需要获取临时文件信息,则使用wx.getFileInfo(Object)接口。其相关参数如表所示。示例运行

//js
wx.chooseImage({
  count:1,
  sizeType:['original','compressed'],
  sourceType:['album','camera'],
  success:function(res){
    var tempFilePaths = res.tempFilePaths[0]
    wx.saveFile({
      tempFilePath:tempFilePaths,
      success:function(res){
        var saveFilePath = res.saveFilePath;
        wx.getSavedFileInfo({
          filePath:saveFilePath,
          success:function(res){
            console.log(res.size)
          }
        })
      }
    })
  }
})

4.删除本地文件

wx.removeSaveFile(Object)接口用于删除本地存储的文件, 其相关参数如表所示。

示例代码如下

//js
wx.getSavedFileList({
  success:function(res){
    if(res.fileList.Length > 0 ){
      wx.removeSavedFile({
        filePath:res.fileList[0].filePath,
        complete:function(res){
          console.log(res)
        }
      })
    }
  }
})

5.打开文档

wx.openDocument(Object)接口用于新开页面打开文档,支持格式有doc、xls、ppt、pdf、docx、xlsx、pptx,其相关参数如表所示。示例代码如下:

//js
wx.downloadFile({
  url: "http://localhost/fm2.pdf",
  success:function(res){
    var tempFilePath = res.tempFilePath;
    wx.openDocument({
      filePath: tempFilePath,
      success:function(res){
        console.log("打开成功")
      }
    })
  }
})

本地数据及缓存API
小程序提供了以键值对的形式进行本地数据缓存功能,并且是永久存储的,但最大不超过10MB,其目的是提高加载速度。数据缓存的接口主要有4个:

wx.setStorage(Object)或wx.setStorageSync(key,data)接口用于设置缓存数据。
wx.getStorage(Object)或wx.getStorageSync(key) 接口用于获取缓存数据。
wx.removeStorage(Object)或wx.removeStorageSync(key)接口用于删除指定缓存数据。
wx.clearStorage()或wx.clearStorageSync()接口用于清除缓存数据。
       其中,带Sync后缀的为同步接口,不带Sync后缀的为异步接口。


保存数据
wx.setStorage(Object)
wx.setStorage(Object)接口将数据存储到本地缓存接口指定的key中,接口执行后会覆盖原来key对应的内容。其参数如表所示。

示例代码如下:yy

wx.setStorage({
Key:'name',
data:'sdy',
success:function(res){
console.log(res)
}
})

 运行结果:

2. wx. setStorageSync(key, data)
wx. setStorageSync(key, data示例代码如下:)是同步接口,其参数只有key和data。 

wx.getStorageSync('age','25')

获取数据

1. wx. getStorage(Object)
wx. getStorage(Object)接口是从本地缓存中异步获取指定key对应的内容。其相关参数如表6-20所示。

示例代码如下:

wx.getstorage({ key:'name',
success:function(res){ 
console.log(res.data)
},
})

2. wx. getStorageSync(key)
wx. getStorageSync(key)从本地缓存中同步获取指定key对应的内容。其参数只有key。
示例代码如下:

try{
var value = wx.getstorageSync('age')
 if(value){
console.log("获取成功"+value)
} 
catch(e){
console.log("获取失败")
}

运行效果:

 删除数据

1. wx. removeStorage(Object)
wx. removeStorage(Object)接口用于从本地缓存中异步移除指定key。其相关参数如表6-21所示。

示例代码如下:  

wx.removeStorage({
 key:'name',
success:function(res){ console.log("删除成功")
},
fail:function(){
console.log("删除失败")
}
 
})

运行结果:

2. wx. removeStorageSync(key)
wx. removeStorageSync(key)接口用于从本地缓存中同步删除指定key对应的内容。其参数只有key。
示例代码如下:

try {
wx.removeStorageSync('name')
} catch(e){
//Do something when catch error
}

清空数据

1. wx. clearStorage()
wx. clearStorage()接口用于异步清理本地数据缓存,没有参数。

示例代码如下:、

wx.getStorage({
key:'name',
success:function(res){
wx.clearStorage()
},
})

2.wx.clearStroageSync()

wx.clearStroageSync()接口用于同步清理本地数据缓存。

示例代码如下:

try{
wx.clearStorageSync()
}catch(e){
}

位置信息API

小程序可以通过位置信息API来获取或显示本地位置信息,小程序支持WGS84和GCj02标准,WGS84标准为地球坐标系,是国际上通用的坐标系;GCj02标准是中国国家测绘局制定的地理信息系统的坐标系统,是由WGS84坐标系经加密后的坐标系,又称为火星坐标系。默认为WGS84标准,若要查看位置需要使用GCj02标准。主要包括以下3个API接口:
■ wx.getLocation(Object)接口用于获取位置信息。
■ wx.chooseLocation(Object)接口 用于选择位置信息。
■ wx.openLocation(Object)接口用于通过地图显示位置。

获取位置信息

wx. getLocation(Object)接口用于获取当前用户的地理位置、速度,需要用户开启定位功能,当用户离开小程序后,无法获取当前的地理位置及速度,当用户点击“显示在聊天顶部”时,可以获取到定位信息。

 返回的参数:

{
  
  "requiredPrivateInfos": ["getLocation","chooseLocation","chooseAddress"],
  "pages": [
    "pages/gh/gh",
    "pages/index/index",
    "pages/logs/logs"
  ],
  "window": {
    "navigationBarTextStyle": "black",
    "navigationBarTitleText": "Weixin",
    "navigationBarBackgroundColor": "#ffffff"
  },
  "style": "v2",
  "componentFramework": "glass-easel",
  "lazyCodeLoading": "requiredComponents",
  
  "permission": {
    "scope.userLocation": {
      "desc": "你的位置信息将用于小程序位置接口的效果展"
    }
  }
}

index.wxml代码:

<view style="margin-top: 12px;">
<button type="primary" bindtap="getLocation"></button>
</view>
<view style="margin-top: 12px;">
<button type="primary" bindtap="chooseLocation"></button>
</view>

index.js代码:

const app = getApp()
Page({
  data: {
    
  },
  getLocation:function(){
   
wx.getLocation({
success: function (res) {
 
    
      type:'wgs84',
     
        console.log("进度:"+res.longitude);
        console.log("纬度:"+res.latitude);
        console.log("速度:"+res.longitude);
        console.log("位置的精确度:"+res.accuracy);
        console.log("水平精确度:"+res.horizontalAccuracy);
        console.log("垂直精确度:"+res.verticalAccuracy);
      }
      
    })
  },
  chooseLocation:function(){
    wx.chooseLocation({
      success:function(res){
        console.log("位置的名称:"+res.name)
        console.log("位置的地址"+res.address)
        console.log("位置的经度"+res.address)
        console.log("位置的纬度"+res.address)
      }
    })
  }
})

运行结果:

点击第一个运行效果图

第二个运行图 :

选择位置信息 

wx. chooseLocation(Object)接口用于在打开的地图中选择位置,用户选择位置后可返回当前位置的名称、地址、经纬度信息。wx. chooseLocation(Object)调用成功后

示例代码如下: 

wx.getLocation({
  type:'gcj02',//返回可以用于wx.openLocation的经纬度
  success:function(res){
  var latitude = res.latitude 
  var longitude= res.longitude
  wx.openLocation({
  latitude: latitude, 
  longitude:longitude, 
  scale:10,
  name:'智慧国际酒店',
  address:'西安市长安区西长安区300号'})
}
})

设备相关API

设备相关的接口用于获取设备相关信息,主要包括系统信息、网络状态、拨打电话及扫码等。主要包括以下5个接口API:
■ wx.getSystemInfo(Object)接口、wx.getSystemInfoSync()接口 用于获取系统信息。
■ wx.getNetworkType(Object)接口 用于获取网络类型。
■ wx.onNetworkStatusChange(CallBack)接口 用于监测网络状态改变。
■ wx.makePhoneCall(Object)接口 用于拨打电话。

■ wx.scanCode(Object)接口 用于扫描二维码

获取系统信息

wx. getSystemInfo(Object)接口、wx. getSystemInfoSync()接口分别用于异步和同步获取系统信息。

wx. getSystemInfo()接口或wx.getSystemInfoSync()接口调用成功后,返回系统相关信息示例代码如下:

wx.getSystemInfo({
  success:function(res){
  console.log("手机型号:"+res.model)
  console.log("设备像素比:"+res.pixelRatio)
   console.log("窗口的宽度:"+ res.windowWidth) 
  console.log("窗口的高度:"+res.windowHeight) 
  console.log("微信的版本号:"+res.version) 
  console.log("操作系统版本:"+ res.system) 
  console.log("客户端平台:"+res.platform)},})

运行结果:

网络状态

1.获取网络状态
wx. getNetworkType(Object)用于获取网络类型如果wx. getNetworkType()接口被成功调用,则返回网络类型包,有wifi、2G、3G、4G、unknown(Android下不常见的网络类型)、none(无网络)。
示例代码如下:

wx.getNetworkType({
  success:function(res){
  console.log(res.networkType)},})

2.监听网络状态变化

wx. onNetworkStatusChange(CallBack)接口用于监听网络状态变化,当网络状态变化时,返回当前网络状态类型及是否有网络连接。
示例代码如下:

wx.onNetworkStatusChange(function(res){
  console.log("网络是否连接:"+res.isConnected) 
  console.log("变化后的网络类型"+res.networkType)})

拨打电话

wx. makePhoneCall(Object)接口用于实现调用手机拨打电话。
                   示例代码如下:

wx.makePhoneCall({
phoneNumber:'18092585093'//需要拨打的电话号码
})

扫描二维码

wx. scanCode(Object)接口用于调起客户端扫码界面,扫码成功后返回相应的内容

//允许从相机和相册扫码
 wx.scanCode({
  success:(res) =>{
  console.log(res.result) 
  console.log(res.scanType) 
  console.log(res.charSet) 
  console.log(res.path)
  }
  })
  
  //只允许从相机扫码
   wx.scanCode({
  onlyFromCamera:true,
   success:(res) =>{ 
     console.log(res)
   }
  })

运行结果:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值