原生微信小程序常见 API 使用案例

简介: 原生微信小程序常见 API 使用案例

image.png


关键词:demo collections 微信小程序

demo 源码:gitee.com/huakangkane…


Canvas


canvas 文档

重要:canvas 基础使用

结合 onShareAppMessage 使用demo:

<style>
/* wxss */
.cantSee {
  width: 320px;
  height: 256px;
}
</style>
<!-- wxml -->
<canvas class="cantSee" type="2d" ></canvas>
<button open-type="share">分享</button>
<!-- js -->
<script>
Page({
  data: {
    imgPath: ''
  },
  onShow() {
    this.draw()
  },
  draw() {
    // 获取元素
    wx.createSelectorQuery()
      .select('.cantSee')
      .fields({ node: true, size: true })
      .exec(this.initImagePath.bind(this));
  },
  initImagePath(list) {
    const dpr = wx.getSystemInfoSync().pixelRatio;
    const item = list[0];
    const canvas = item.node;
    const context = canvas.getContext('2d');
    const { width } = item;
    const { height } = item;
    canvas.width = width * dpr;
    canvas.height = height * dpr;
    context.scale(dpr, dpr);
    // 设置背景/方块
    context.fillStyle = 'green';
    context.fillRect(0, 0, width, height);
    // 画圆
    context.fillStyle = 'blue';
    context.beginPath();
    context.arc(550, 300, 400, 0, Math.PI * 10);
    context.strokeStyle = 'rgba(1,1,1,0)';
    context.fill();
    context.stroke();
    // 设置边框
    context.strokeStyle = '#666';
    context.strokeRect(0, 0, width, height);
    // 写字
    context.fillStyle = '#fff';
    context.font = '70px "Fira Sans"';
    context.textAlign = 'center';
    context.fillText('测试', 160, 120);
    // 再写一个
    context.font = '20px "Fira Sans"';
    context.textAlign = 'center';
    context.fillText('测试', 160, 190);
    context.restore();
    const _this = this;
    // 保存为图片
    wx.canvasToTempFilePath({
      x: 0,
      y: 0,
      width,
      height,
      canvas,
      success: (res) => {
        _this.setData({
          imgPath: res.tempFilePath
        })
      },
    });
  },
  // 点击分享
  onShareAppMessage() {
    const { imgPath } = this.data
    return {
      title: `自定义标题`,
      path: `/pages/index/index`,
      imageUrl: imgPath,
      success(res) {
        // 转发成功之后的回调
        if (res.errMsg === 'shareAppMessage:ok') {
          // ...
        }
      },
      fail(res) {
        // 转发失败之后的回调
        if (res.errMsg === 'shareAppMessage:fail cancel') {
          // 用户取消转发
        } else if (res.errMsg === 'shareAppMessage:fail') {
          // 转发失败,其中 detail message 为详细失败信息
        }
      }
    }
  },
})
</script>

效果:


image.png

上传文件/图片


实现上传功能通常可以直接使用 UI 框架自带的上传组件

如果需求比较简单,或者定制化程度比较高。也可以自己简单实现一个:

wx.chooseMedia 选择文件

wx.uploadFile 上传

Page({
  data: {
    imgUrl: null
  },
  // 上传图片
  async toModifyImage() {
    const _this = this;
    try {
      const tempFilePath = await new Promise((resolve, reject) => {
        wx.chooseMedia({
          count: 1,
          mediaType: 'image',
          sizeType: ['compressed'],
          sourceType: ['album', 'camera'],
          success: (res) => {
            const { tempFilePath, size } = res.tempFiles[0];
            if (size <= 10485760) {
              resolve(tempFilePath);
            } else {
              reject({ errMsg: '图片大小超出限制,请重新上传' });
            }
          },
          fail: (err) => reject(err),
        });
      });
      // 上传
      wx.uploadFile({
        url: `/api/uploadFile`, // 上传接口
        filePath: tempFilePath,
        header: { Authorization: wx.getStorageSync('token') },
        name: 'file',
        success({ statusCode, data }) {
          if (statusCode === 200) {
            const result = JSON.parse(data);
            const { imgUrl } = result.data;
            _this.setData({ imgUrl });
          }
        },
      });
    } catch (error) {
      if (error.errMsg === 'chooseImage:fail cancel') return;
      console.log('上传图片报错', error);
    }
  },
})


地图组件/导航


map 地图组件

腾讯位置服务

腾讯位置服务 微信小程序中使用API

wx.chooseLocation

最简单的就是直接把Map组件塞进去,增加功能就添加对应的插件服务,其实没什么难度。按照文档一步步执行就能出效果。下面是基于官方文档写的简单的业务需求:展示位置,点击按钮进行导航。

// app.json
{
  // ...
  "permission": {
    "scope.userLocation": {
      "desc": "你的位置信息将用于小程序定位"
    }
  },
  "requiredPrivateInfos": [
    "chooseLocation",
    "getLocation"
  ],
  "requiredBackgroundModes": [
    "location"
  ],
  "sitemapLocation": "sitemap.json",
  // 微信路线规划插件
  "plugins": {
    "routePlan": {
      "version": "1.0.18",
      "provider": "wx50b5593e81dd937a"
    }
  }
}
<view class="map-wrap">
  <map
    id="mapId"
    class="map"
    subkey="{{subkey}}"
    latitude="{{latitude}}"
    longitude="{{longitude}}"
    bindmarkertap="onMarkerTap"
  ></map>
