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. navicat图形工具和pymysql模块的使用

    一 Navicat 在生产环境中操作MySQL数据库还是推荐使用命令行工具mysql,但在我们自己开发测试时,可以使用可视化工具Navicat,以图形界面的形式操作MySQL数据库 官网下载:http ...

  2. hibernate的校验

    //不使用@valid进行校验Set<ConstraintViolation<CommonValidator>> validates = validator.validateV ...

  3. 【翻译】了解Flink-数据管道和ETL -- Learn Flink - Data Pipelines & ETL

    目录 无状态转换 map() flatmap() keyed 流 keyBy() keys计算 keyed流上的聚合 (Implicit)状态 reduce() 和其他聚合器 有状态的Transfor ...

  4. cublas fp16

    编译选项: nvcc 4.cpp -o test_gemm  -lcudart -lcuda -lcublas -std=c++11 #include <sys/time.h> #incl ...

  5. HTML学习笔记4----更多元素

    随笔记录方便自己和同路人查阅. #------------------------------------------------我是可耻的分割线--------------------------- ...

  6. C语言学习--文件操作--文件流指针--打开文件

    当打开一个文件时, 系统会返回一个结构体, 这个结构体有对此文件操作的所有信息 调用fopen时,系统返回这个结构体的地址 FILE *p = fopen("a.txt") 打开一 ...

  7. KEIL5中C/C++优化等级问题

    知乎上有篇详解   https://zhuanlan.zhihu.com/p/24402180 强烈推荐 C/C++的优化等级会对程序产生 不定性的影响,至于选择哪种优化等级必须从 现有的程序分析才行 ...

  8. PHPStudy设置局域网访问

    PHPStudy是一款轻量级PHP服务器,搭建环境迅速.但是与XAMPP之类服务器不同的是,PHPStudy默认只有本机才能设置域名.访问网站.需要更改vhost.conf中的文件,才可以使得内网可以 ...

  9. 在C++创建动态数组

    计算首行两数相加 #include <iostream>11 #include <vector> using namespace std; int main() { vecto ...

  10. Mysql数据库基础第二章:(七)子查询

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