微信小程序开发笔记

这篇具有很好参考价值的文章主要介绍了微信小程序开发笔记。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

html

条件渲染

详情参考: https://developers.weixin.qq.com/miniprogram/dev/reference/wxml/conditional.html

<!-- .html 文件 -->
<!-- length 来自 .js 文件中的 data 变量 -->

<view wx:if="{{length > 5}}"> 1 </view>
<view wx:elif="{{length > 2}}"> 2 </view>
<view wx:else> 3 </view>

列表渲染

详情参考: https://developers.weixin.qq.com/miniprogram/dev/reference/wxml/list.html

<!-- .html 文件 -->
<!-- array 是来自 .js 中的 data 数值型变量,里面的元素类型为 Object类型 Object对象类型形式为:{key:value} 键:值 -->
<!-- 使用 wx:for-item 可以指定数组当前元素的变量名,使用 wx:for-index 可以指定数组当前下标的变量名: -->

<view
 wx:for="{{array}}"
 wx:for-index="idx"
 wx:for-item="itemName"
>
	{{idx}}: {{itemName.message}}
</view>

// .js 文件

data: {
  array: [{
    message: 'foo',
  }, {
    message: 'bar'
  }]
}

按钮组件 button

详情参考: https://developers.weixin.qq.com/miniprogram/dev/component/button.html
按钮css样式参考: https://www.runoob.com/css3/css3-buttons.html

<!-- .html 文件 -->
<!-- 设置登录按钮,type=的样式类型,bindtap=绑定按键点击事件的响应函数 -->
<!-- button组件的,详情参考:https://developers.weixin.qq.com/miniprogram/dev/component/button.html -->

<button type='primary' bindtap="signIn">登录</button>

// .js 文件
// 点击事件的响应函数写法

signIn(e) {
    console.log('用户点击登录按钮')
    console.log('打印事件e的详情\t---e:\t', e)
  },
  

css

详情参考: https://www.runoob.com/css/css-intro.html

单位 rpx、px、vw、vh、rem

/* 微信小程序中的单位
px:
像素,图片采样的基本单位。
Vw:
视窗宽度,1vw等 于窗口宽度的1%
vh:
视窗高度、1wh等于窗口高度的1%
rem:
规定屏幕宽度为20rem,实际.上是把页面按比例分割达到自适应的效果(把页面宽度分成20份)
rpx:
规定屏幕宽度为750rpx,以此来根据屏幕宽度进行自适应。如在iphone6 上,屏幕宽度为375px,共有750个物理像素,则
750rpx=375px=750物理像素,相当于1rpx=0.5px=1物理像素。 */

定位方法

/* 页面定位
选择器{ position: relative; }
相对定位的特点: (务必记住)
1.它是相对于自己原来的位置来移动的(移动位置的时候参照点是自己原来的位置)。
2.原来在标准流的位置继续占有,后面的盒子仍然以标准流的方式对待它。(不脱标,继续保留原来位置)

选择器{ position: absolute; }
绝对定位的特点: (务必记住)
1.如果没有祖先元素或者祖先元素没有定位,则以浏览器为准定位( Document文档)。
2.如果祖先元素有定位(相对、绝对、固定定位) , 则以最近一级的有定位祖先元素为参考点移动位置。
3.绝对定位不再占有原先的位置。(脱标) */

设置图片为页面的背景

<!-- .html 文件 -->

<view class='background'>
	<!-- 添加背景图片 -->
	<image src='../../images/icon/background.jpg' mode='aspectFill'></image>
	<!-- 添加背景图片的蒙层 -->
	<view></view>
</view>

/* .css 文件 */

/* 背景图片 */
.background>image {
    position: absolute;
    left: 0;
    bottom: 0;
    width: 100%;
    height: 100%;
    z-index: -999;
}

/* 背景图片上层的蒙层 */
.background>view {
    background-color: rgba(255, 255, 255, 0.15);
    position: absolute;
    left: 0;
    bottom: 0;
    width: 100%;
    height: 100%;
    z-index: -900;
}

自定义按钮的图标

<!-- .html 文件 -->

<button
	class="building-btn"
	size="mini"
	bindtap="showBuildingComplex"
