typescript 如何在Vue 3中使目标参考在可组合内与鼠标一起移动

piztneat  于 6个月前  发布在  TypeScript
关注(0)|答案(1)|浏览(75)

我试图在Vue 3中使用Nuxt和VueUse创建一个可组合的组件,它可以让任何组件跟随鼠标光标。我有以下可组合的组件:

export function useStickToMouse(target) {
  onMounted(() => {
    const {elementX, elementY} = useMouseInElement(target);
    function moveTarget(event:MouseEvent) {
      target.value.style.left = `${elementX.value}px`;
      target.value.style.top = `${elementY.value}px`;
    }
    useEventListener(window, 'mousemove', moveTarget)
  });
}

字符串
下面是follow-mouse-wrapper组件:

<template>
  <div ref="target">
    <slot></slot>
  </div>
</template>

<script setup>

const target = ref(null);
useStickToMouse(target)
  
</script>


所以我可以用这样的东西:

<follow-mouse-wrapper>
  <component-to-move></component-to-move>
</follow-mouse-wrapper>


改变style属性不会移动元素,但是使用anime.js会,但是它会做一些奇怪的事情:

//Composable using anime.js
export function useStickToMouse(target) {

  onMounted(() => {
    const {elementX, elementY} = useMouseInElement(target);

    function moveTarget(event:MouseEvent) {
      useAnime({
        targets: target.value,
        translateX: elementX.value,
        translateY: elementY.value
      })
        
    }
    
    useEventListener(window, 'mousemove', moveTarget)
  });

}


让元素跟随光标的最佳方法是什么?

v8wbuo2f

v8wbuo2f1#

VueUse useMouse并通过CSS v-bind绑定值:

<template>
  <div>
    <div class="mouse-follower" />
  </div>
</template>

<script setup>
const { x, y } = useMouse();
</script>

<style scoped>
.mouse-follower {
  position: absolute;
  width: 50px;
  height: 50px;
  background-color: red;
  top: v-bind('y + "px"');
  left: v-bind('x + "px"');
}
</style>

字符串
您需要npm i -D @vueuse/nuxt @vueuse/core并将modules: ['@vueuse/nuxt']添加到defineNuxtConfig中才能使VueUse工作。
演示:https://stackblitz.com/edit/github-wwyemm?file=app.vue

相关问题