uniapp使用vue3和ts开发小程序获取用户城市定位

这个组件的功能:可以重新定位获取到用户的具体位置,这个是通过getLocation这个api和高德地图的api获取到的,getLocation这个api需要在微信公众平台后台>开发管理> 接口管理里面申请才能使用的,不然无法使用哦,这个接口申请好像特别难,需要技巧,希望大家都能申请到吧。高德的api需要到高德的后台获取,个人开发者每天有5000限额可以使用。

也可以通过点击右边的字母快速跳转到对应的城市,可以点击热门城市或者城市列表快速定位城市。 

选择城市页面展示: 

具体代码:

<template><view class="main-Location"><!-- 字母区域 --><view class="Location-Letter"><view hover-class="Click-Latter" @tap="getLetter('ScrollTop')">*</view><view v-for="(l, i) in LatterName" :key="i" hover-class="Click-Latter" @tap="getLetter(l)":style="{ 'color': LetterId === l ? '#4662D9' : '#000' }">{{ l }}</view></view><view class="ynq-AutoLocation u_flex jcsb"><view class="ynq-AutoAddress"><text class="ynq ynq-dizhi"></text><text>当前定位:</text><text>{{ userStore.province }}</text></view><view class="ynq-ReLocation u_flex" @click="getLocationAuth"><u-icon name="reload" color="#000"></u-icon><text class="ml5">重新定位</text></view></view><scroll-view scroll-y="true" class="ynq-ScrollView" :scroll-into-view="LetterId"><!-- 热门城市 --><view class="ynq-HotCity" id="ScrollTop"><view class="ynq-HotCityTitle"><text class="ynq ynq-fire"></text><text>热门城市</text></view><view class="ynq-HotCityList flex"><text class="radius-3" @tap="setProvince(item)" v-for="(item, index) in HotCity" :key="index">{{ item }}</text></view></view><!-- 城市列表 --><view class="ynq-CityList"><block v-for="(item, index) in cityList" :key="index"><view class="ynq-CityLetter" :id="item.initial">{{ item.initial }}</view><view class="ynq-CityLine"><text @tap="setProvince(item_city.name)" v-for="(item_city, name_index) in item.list" :key="name_index">{{item_city.name }}</text></view></block></view></scroll-view></view>
</template><script setup lang="ts">
import { ref } from 'vue'
import cityList from './city'
import useUserStore from '@/store/user';// 这里我使用了pinia来进行状态管理
const userStore = useUserStore();let CityName = ref('北京')
const HotCity = ['北京', '深圳', '上海', '成都', '广州', '广东']
const LatterName = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S','T', 'U', 'V', 'W', 'X', 'Y', 'Z'
]
let LetterId = ref("")// 右侧字母跳转到对应的城市
const getLetter = (name) => {LetterId.value = nameconsole.log("点击名字", name);uni.pageScrollTo({selector: '#' + name,duration: 300})
}// 点击城市名字存储
const setProvince = (Name) => {userStore.setUser("province", Name)CityName.value = Name//跳转返回uni.navigateBack()
}// 根据API获取用户位置
const getLocationAuth = () => {// uni.chooseuni.getSystemInfo({success(res) {console.log('getSystemInfo', res);let locationEnabled = res.locationEnabled; //判断手机定位服务是否开启let locationAuthorized = res.locationAuthorized; //判断定位服务是否允许微信授权if (locationEnabled == false || locationAuthorized == false) {//手机定位服务(GPS)未授权console.log('手机定位服务');uni.showModal({title: '提示',content: '请打开定位服务功能',showCancel: false, // 不显示取消按钮success: (res) => {console.log('showModalres', res);}})} else {console.log('uni.authorize');uni.getLocation({geocode: true, // 返回城市信息success: function (loction) {console.log("getLocation", loction);uni.request({url: 'https://restapi.amap.com/v3/geocode/regeo',method: 'GET',data: {key: '高德地图的key',location: loction.longitude + ',' + loction.latitude},success: (resda: any) => {console.log("resda", resda)const { province, district } = resda.data.regeocode.addressComponentCityName.value = provinceuserStore.setUser("province", province)uni.navigateBack()}})}})}}})
}</script><style lang="scss" scoped>
.main-Location {height: 100vh;
}.ynq-AutoLocation {width: calc(100% - 40rpx);background: rgba(250, 250, 250, .5);padding: 20rpx 20rpx;text.ynq {font-size: 32rpx;margin-right: 10rpx;}text {font-size: 30rpx;}
}.ynq-HotCity {padding: 20rpx;
}.ynq-HotCityTitle {padding: 0rpx 0rpx;text.ynq {margin-right: 10rpx;color: #ff0000;font-size: 32rpx;}text {font-size: 30rpx;}
}.ynq-HotCityList {padding: 20rpx 0 0 0;flex-wrap: wrap !important;text {width: 190rpx;display: inline-block;text-align: center;background: rgba(200, 200, 200, .2);font-size: 26rpx;margin: 10rpx;padding: 20rpx 10rpx;}
}.Location-Letter {position: fixed;right: 5rpx;top: 180rpx;width: 30rpx;z-index: 100;view {display: block;width: 30rpx;text-align: center;height: 35rpx;line-height: 35rpx;font-size: 22rpx;transition: ease .3s;-webkit-transition: ease .3s;}
}.ynq-CityList {padding: 0px 40rpx 0 20rpx;.ynq-CityLetter {line-height: 30rpx;height: 40rpx;font-size: 24rpx;border-bottom: 1px solid #f7f7f7;padding-left: 10rpx;color: #909090;}.ynq-CityLine {margin: 20rpx 0px;text {display: block;line-height: 60rpx;padding: 0px 10rpx;font-size: 30rpx;color: #767676;&:nth-child(even) {background-color: rgba(200, 200, 200, .12);}}}
}.ynq-ScrollView {height: calc(100vh - 160rpx);
}.Click-Latter {font-size: 30rpx !important;
}.jcsb {justify-content: space-between;
}.u_flex {display: flex;align-items: center;
}
</style>

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/178993.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

大数据存储技术期中考点梳理

1.CAP理论 分布式系统的CAP理论: 首先将分布式系统中的三个特性进行如下归纳: 口(一致性(C):在分布式系统中的所有数据备份&#xff0c;在同一时刻是否有同样的值。(等于所有节点访问同一份最新的数据副本) 口可用性(A):在集群中一部分节点故障后&#xff0c;集群整体是否还能…

kafka开发环境搭建

文章目录 1 安装java环境1.1 下载linux下的安装包1.2 解压缩安装包1.3 解压后的文件移到/usr/lib目录下1.4 配置java环境变量 2 kafka的安装部署2.1 下载安装kafka2.2 配置和启动zookeeper2.3 启动和停止kafka 1 安装java环境 1.1 下载linux下的安装包 &#xff08;1&#xf…

【经验总结】网络关闭但ECU没有休眠前如何网络唤醒

目录 前言 正文 1.网络休眠时的相关系统状态 2.网络休眠后重新唤醒网络需要做的准备工作

组合模式 (Composite Pattern)

定义&#xff1a; 组合模式&#xff08;Composite Pattern&#xff09;是一种结构型设计模式&#xff0c;用于将对象组合成树形结构以表示部分-整体的层次关系。这种模式创建了一种包含单个对象和组合对象的统一接口&#xff0c;使得客户端可以以统一的方式处理单个对象和组合…

刷题记录第三十五天-(KMP算法)找出字符串中的第一个匹配项的下标

KMP算法真是刷一次忘一次 #include<bits\stdc.h> using namespace std; void get_next(vector<int>& next, string s){int j0;next[0]0;for(int i1;i<s.size();i){while(j>0&&s[i]!s[j]){jnext[j-1];}if(s[i]s[j])j;next[i]j;} } int find(strin…

第19章JAVA绘图

19.1JAVA绘图类 绘图是高级程序设计中非常重要的技术 19.1.1Graphics类 Graphics类是所有图形上下文的抽象基类&#xff0c;它允许应用程序在组件以及闭屏图片上进行绘制 Graphics类封装了JAVA支持的基本绘图操作所需的状态信息&#xff0c;主要包括颜色&#xff0c;字体&…

快速了解Spring AOP的概念及使用

文章目录 1. AOP概念1.1 什么是AOP&#xff1f;1.2 什么是Spring AOP&#xff1f; 2. Spring AOP的使用2.1 引入Spring AOP依赖2.2 编写AOP程序 3. Spring AOP详解3.1 Spring AOP核心概念1. 切点&#xff08;Pointcut&#xff09;2. 连接点&#xff08;Join Point&#xff09;3…

AI模型推理(5)——实战篇(持续更新)

前言 本文主要通过实战的方式&#xff0c;记录各种模型推理的方法 模型训练 首先我们先使用Pytorch训练一个最简单的十分类神经网络&#xff0c;如下&#xff1a; import torch from torch import nn from torch.utils.data import DataLoader from torchvision import data…

如何运用AppLink平台中的数据连接器组件

AppLink平台组件组成 AppLink平台组件分成三个板块触发事件组件、基础组件和数据连接器 数据连接器组件里面有10个组件&#xff0c;目前也在不断新增更多的数据连接器&#xff0c;那他们在AppLink平台里的原理、触发动作以及怎么使用呢&#xff1f;接下来用MySQL和TimescaleD…

在线陪诊系统: 医疗科技的崭新前沿

在医学科技的快速发展中&#xff0c;在线陪诊系统正成为医疗服务领域的创新力量。通过结合互联网和先进的远程技术&#xff0c;这一系统为患者和医生提供了更为便捷、高效的医疗体验。本文将深入探讨在线陪诊系统的技术背后的核心代码和实现原理。 技术背后的关键代码 在线陪…

用于图像分类任务的经典神经网络综述

&#x1f380;个人主页&#xff1a; https://zhangxiaoshu.blog.csdn.net &#x1f4e2;欢迎大家&#xff1a;关注&#x1f50d;点赞&#x1f44d;评论&#x1f4dd;收藏⭐️&#xff0c;如有错误敬请指正! &#x1f495;未来很长&#xff0c;值得我们全力奔赴更美好的生活&…

autojs-图片篇(一)

注释很详细&#xff0c;直接上代码 自动点击授予权限的操作 //安卓版本高于Android 9 if(device.sdkInt>28){//等待截屏权限申请并同意threads.start(function () {packageName(com.android.systemui).text(立即开始).waitFor();text(立即开始).click();}); }截图查相应位置…

开关电源做“做安规”请记住这 4 点!

1.定义 为了保证人身安全,财产,环境等不受伤害和损失,所做出的规定。 2.安规所涉及的要求 a.电击 b.火灾 c.电磁辐射 d.环境污染 e.化学辐射 f.能量冲击 g.化学腐蚀 h.机械伤害和热伤害 3.世界主要安规体系 a.IEC体系----以欧盟为代表 b.UL体系----以美国为代表…

55.跳跃游戏

原题链接&#xff1a;55.跳跃游戏 思路&#xff1a; 看代码注释 全代码&#xff1a; class Solution { public:bool canJump(vector<int>& nums) {int cover 0;if (nums.size() 1) return true; // 只有一个元素&#xff0c;就是能达到for (int i 0; i < co…

探索性因子分析流程

探索性因子分析的步骤&#xff1a; 接下来&#xff0c;通过一个案例演示因子分析&#xff08;探索性因子分析&#xff09;的各个步骤应该如何进行。 案例&#xff1a;欲探究我国不同省份铁路运输能力情况&#xff0c;收集到部分相关数据如下&#xff1a; 上传数据至SPSSAU系统…

echarts 水波图

echarts 水波图 安装 npm install echarts --save npm install echarts-liquidfill --save引入 import * as echarts from echarts; import echarts-liquidfill;html <div id"chart1" ref"chart1" class"chart1"></div>css .cha…

leetcode做题笔记1670. 设计前中后队列

请你设计一个队列&#xff0c;支持在前&#xff0c;中&#xff0c;后三个位置的 push 和 pop 操作。 请你完成 FrontMiddleBack 类&#xff1a; FrontMiddleBack() 初始化队列。void pushFront(int val) 将 val 添加到队列的 最前面 。void pushMiddle(int val) 将 val 添加到…

RequestContextHolder 类简介

RequestContextHolder 类简介 RequestContextHolder是Spring Framework中的一个类&#xff0c;用于在多线程环境中存储和访问HTTP请求的上下文信息。它允许在Spring应用程序中从任何位置访问当前请求的相关信息&#xff0c;如HTTP头部、会话数据等&#xff0c;而无需将请求对象…

C语言实现串的部分算法

一、简介 串&#xff08;string&#xff09;&#xff08;或字符串&#xff09;是由零个或多个字符组成的有序序列&#xff0c;一般记为 sa1a2....an s为串的名&#xff0c;用单引号括起来的时字符序列串的值&#xff0c;串中字符的数目n称为串的长度。 零个字符的串称为空串…

C语言--每日选择题--Day28

第一题 1. 设a和b均为double型变量&#xff0c;且a5.5、b2.5&#xff0c;则表达式(int)ab/b的值是&#xff08; &#xff09; A&#xff1a;6.500000 B&#xff1a;6 C&#xff1a;5.500000 D&#xff1a;6.000000 答案及解析 D 本题考查的是不同数据类型之间的变量进行运算时…