>
	<image
		src='...'
		class="building-btn-img"
		mode='aspectFit'
	></image>
</button>

/* .css 文件 */

/* 建筑物图标按钮 */
.building-btn {
  padding: 0;
  /*按钮透明*/
  background-color: transparent;
  /*设置按钮边框*/
  border: none;
  width: 10vw;
  height: 10vh;
}

/* 建筑物图标 */
.building-btn-img {
  width: 10vw;
  height: 10vh;
}

js

全局变量

// app.js
// 全局变量,在每一个文件中都可以用
// 使用时,需要结合先定义var app = getApp(),然后再app.globalData.student引用
    this.globalData = {
      student: {
        _id: '',
        password: ''
      }
    };
    
// 在其他 .js 文件获取全局变量

var app = getApp()
this.setData({
      student: app.globalData.student,
    })
    

底部导航栏 tabBar

详情参考: https://developers.weixin.qq.com/miniprogram/dev/reference/configuration/app.html#tabBar

// 在 app.json 中

"tabBar": {
    "list": [
      {
        "pagePath": "",
        "text": "",
        "iconPath": "",
        "selectedIconPath": ""
      },
      {
        "pagePath": "",
        "text": "",
        "iconPath": "",
        "selectedIconPath": ""
      }
    ]
  },
  

其他

配置config.js

// config.js 文件

module.exports = {
  "appName": "应用",
  "default_scale": 16,
  "buildingComplexNameAndIconPath": [],
}

// 在其他 .js 文件中使用 config.js 的数据

// 加载 config.js 文件
const config = require('../../config.js');

// 使用配置文件中的参数
config.default_scale

带参数跳转页面

详情参考: https://developers.weixin.qq.com/miniprogram/dev/api/route/wx.navigateTo.html

    // .js 文件
    // wx.navigateTo,详情参考:https://developers.weixin.qq.com/miniprogram/dev/api/route/wx.navigateTo.html
    // url传参,详情参考:https://blog.csdn.net/weixin_43970434/article/details/98876750
    // 跳转至当前建筑物详情的界面,传递变量名为 building 的参数,传参时变量必须用字符串
    // 所以可以在当前界面使用 JSON.stringify() 转化为 JSON 字符串,在目的地界面使用 JSON.parse() 转化为 JavaScript 对象
    // JSON.stringify() 方法用于将 JavaScript 值转换为 JSON 字符串
    // JSON.parse() 方法将数据转换为 JavaScript 对象
    
    wx.navigateTo({
      url: '../detailsBuilding/detailsBuilding?building=' + JSON.stringify(building),
    })
  },
  

云数据库的使用

初始化

详情参考: https://developers.weixin.qq.com/miniprogram/dev/wxcloud/guide/database/init.html

// .js 文件
// 调用云数据库 const db=wx.cloud.database()

const db = wx.cloud.database()

查找

详情参考:https://developers.weixin.qq.com/miniprogram/dev/wxcloud/guide/database/read.html
通过调用集合上的 where 方法可以指定查询条件,再调用 get 方法即可只返回满足指定查询条件的记录,

// .js 文件

db.collection('Site').where({ buildingComplexName: this.data.buildingComplexName }).get().then(res => {
      console.log('从云数据库Site数据集中,获得了' + res.data.length + '条数据')
})

地图组件 map

从云数据库中调用经纬度,并且使用 marker 渲染标记点

详情参考:https://developers.weixin.qq.com/miniprogram/dev/component/map.html#marker

<!-- .html 文件 -->

<map
 class="map"
 scale="{{defaultScale}}"
 longitude='{{longitude}}'
 latitude='{{latitude}}'
 show-location="{{true}}"
 markers="{{markers}}"
 polyline="{{polyline_Object}}"
 bindmarkertap="detailsBuilding"
 bindlabeltap="detailsBuilding"
