微信小程序之原生API(下)
第65篇 极客时间《9小时搞定微信小程序开发》第五课:原生API。 小程序API最后一部分,课程中没有详细去讲,因为当时开放的API还没有现在这么多,而且这部分API偏于后台控制,大多是后期逐步新增的。 wx.getUpdateManager 获取 全局唯一 的版本更新管理器,用于管理小程序更新 UpdateManager对象用来管理更新,有强制小程序重启并使用新版本、监听小程序版本更新事件等方法。 一些异步处理的任务,可以放置于 Worker 中运行,待运行结束后,再把结果返回到小程序主线程。Worker 运行于一个单独的全局上下文与线程中,不能直接调用主线程的方法。 Worker 最大并发数量限制为 1 个,创建下一个前需要结束当前 Worker;Worker 与主线程之间的数据传输,双方使用 Worker.postMessage()来发送数据,Worker.onMessage()来接收数据,传输的数据并不是直接共享,而是被复制的。 wx.reportMonitor,自定义业务数据监控上报接口,最多可以创建128个监控事件 监听或取消监听小程序切换前后台、错误事件 wx.canIUse:判断小程序的API,回调,参数,组件等是否在当前版本可用 绘图相关的API,主要是对CanvasContent对象的使用,实现各种颜色、线条、内容填充的控制 可以用以下几种方式来表示 canvas 中使用的颜色: RGB 颜色: 如 'rgb(255, 0, 0)' RGBA 颜色:如 'rgba(255, 0, 0, 0.3)' 16 进制颜色: 如 '#FF0000' 预定义的颜色: 如 'red' 其中预定义颜色有148个: 自定义颜色 调试开关和日志管理器的API,console可以向调试面板打印debug\error\info\log\warn共5类日志,logmanager最多保存5M的日志内容,超过5M后,旧的日志内容会被删除。 获取第三方平台的自定义的数据字段。小程序运营者可以一键授权给第三方平台,通过第三方平台完成业务。 第三方平台有单独的说明,参见: 第三方平台 创建 map 上下文 MapContext 对象,MapContext实现以下功能 对小程序框架中的路由控制进行扩充,实现关闭页面后返回或跳转到其他页面的操作。 对小程序转发功能的控制,就是小程序右上角关闭按钮旁边3个小白点里的『转发』。 获取系统信息,主要包括以下信息: 设定或取消定时器,按照指定周期或在定时到期之后执行注册的回调函数 IntersectionObserver 对象,用于推断某些节点是否可以被用户看见、有多大比例可以被用户看见 SelectorQuery,查询节点信息的对象 小程序开发框架提供的API变得越来越多,通过这些微信原生的API,可以快速方便的调用微信的能力,比如文件的控制、图片视频的控制、数据的缓存、微信支付等,从而实现更加复杂多样的业务。
微信小程序能使用海外版的地图开发应用吗
这里贴下主要代码介绍下:
先是wxml文件:
1
标签里的属性API文档里都有介绍,应该没什么好说的了;
可以看到在地图上有标记p,点击需要有提示信息,查了下微信map上面无法在继续添加覆盖物,然后看了API文档有个cover-view,于是就用这个来做了个提示信息:
{{parkingName}}
总车位:{{totalNum}}
剩余车位:{{leftNum}}
123456789101112131415
注意这里是要添加到map标签里面:
加了个if判断,点击地图上的P才显示;
js文件:
初始化data:
//定义全局变量var longitude, latitude, mapCtxvar centerLongitude, centerLatitude, windowWidth, windowHeight /**
* 页面的初始数据
*/
data: {
lon: '',
lat: '',
is_show: false,
parkingName:'',
totalNum:'',
leftNum:'',
markers: [],
controls: []
},12345678910111213141516
首先是获取定位,使用微信小程序API提供的方式:
getloca:function(){
var that = this
var time
wx.getLocation({
type: "wgs84 ",
success: function (res) {
console.log(res.latitude)
console.log(res.longitude)
latitude = res.latitude
longitude = res.longitude
centerLatitude = latitude
centerLongitude = longitude
that.setData({
lat: res.latitude,
lon: res.longitude,
})
},
fail: function (res) {
}
})
},1234567891011121314151617181920212223
在实际测试中,发现有的android机掉用改API就是无法定位,测试过所需要的权限都有,最后尝试了下百度地图,居然发现成功了,一下是百度地图定位(具体可以查看百度地图小程序API)的方式:
//引入百度地图apivar bmap = require('../../libs/bmap-wx.min.js');//百度api定位我的位置
getLocaByBM:function(){
var that = this; var BMap = new bmap.BMapWX({
ak: '你自己申请的ak'
}); var fail = function (data) {
console.log(data)
}; var success = function (data) {
wxMarkerData = data.wxMarkerData;
console.log(wxMarkerData)
centerLatitude = wxMarkerData[0].latitude
centerLongitude = wxMarkerData[0].longitude
that.setData({
markers: wxMarkerData
});
that.setData({
lat: wxMarkerData[0].latitude
});
that.setData({
lon: wxMarkerData[0].longitude
});
} //好像必须要加这个
BMap.regeocoding({
fail: fail,
success: success,
iconPath: '../../image/center.png',
iconTapPath: '../../img/center.png',
width:23,
height:40
});
},12345678910111213141516171819202122232425262728293031323334353637
好吧,这次的测试结果苹果,小米,华为,三星均能正常定位了;希望微信以后能改善这个问题吧。
不过这里需要注意一个问题,小程序是基于腾讯地图(使用火星坐标),百度地图定位出来的坐标需要转换才能正确的标识,文末会贴出转换的代码;
下面是map的操作了,常见的几种添加markers,controls,地图移动时的监听处理;
先介绍地图移动的监听处理:
这里可以结合微信API文档来看会更清晰(文笔不好,写的有些乱),先获取map对象: