当使用transform scale时,怎么确定其在页面中的位置

我现在有张图片是可以拖拽移动和放大缩小的,在图片左上角有一段说明是动态显示信息的,必须且仅显示在图片的左上角。

<img
  :src="src"
  :width="picW"
  :height="picH"
  :style="{ transform: picTransform, top: picTop ,left:picLeft }"
  @mousedown.prevent="mousedown($event)"
  @mousemove.prevent="mousemove($event)"
  @mouseup.prevent="mouseup($event)"
  @mousewheel.prevent="mousewheel($event)"
  @load="onload"
>
<span 
:style="{ top: picTop ,left:picLeft,position:'absolute' }">
  {{ info }}
</span>

当图片放大缩小后,在页面效果中,其位置是有变化的,但是left和top值没变,那么图片放大缩小时,我该如何调整 span位置

回复
阅读 3.4k
3 个回答

元素的变换(transform)是有一个变换原点(transform-origin)的,作为变换矩阵所在坐标系的原点,在缩放、旋转前后这个点的位置是重合的,此原点的坐标以元素的定位为基准,默认是在元素的中心位置。
所以给你一个思路:span 的中心位置与此图片的原点重合,然后通过 transform 调整到你需要的位置,图片 transform 的时候,同步调整 spantransform 参数,我猜在未变换时的基础上乘以放大倍数就行了。

给img和span一个共同的父容器, 把扩大的交互放在容器上。要不然有的你受了

最后采用的方案是
1.移动时记录变换原点位置
2.根据scale的比例计算出左上角相对原点的位置
3.根据原点位置与左上角的相对位置,算出左上角的位置

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