>
    // .js 文件
    // 调取云数据库中的Site数据集,
    // 查询属性buildingComplexName的值为this.data.building的数据
    
    db.collection('Site').where({ buildingComplexName: this.data.buildingComplexName }).get().then(res => {
      console.log('从云数据库Site数据集中,获得了' + res.data.length + '条数据')

      // 将云数据库中的相关数据值转换为可用合法的markers值
      // 标记点用于在地图上显示标记的位置,详情参考:https://developers.weixin.qq.com/miniprogram/dev/component/map.html#marker
      for (let i = 0; i < res.data.length; i++) {
        let markObj = {
          id: i,                            // 当前标记点的编号
          latitude: res.data[i].latitude,   // 当前标记点的维度
          longitude: res.data[i].longitude, // 当前标记点的经度
          iconPath: markersIconPath,        // 当前标记点的图标路径
          width: config.iconHeight,         // 当前标记点的图标的宽
          height: config.iconWidth,         // 当前标记点的图标的宽
          zIndex: i + 1,                    // 当前标记点的图标图层
          // 当前标记点的标签显示
          label: {
            content: res.data[i].buildingName,   // 当前标记点的标签文字
            color: config.iconLabelColor,
            fontSize: config.iconLabelFontSize,
            anchorX: config.iconLabelAnchorX,
            anchorY: config.iconLabelAnchorY,
            borderWidth: config.iconLabelBorderWidth,
            borderColor: config.iconLabelBorderColor,
            borderRadius: config.iconLabelBorderRadius,
            bgColor: config.themeColors,
            padding: config.iconLabelPadding,
          }
        }

        // 将当前的标记点带加入标记点集合中
        this.data.markers.push(markObj)
      }

      // 更新当前的标记点集合,相当于刷新显示
      // 并且将获取到的建筑物群信息赋值给this.data.buildingComplex
      this.setData({
        markers: this.data.markers,
        buildingComplex: res.data
      })
      console.log("当前获取的标记点详情为:\t---this.data.markers:\t\t\t", this.data.markers, "\n")
      console.log("当前获取的建筑群详情为:\t---this.data.buildingComplex:\t", this.data.buildingComplex, "\n")
    })

实时监控用户位置变化

详情参考: https://developers.weixin.qq.com/miniprogram/dev/api/location/wx.startLocationUpdate.html

    // .js 文件
    // wx.startLocationUpdate,开启小程序进入前台时接收位置消息。详情参考:https://developers.weixin.qq.com/miniprogram/dev/api/location/wx.startLocationUpdate.html
    // 注意,需要在 app.json 中配置 "requiredPrivateInfos": ["startLocationUpdate"]
    
    wx.startLocationUpdate({
      success: (res) => {
        type: 'gcj02',
          // wx.onLocationChange,监听实时地理位置变化事件。详情参考:https://developers.weixin.qq.com/miniprogram/dev/api/location/wx.onLocationChange.html
          // 需要配合,移除实时地理位置变化事件的监听函数wx.offLocationChange使用——【 wx.offLocationChange(this.data.locationChangeFn)】。详情参考:https://developers.weixin.qq.com/miniprogram/dev/api/location/wx.offLocationChange.html
          // 注意,需要在 app.json 中配置 "requiredPrivateInfos": ["onLocationChange"]
          wx.onLocationChange(this.data.locationChangeFn)
        console.log('开启小程序进入前台时接收位置消息函数wx.startLocationUpdate的返回值\t---res:\t', res)
      },
      fail: (err) => {
        // 重新获取位置权限
        wx.openSetting({
          success(res) {
            res.authSetting = {
              "scope.userLocation": true
            }
          }
        })
        reject(err)
      }
    })
    

调用腾讯位置服务微信小程序 JavaScript SDK 实现实时路线规划

详情参考: https://lbs.qq.com/miniProgram/jsSdk/jsSdkGuide/methodDirection文章来源地址https://www.toymoban.com/news/detail-485767.html

  1. 申请开发者密钥(key):申请密钥
  2. 开通webserviceAPI服务:控制台 ->应用管理 -> 我的应用 ->添加key-> 勾选WebServiceAPI -> 保存
    (小程序SDK需要用到webserviceAPI的部分服务,所以使用该功能的KEY需要具备相应的权限)
  3. 下载微信小程序JavaScriptSDK,微信小程序JavaScriptSDK v1.1 JavaScriptSDK v1.2
  4. 安全域名设置,在小程序管理后台 -> 开发 -> 开发管理 -> 开发设置 -> “服务器域名” 中设置request合法域名,添加https://apis.map.qq.com
  5. 小程序示例
    微信小程序开发笔记
