当前位置: 主页 > 建站知识 > APP开发

小程序跳转app-微信小程序页面跳转

发布时间:2023-04-16 16:08   浏览次数:次   作者:佚名

示例简介

本文主要介绍项目中常用的一些功能,供大家参考:

1、小程序跳转到其它小程序,并传参和获取参数数据;

2、计算定位位置和目标位置的距离;

3、地图上标记所有位置,并实现点击跳转到导航系统页面。

Tips:为了演示的方便,代码都会尽量缩减,样式随意。

实现过程

一、小程序跳转到其它小程序,并传参和获取参数数据

微信小程序页面跳转_微信小程序带参数跳转_小程序跳转app

1、wxml代码如下:

2、跳转小程序的js代码如下:

appId:要打开的小程序 appId;

path:打开的页面路径,如果为空则打开首页;

extraData:需要传递给目标小程序的数据,目标小程序可在App.onLaunch、App.onShow中获取到这份数据(本文介绍的是在App.onShow获取);

小程序跳转app_微信小程序带参数跳转_微信小程序页面跳转

envVersion:要打开的小程序版本(本文使用'develop')。

// 跳转小程序
  goMiniProgram: function () {
    wx.navigateToMiniProgram({
      appId: '要打开的小程序 appId',
      path: 'pages/index/index',
      extraData: {
        from: 'miniProgram',
        appName: '程序名',
        responseType: 'code'
      },
      envVersion: 'develop',
      success(res) {
        console.log(res)
      }
    })
  }

3、目标小程序获取传参的数据:

// app.js使用下面写法获取extraData的数据
  onShow: function(options) {
    console.log(options)
    if (options.referrerInfo.extraData) {
      this.globalData.extraData = options.referrerInfo.extraData;
    }    
  }

二、计算定位位置和目标位置的距离

1、app.json增加代码,用于授权定位的提示信息(点击“确定”):

微信小程序带参数跳转_微信小程序页面跳转_小程序跳转app

"permission": {
    "scope.userLocation": {
      "desc": "你的位置信息将用于小程序位置接口的效果展示"
    }
  }

微信小程序页面跳转_微信小程序带参数跳转_小程序跳转app

2、wxml代码如下:

跟目标地址距离为:{{distance}}

3、计算距离的js代码如下:

1)计算距离函数,单位km;

小程序跳转app_微信小程序页面跳转_微信小程序带参数跳转

  // 计算距离函数(单位km)
  Rad(d) {
    //根据经纬度判断距离
    return d * Math.PI / 180.0;
  },
  getDistance(lat1, lng1, lat2, lng2) {
    // lat1用户的纬度
    // lng1用户的经度
    // lat2目标的纬度
    // lng2目标的经度
    var radLat1 = this.Rad(lat1);
    var radLat2 = this.Rad(lat2);
    var a = radLat1 - radLat2;
    var b = this.Rad(lng1) - this.Rad(lng2);
    var s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)));
    s = s * 6378.137; // 6378.137为地球半径
    s = Math.round(s * 10000) / 10000;
    s = s.toFixed(2) + 'km'; // 保留两位小数
    return s;
  }
})

2)页面加载时,获取定位坐标并计算距离(latitude2和longitude2为设置的目标坐标);

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    // 获取当前位置
    wx.getLocation({
      type: 'gcj02',
      // altitude: true, // 较高精确度
      success: (res) => {
        console.log('当前位置:', res);
        // 113.418123,22.505415
        let distance = this.getDistance(res.latitude, res.longitude, this.data.latitude2, this.data.longitude2);
        this.setData({
          distance: distance
        });
      }
    })
  }

三、地图上标记所有位置,并实现点击跳转到导航系统页面

1、wxml代码如下(宽高单位使用px小程序跳转app,如用rpx在ipone5屏幕下会导致显示不完全):

小程序跳转app_微信小程序页面跳转_微信小程序带参数跳转

2、js代码如下:

1)data数据设置;

  /**
   * 页面的初始数据
   */
  data: {
    latitude: 22.495393,
    longitude: 113.376004,
    markers: [{
        id: 0,
        latitude: 22.502508,
        longitude: 113.39271,
        iconPath: '../../images/mark_icon.png',
        width: '40',
        height: '40',
      },
      {
        id: 1,
        latitude: 22.489619,
        longitude: 113.391488,
        iconPath: '../../images/mark_icon.png',
        width: '40',
        height: '40',
      },
      {
        id: 2,
        latitude: 22.523008,
        longitude: 113.369713,
        iconPath: '../../images/mark_icon.png',
        width: '40',
        height: '40',
      },
      {
        id: 3,
        latitude: 22.494695,
        longitude: 113.452789,
        iconPath: '../../images/mark_icon.png',
        width: '40',
        height: '40',
      },
      {
        id: 4,
        latitude: 22.535693,
        longitude: 113.379631,
        iconPath: '../../images/mark_icon.png',
        width: '40',
        height: '40',
      },
      {
        id: 5,
        latitude: 22.506448,
        longitude: 113.418437,
        iconPath: '../../images/mark_icon.png',
        width: '40',
        height: '40',
      },
    ],
    addressMes: [{
        name: '孙文纪念公园',
        address: '中山市兴中道'
      },
      {
        name: '金钟湖公园',
        address: '中山市新安路南'
      },
      {
        name: '岐江公园',
        address: '中山一路与西堤路交叉口'
      },
      {
        name: '长江水世界',
        address: '火炬高技术开发区景观路1号'
      },
      {
        name: '逸仙湖公园',
        address: '广东省中山市湖滨路'
      },
      {
        name: '中环广场',
        address: '广东省中山市兴政路1号'
      },
    ],
    mapWidth: '',
    mapHeight: ''
  }

2)页面加载时,计算手机屏幕宽高,并赋值给地图;

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    let sy = wx.getSystemInfoSync(),
      mapWidth = sy.windowWidth,
      mapHeight = sy.windowHeight;
    this.setData({
      mapWidth: mapWidth,
      mapHeight: mapHeight
    })
  }

微信小程序带参数跳转_小程序跳转app_微信小程序页面跳转

3)点击标记点小程序跳转app,跳转到导航系统;

  // 点击标记点
  openOmnirange: function (e) {
    let id = e.markerId;
    wx.openLocation({
      latitude: this.data.markers[id].latitude,
      longitude: this.data.markers[id].longitude,
      name: this.data.addressMes[id].name,
      address: this.data.addressMes[id].address
    })
  }

微信小程序带参数跳转_小程序跳转app_微信小程序页面跳转