在转换遗留jquery代码时,我一直在获取元素的位置.

我的目标是在a标签上方显示浮动div.

这是我的模板.

<a href="#none" v-for="busstop in busstops"
   :id="busstop.id"
   @mouseenter="onMouseEnterBusStop"
   @mouseleave="onMouseLeaveBusStop"
   onclick="detailsOpen(this);">
<div :class="['marker-info', markInfoBusStop.markerInfoActiveClass]"
     :style="markInfoBusStop.markerInfoStyle">
    <p><strong>{{markInfoBusStop.busStopNo}}</strong>{{markInfoBusStop.busStopName}}</p>
    <dl>
      ...
    </dl>
</div>

Vue代码如下.

data: {
  markInfoBusStop: { 
      busStopNo: '12345',
      markerInfoActiveClass: '',
      markerInfoStyle: {
        left: '200px',
        top: '200px'
      }
  },
  ...
},
methods: {
  onMouseEnterBusStop: function(ev) {
    let left = ev.clientX;
    let top = ev.clientY;
    this.markInfoBusStop.markerInfoActiveClass = 'active';
    this.markInfoBusStop.markerInfoStyle.left = left + 'px';
    this.markInfoBusStop.markerInfoStyle.top = top + 'px';
}

我只是使用当前鼠标指针的位置,但需要元素的绝对位置.

我的传统jquery使用$(this).position(),如下所示.

$(document).on("mouseenter", "a.marker", function() {
    var left = $(this).position().left;
    var top = $(this).position().top;
    $(".marker-info").stop().addClass("active").css({"left":left, "top": top});
});

提前谢谢.

推荐答案

这本身不是一个Vue问题,而是一个javascript问题.现在常用的方法是使用元素.getBoundingClientRect()方法.在你的情况下,这将是:

<a>元素上创建一个ref,并用如下方法传递该ref:

<a ref = "busstop" 
     href="#none"  
    v-for="busstop in busstops" 
    @click = getPos(busstop)>

在"方法"对象中,创建用于处理单击的方法:

methods: {
    getPos(busstop) {
         const left = this.$refs.busstop.getBoundingClientRect().left
         const top = this.$refs.busstop.getBoundingClientRect().top
         ...
    }
}

所有当前浏览器都支持:

更多信息请点击此处:

https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect

Vue.js相关问答推荐

检测Vue3/Vue-test-utils中的Vuex还原/Mutations

Vuetify 3 v-radio-group 将模型设置为 null

Nuxt3 / Vue3 - 当属性更改时如何动态更改渲染组件?

如何解决 importers[path] is not a function for clean Vue 3/Vite/Storybook installation

Vue 3 如何通过多个组件传递插槽

如何使用 vuejs 在浏览器 url 中获取当前 product.id 的详细信息

在 VueJS 中为 Get、Post、Patch 配置全局标头的最佳方法

禁用 vue-cli webpack 编码图像 base64

如果找不到路由,Vue.js如何重定向到公共路由

如何将Vue的主应用程序渲染到body元素?

VueJS:向左,元素的顶部位置?

为什么不先移动鼠标就无法滚动视差?

Vue.js + Vuex:如何改变嵌套项状态?

Vuejs在复选框 Select 上切换div可见性

如何在 VueJS 中访问 [__ob__: Observer] 的元素?

如何在 Vue.js 中获取组件元素的 offsetHeight?

如何将项目推送到 Vuejs 中数据对象的数组中? Vue 似乎没有关注 .push() 方法

使密码字符隐藏在 Vuetify 字段中

脚本npm run dev和npm run watch是做什么用的?

Vue $refs 对象的类型为 unknown未知