<!-- .html 文件 -->

<map
 class="map"
 scale="{{defaultScale}}"
 longitude='{{longitude}}'
 latitude='{{latitude}}'
 show-location="{{true}}"
 markers="{{markers}}"
 polyline="{{polyline_Object}}"
>
    // .js 文件
    // 位置改变时,执行当前函数,wx.onLocationChange(function listener)的示例代码,详情参考:https://developers.weixin.qq.com/miniprogram/dev/api/location/wx.onLocationChange.html#%E7%A4%BA%E4%BE%8B%E4%BB%A3%E7%A0%81
    
    this.data.locationChangeFn = function (res) {
      console.log('位置开始改变,获取\t---res:\t', res)

      // 实时更新用户当前的位置,也是路线的开始位置,即start_address
      // 同时将用户当前的位置设置为地图的中心位置
      that.setData({
        latitude: res.latitude,
        longitude: res.longitude,
        default: 20,
        start_address: {
          longitude: res.longitude,
          latitude: res.latitude
        }
      })

      console.log('获取起始位置为\t---that.data.start_address:\t', that.data.start_address)
      console.log('获取终点位置为\t---that.data.end_address:\t', that.data.end_address)


      // 使用腾讯位置服务,调用距离计算接口
      // 详情参考:https://lbs.qq.com/service/webService/webServiceGuide/webServiceRoute#3 
      // 以及以下网页,特别是其中的‘Javascript 关键代码片段(驾车、步行、骑行路线规划):’:https://lbs.qq.com/miniProgram/jsSdk/jsSdkGuide/methodDirection
      qqmapsdk.direction({
        // 路线规划选择
        mode: 'walking',
        // 起始位置坐标,采用Object格式
        from: {
          latitude: that.data.start_address.latitude,
          longitude: that.data.start_address.longitude
        },
        // 终点位置坐标,采用Object格式
        to: {
          latitude: that.data.start_address.latitude,
          longitude: that.data.end_address.longitude
        },
        // // 用于测试的几组数据,不用看
        // from: {
        //   latitude: 29.9781013308885,
        //   longitude: 103.000237941741
        // },
        // to: {
        //   latitude: 29.9774832826657,
        //   longitude: 102.993076443672
        // },

        success: function (res) {
        
          console.log('\n开始规划路线');

          console.log('调用距离计算接口qqmapsdk.direction的返回值\t---res:\t', res);

          // res.status状态码,正常为0
          if (res.status == 0) {

            // 解压路线坐标点串
            let coors = res.result.routes[0].polyline;
            for (let i = 2; i < coors.length; i++) {
              coors[i] = coors[i - 2] + coors[i] / 1000000
            }
            console.log('路线坐标点串解压完毕!路线坐标点串解压结果如下:\c---oors:', coors)

            // 将解压后的坐标点串进行拼接成polyline想要的样子
            var coors_new = []
            for (var j = 0; j < coors.length; j++) {
              coors_new.push({
                latitude: parseFloat(coors[j]),
                longitude: parseFloat(coors[j + 1])
              })
              j++;
            }

            // 更新路线
            that.setData({
              polyline_Object: [{
                points: coors_new,
                color: "#3FB837",
                width: 5,
                dottedLine: false
              }]
            })
          }

          console.log('当前的路线为:\t---that.polyline_Object:\t', that.data.polyline_Object);
        },
        fail: function (res) {
          console.log('调用路线规划函数失败\t---res:\t', res);
        },
        complete: function (res) {
          console.log('调用路线规划函数结束\t---res:\t', res);
        }
      });

    }
    

