1、先获取用户是否授权地理定位,如果没有让其跳转到设置页面手动开启(获取到的位置是经纬度,需要借助其他地图SDK的地址逆解析获取省市区的名字)

getSetting() {
wx.getSetting({
success: (res) => {
if (res.authSetting['scope.userLocation'] == false) {//如果没有授权地理位置
console.log('没有开启地理定位')
wx.showModal({
title: '温馨提示',
content: '您未开启地理定位权限',
success: () => {
wx.openSetting({
success: (res) => {
console.log(res)
res.authSetting = {//打开授权位置页面,让用户自己开启
"scope.userLocation": true
}
}
})
}
})
} else {
//用户开启授权后可直接获取地理位置
wx.authorize({
scope: 'scope.userLocation',
success: () => {
//获取位置后相关操作
this.getLocation();
}
})
}
},
fail:(error) => {
console.log(error)
}
})
},
 //获取地理位置
getLocation() {
wx.getLocation({
type: 'gcj02', // 默认为 wgs84 返回 gps 坐标,gcj02 返回可用于 wx.openLocation 的坐标
success: (res) => {
console.log(res)
this.setData({
location: res
})
}
})
},

2、城市选择列表

  实现功能:

  • 点击右侧字母区域跳转到对应字母位置 (使用scroll-view的scroll-into-view属性,给他的子元素设置id,scroll-into-view的值即为需要跳转到子元素的id)
  • <scroll-view scroll-y="true" style="height: 100vh" scroll-into-view="{{scrollId}}" scroll-with-animation="true" enable-back-to-top="true">
    <view wx:for="{{ list }}" wx:key="key">
    <view id="{{ item.key }}" data-id="{{ item.key }}" bindtap="selectId">{{ item.value }}</view>
    </view> selectId(e) {
    this.setData({
    scrollId: e.currentTarget.dataset.id
    })
    }
  • 滚动反显右侧字母区,滚动到B,右侧亮起 (获取每一个子元素的top顶部距离,利用scroll-view的bindscroll属性监听滚动事件,判断其scrollTop和每一个元素比较,相近的即可,如果使用点击事件进行第一步,则不滚动监听)
  • <scroll-view bindscroll="{{ isSelected ? 'scroll' : ''}}"></scroll-view>
    scroll(e) {
    console.log(e.detail.scrollTop)
    } // 获取顶部距离和子元素的顶部距离(一定要写in,否则获取到的是null)
    let query = wx.createSelectorQuery().in(this);
    // 获取单个元素
    query.select('.city-letter').boundingClientRect(r => {
    console.log(r.top, r.height)
    }).exec();
    // 获取多个元素,rect是一个数组
    query.selectAll('.city-item').boundingClientRect(rect => {
    console.log(rect) }).exec();
  • 在字母区滑动选择 (使用view的bindtouchstart、catchtouchmove、bindtouchend滑动事件,记录在首字母区域滑动的距离,获取首字母区域的高度和顶部距离,获得数组下标 = (滑动距离-顶部距离) / 区域高度 * 字母数组长度)
  • 因滑动事件和点击事件都放在同一个view上会有冲突,执行顺序是touchstart - touchend - tap,所以点击事件时判断pageY和touchstart的PageY,如果相等就是执行的点击事件,不需要执行滑动事件

 注意:scrolllId、滚动对应的变量、滑动时的变量是分设了三个变量,需要互相清空,注意限制条件