</view>
<view class="btn-wrap">
  <button bindtap="onAppNav">微信导航(推荐)</button>
  <button bindtap="onPluginNav">小程序导航</button>
</view>
<script>
Page({
  data: {
    latitude: 23.099994,
    longitude: 113.324520,
    // 申请的腾讯位置服务key
    subkey: ''
  },
  // 聚合图层示例代码 https://developers.weixin.qq.com/miniprogram/dev/component/map.html
  // app导航
  onAppNav() {
    const { detail, latitude, longitude } = this.data;
    wx.openLocation({
      name: detail,
      latitude: +latitude,
      longitude: +longitude,
    });
  },
  // 小程序导航
  onPluginNav() {
    const { subkey, detail, latitude, longitude } = this.data;
    const referer = '小程序'; // 调用插件的app的名称
    const endPoint = JSON.stringify({
      //终点
      name: detail,
      latitude: +latitude,
      longitude: +longitude,
    });
    wx.navigateTo({
      url: `plugin://routePlan/index?key=${subkey}&referer=${referer}&endPoint=${endPoint}`,
    });
  },
})
</script>


添加公众号关注


微信提供了在扫二维码的场景下展示的公众号组件<official-account></official-account>, 所以在业务上主要兼容非扫码进入的场景(scene!==1011)。我们可以利用 web-view 组件跳转到关联的公众号上,公众号发布一篇关注的文章,就能解决。注意:需要在开发管理->开发设置->服务器域名 中添加 https://mp.weixin.qq.com

目录
相关文章
|
22天前
|
JSON BI API
商城上货API接口的实战案例
在商城上货过程中,API接口扮演着至关重要的角色。以下是对商城上货API接口的实战分析,涵盖其主要功能、类型、安全性以及实战案例等方面。
|
19天前
|
XML 数据可视化 API
商品详情数据实战案例,API接口系列
淘宝商品详情数据在电商领域具有广泛的应用价值,而淘宝商品详情API接口则为开发者提供了获取这些数据的重要途径。通过合理利用这些接口和数据,可以提升业务效率、优化用户体验,为电商行业的发展注入新的活力。
|
23天前
|
开发框架 小程序 测试技术
排队免单小程序开发模式案例
排队免单小程序通过线上排队系统,为用户提供便捷的免单机会。主要功能包括用户注册与登录、商家入驻与管理、排队系统、通知与提醒、活动记录与查询。技术实现涉及微信小程序原生开发框架、后端技术、API接口和第三方服务。开发过程还包括全面的测试与优化,确保稳定运行和良好体验。最后,通过提交审核、上线运营和推广策略,吸引更多用户和商家入驻。
|
1月前
|
监控 小程序 安全
小程序的 API 做了什么处理,能够做到全局变量的隐藏
【10月更文挑战第23天】小程序的 API 通过运行环境隔离、作用域限制、数据绑定机制、事件机制、状态管理、代码封装和模块化、安全策略和权限控制以及运行时监控和检测等多种手段来实现全局变量的隐藏。这些措施共同作用,确保了小程序的安全、稳定和可靠运行,同时也提高了开发效率和代码质量。
|
2月前
|
人工智能 小程序 搜索推荐
成功案例分享|使用AI运动识别插件+微搭,快速搭建AI美体运动小程序
今天给大家分享一个最近使用我们的“AI运动识别小程序插件”+“微搭”搭建小程序的经典案例。
成功案例分享|使用AI运动识别插件+微搭,快速搭建AI美体运动小程序
|
2月前
|
机器学习/深度学习 人工智能 JSON
微信小程序原生AI运动(动作)检测识别解决方案
近年来,疫情限制了人们的出行,却推动了“AI运动”概念的兴起。AI运动已在运动锻炼、体育教学、线上主题活动等多个场景中广泛应用,受到互联网用户的欢迎。通过AI技术,用户可以在家中进行有效锻炼,学校也能远程监督学生的体育活动,同时,云上健身活动形式多样,适合单位组织。该方案成本低、易于集成和扩展,已成功应用于微信小程序。
|
2月前
|
小程序 JavaScript API
微信小程序开发之:保存图片到手机,使用uni-app 开发小程序;还有微信原生保存图片到手机
这篇文章介绍了如何在uni-app和微信小程序中实现将图片保存到用户手机相册的功能。
684 0
微信小程序开发之:保存图片到手机,使用uni-app 开发小程序;还有微信原生保存图片到手机
|
2月前
|
JavaScript 小程序 前端开发
微信小程序 案例二 飞机大战
微信小程序 案例二 飞机大战
55 0
微信小程序 案例二 飞机大战
|
2月前
|
小程序 搜索推荐 前端开发
短剧小程序开发案例
首先,明确你的短剧平台的目标用户群体和他们的需求。比如,年轻用户可能更倾向于轻松、幽默的短剧内容,而家庭用户则可能更偏爱教育、亲子类的短剧。了解用户需求有助于你设计更符合他们口味的功能和界面
|
2月前
|
人工智能 小程序 Python
Python编程小案例——编一个事件提醒弹窗小程序
Python编程小案例——编一个事件提醒弹窗小程序