到了这里,关于微信小程序开发笔记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信小程序开发之微信小程序交互

    目录 一、小程序交互 前端: 1、先在登陆界面中编写代码 2、在前端中编写js代码 后端:           1、先导入依赖:           2、定义好配置文件           3、编写好实体类           4、将帮助类进行配置           5、编写mapper类           6、定义service层以及对应的

    2024年02月09日
    浏览(59)
  • 微信小程序 -- 小程序开发能力与拓展

    1. 获取用户头像 当小程序需要让用户完善个人资料时,我们可以通过微信提供的头像、昵称填写能力快速完善。如图: 想使用微信提供的头像填写能力,需要两步: 将 button 组件 open-type 的值设置为 chooseAvatar 当用户选择需要使用的头像之后,可以通过 bindchooseavatar 事件回调

    2024年04月15日
    浏览(64)
  • 微信小程序开发教程(二)--上传小程序

    接上文,我们已经有一个小例子了。 在模拟器的位置,点击头像,会登录。 此时我们可以第一次尝试将我们的小程序进行上传。 点击下图箭头所指位置: 点击确定: 填写版本号和备注信息,选择上传: 在网页管理小程序上,选择上传,以下都选择红框所在位置: 填写相关

    2023年04月25日
    浏览(42)
  • 微信小程序开发---小程序的页面配置

    目录 一、小程序页面配置的作用 二、页面配置和全局配置的关系 三、页面配置中常用的配置项 在每个小程序中,每个页面都有自己的.json配置文件,用来对当前页面的窗口外观,页面效果进行配置。 小程序中,app.json中的windows节点,可以全局配置小程序中每个页面的窗口表

    2024年02月09日
    浏览(48)
  • python做微信小程序开发,python怎么开发小程序

    大家好,小编来为大家解答以下问题,python做微信小程序开发,python怎么开发小程序,今天让我们一起来看看吧! 大家好,小编为大家解答用python编写一个小程序的问题。很多人还不知道如何用python做小软件,现在让我们一起来看看吧! 大家好,小编来为大家解答以下问题

    2024年03月12日
    浏览(67)
  • 【微信小程序开发零基础入门】——微信小程序入门

    学习小程序跟学习网页开发有什么不同 1.如何创建微信小程序项目 1.1 注册、登录、复制appId 注册:在 https://mp.weixin.qq.com/cgi-bin/wx 进行注册微信小程序开发账号 登录:在 https://mp.weixin.qq.com 登录小程序账号 复制appId: 在 \\\"开发\\\" 的 \\\"开发管理\\\" 的 \\\"开发设置\\\" 的 \\\"开发者ID\\\"中 1.2 下

    2024年02月03日
    浏览(62)
  • 【微信小程序开发】第 1 节 - 小程序简介

             欢迎来到博主 Apeiron 的博客,祝您旅程愉快 ! 时止则止,时行则行。动静不失其时,其道光明。 目录 1、缘起 2、小程序与普通网页开发的区别 3、API 简介 4、总结         在日常生活中,我们几乎每天都在使用微信小程序,那么,这个微信小程序到底是怎么

    2024年02月07日
    浏览(47)
  • 【微信小程序开发】微信小程序集成腾讯位置项目配置

    腾讯位置服务官网 当然没账号的要先注册一个账号 在我的应用里创建一个新的应用,印象中需要小程序ID,去微信开发者工具里面找到自己的小程序ID填入即可 添加 key 中勾选勾选 WebServiceAPI 从官网里下载,我这里下载的是 v1.2 打开微信开发者工具 在查找小程序ID的地方下滑

    2024年02月02日
    浏览(62)
  • 微信小程序开发15 项目实战 基于云开发开发一个在线商城小程序

    在学完前 4 个模块之后,我相信你会对微信小程序的开发有一个全新的认识。在前面 3 个模块中,俊鹏分别从微信小程序内在的运行原理,小程序工程化开发以及具体实践层面,深度讲解了微信小程序开发所必要的知识和能力。而第 4 个模块里,我带你认识了微信小程序的云

    2024年02月11日
    浏览(57)
  • 【小程序】零基础微信小程序开发+实战项目

    如何拥有一款属于你自己的小程序,惊喜就在下面! 目前,小程序行业已经成为互联网营销的热门黑马之一,依托于各大流量平台,小程序行业具有天然的用户基础和得天独厚的资源优势,凭借其方便快捷的操作以及简单通俗的模式,仅短短一年的时间,就迎来了爆发性的增

    2024年02月11日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包