微信小程序地理定位和城市选择列表的更多相关文章

  1. (八)微信小程序---获取定位信息chooseLocation

    微信小程序---获取定位信息  chooseLocation wxml <view bindtap="getlocalPath">{{localPath}}</v ...

  2. 微信小程序 不在以下合法域名列表中,请参考文档:https://mp.weixin.qq.com/debug/wxadoc/dev/api/network-request.html

    微信小程序  不在以下合法域名列表中,请参考文档:https://mp.weixin.qq.com/debug/wxadoc/dev/api/network-request.html 友情提示: 大家 ...

  3. 微信小程序产品定位及功能介绍

    产品定位及功能介绍 微信小程序是一种全新的连接用户与服务的方式,它可以在微信内被便捷地获取和传播,同时具有出色的使用体验. 小程序注册 注册小程序帐号 在微信公众平台官网首页(mp.weixin.qq ...

  4. 微信小程序获取当前所在城市

    本篇文章主要讲解在微信小程序中,如何利用微信自带的api(wx.getLocation())结合百度地图的逆地址解析api来获取当前所在城市名. 实现起来也比较简单,步骤为: 1--利用微信小程序接口 ...

  5. 微信小程序获取经纬度所在城市

    小程序的wx.getLocation()获得是经纬度并不包含地名,所以要通过经纬度用相应的地图转换出地名(本文使用的是百度地图) // 获取坐标 onLoad: function (options)  ...

  6. 微信小程序要求HTTPS,如何选择SSL证书?

    为了保护小程序应用安全,微信官方的需求文档要求,每个微信小程序必须事先设置一个通讯域名,并通过HTTPS请求进行网络通信,不满足条件的域名和协议无法请求.因此开发者应先准备好配置好HTTPS证书的域名 ...

  7. 微信小程序无法定位

    获取定位的时候报:errMsg:getLocation:fail:require permission desc 错 解决办法: 在app.js加入代码 //app.js新增如下代码 config = ...

  8. 微信小程序获取当前地址以及选择地址详解 地点标记

    首先定义事件: bindtap='getLocation' <view class='store-bot' bindtap='getLocation'> <view class='c ...

  9. 微信小程序:从本地相册选择图片或使用相机拍照。

    wx.chooseImage(OBJECT) 从本地相册选择图片或使用相机拍照. OBJECT参数说明: 示例代码: wx.chooseImage({ count: 1, // 默认9 sizeTyp ...

  10. 微信小程序 位置定位position详解,相对定位relative,绝对定位absolute相关问题

    一.位置position[定位属性:static,relative,absolute,fixed,inherit,-ms-page,initial,unset] 1.static:元素框正常生成,块级 ...

随机推荐

  1. openwrt 配置虚拟wan口

    一.刷固件:1.刷入 刷不死,百度上找教程:2.下载固件:https://downloads.openwrt.org/releases/17.01.6/targets/ramips/mt7620/ 按 ...

  2. sql offset 优化

    // let groupSql = ` select id,jd_gcj02ll, wd_gcj02ll from ${tablename_qiye} where id between ${size ...

  3. 华为交换机,改vlan的方法

    telnet 登录1.1.1.111, 如果登录再到其他交换机,需要在用户状态,telnet其他的ip.不能在系统用户状态下跳转登录. sys改为系统用户  状态符由尖括号,改为方括号 display ...

  4. Vim文本编码之坑

    #20220503更新# 今天又遇到一个问题,即常见的"cat显示正常,vi显示异常"的问题. 有这样一个文件,它的编码是UTF-16(DOS),在windows下用UltraEd ...

  5. exe可执行文件反编译成py文件

    记录一下exe文件反编译的问题 准备工作 1. 安装第三方包 uncompyle6 (pip install uncompyle6==3.7.4) 2. 下载pyinstxtractor.py文件 3 ...

  6. JavaScript 基础学习(二)

    JavaScript 基础学习(二) instanceof方法: var s = "hello"; var i = 8; //typeof 只能判断基本数据类型 alert(typ ...

  7. SOJ1711 题解

    题意 给定 \(n\) 个在数轴的区间 \([l_1,r_1],[l_2,r_2],...,[l_n,r_n]\). 定义 \(I(x)\) 为所有包含 \([x,x+1]\) 的区间形成的集合,即 ...

  8. Mysql数据库基础第二章:(五)分组查询

    Mysql数据库基础系列 软件下载地址 提取码:7v7u 数据下载地址 提取码:e6p9 mysql数据库基础第一章:(一)数据库基本概念 mysql数据库基础第一章:(二)mysql环境搭建 mys ...

  9. 钉钉-E应用开发初体验(企业内部应用)

    首先要创建应用,如何创建参考 https://open-doc.dingtalk.com/microapp/bgb96b/gt5d6a 下载 钉钉E应用服务端demo   git clone http ...

  10. hashMap 获取里面value最大的值得key

    public static void main(String[] args) { Map<String, Integer> map = new HashMap(); map.put(&qu ...