更改scale缩放小程序地图后,拖动地图总返回初始中心点问题解决方法

检测地图因拖动产生视野改变时,动态获取当前地图中心点,然后重新赋值

map.wxml

<map class="Map" id="mapId" min-scale="{{4}}" scale="{{scaleCount}}" show-location="{{true}}" bindregionchange="handleRegion">

map.js

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
当使用`vue-draggable-resizable`的`scale`属性对元素进行缩放时,元素的实际大小和在屏幕上的显示大小会有所不同,导致鼠标位置与实际元素大小不匹配的问题解决这个问题可以通过调整鼠标位置。 具体来说,可以在元素缩放后重新计算鼠标在元素内部的相对位置,然后将其调整到正确的位置。这可以通过以下步骤来实现: 1. 获取当前元素的缩放比例和实际大小,可以通过`this.$refs`获取到当前元素的DOM对象,然后从DOM对象中获取缩放比例和实际大小。 ```javascript const scale = this.$refs.element.style.transform.match(/scale\(([^\)]+)\)/)[1]; const scaleValue = parseFloat(scale.split(',')[0].substr(6)); const actualWidth = this.$refs.element.offsetWidth / scaleValue; const actualHeight = this.$refs.element.offsetHeight / scaleValue; ``` 2. 获取当前鼠标在元素内部的相对位置,可以通过`event.offsetX`和`event.offsetY`获取鼠标在元素内部的相对位置。 ```javascript const mouseX = event.offsetX; const mouseY = event.offsetY; ``` 3. 根据缩放比例和实际大小,以及当前鼠标在元素内部的相对位置,计算出正确的鼠标位置。 ```javascript const correctX = mouseX / this.width * actualWidth; const correctY = mouseY / this.height * actualHeight; ``` 4. 将鼠标位置更新为正确的位置。 ```javascript event.target.style.left = `${event.pageX - correctX}px`; event.target.style.top = `${event.pageY - correctY}px`; ``` 完整的示例代码如下: ```javascript <template> <vue-draggable-resizable ref="element" :w="100" :h="100" :scale="scale" :onResizeStop="handleResizeStop" > <div class="box"></div> </vue-draggable-resizable> </template> <script> export default { data() { return { scale: 1, }; }, methods: { handleResizeStop(event) { const scale = this.$refs.element.style.transform.match(/scale\(([^\)]+)\)/)[1]; const scaleValue = parseFloat(scale.split(',')[0].substr(6)); const actualWidth = this.$refs.element.offsetWidth / scaleValue; const actualHeight = this.$refs.element.offsetHeight / scaleValue; const mouseX = event.offsetX; const mouseY = event.offsetY; const correctX = mouseX / this.width * actualWidth; const correctY = mouseY / this.height * actualHeight; event.target.style.left = `${event.pageX - correctX}px`; event.target.style.top = `${event.pageY - correctY}px`; }, }, }; </script> <style scoped> .box { width: 100%; height: 100%; background-color: red; } </style> ``` 需要注意的是,这种方法只适用于元素只进行了缩放的情

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秋月华星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值