如何使用Vue 3滚动到变量元素?

js81xvg6  于 2023-05-29  发布在  Vue.js
关注(0)|答案(1)|浏览(207)

我在纯JavaScript中有以下函数来滚动到一个元素,我想将该代码转换为Vue 3。

var source = ''
function showScrollInto(currentLocation, toLocation) {
  source = currentLocation  // where to return to after section is hidden
  document.getElementById(toLocation).style.display = 'block'
  document.getElementById(toLocation).scrollIntoView()
}

并返回到原始位置:

document.getElementById(source).scrollIntoView()

单击按钮时调用showScrollInto:

<button onClick="showScrollInto('top', 'interesse')">TITLE</button>

现在我把这个函数变成了一个方法

import { ref } from "vue"
var source = ""
const toLocation = ref('Vue.js')

export default {
    name: "App",
    data() {
        return {
            hideAlleClubs: true,
            hideIkWilKennismaken: true,
            hideAlleLocaties: true,
            hideMeerOverKegelen: true,
            hideInteresse: true
        }
    },
    methods: {
        showScrollInto(event, currentLocation, toLocation) {
            source = currentLocation  // where to return to after section is hidden
            this.hideInteresse = false
            this.$refs.toLocation.scrollIntoView({ behavior: 'smooth'})
            // document.getElementById(toLocation).style.display = 'block'
            // document.getElementById(toLocation).scrollIntoView()
        }
    }
}

其中,通过单击如下按钮调用showScrollInto:

<button @click="showScrollInto($event, 'kosten', 'interesse')">TITLE</button>

要滚动到的元素如下所示:

<section class = "top-level-section" v-show="!hideInteresse" ref="interesse">

将变量传递到方法中可以工作,但我不知道如何滚动到位置是变量的位置。
this.$refs.interesse.scrollIntoView({ behavior:'smooth'})可以转到id为'interesse'的元素,但我不知道如何将该元素名称转换为变量。此外,我知道这个$refs不是Vue 3的表示法,应该转换成类似ref('value')的东西,但我不知道如何做到这一点。

ffscu2ro

ffscu2ro1#

首先,在模板参考上通读Vue documentation。* 页面左上角有一个切换按钮,您可以在Options API和Composition API语法之间切换 *。
使用变量引用refs取决于您的Vue版本和/或语法。

<div ref="someRefName"></div>

Vue 2 / Options API

该变量应保存与元素上的ref匹配的字符串

const refVar = "someRefName"
this.$refs[refVar].scrollIntoView({ behavior: "smooth" });

Vue 3 /合成API

该变量应被赋值为ref()(需要导入)。const的名称应该与元素上的ref的名称匹配

const someElement = ref() // assigned to some element in the template
someElement.value.scrollIntoView({ behavior: "smooth" });

Options API和Composition API不应该混合使用,所以只能使用一种语法。
在这两种情况下,你都可以有多个元素具有相同的引用名称,在这种情况下,Vue将创建一个包含所有相同名称引用的数组,因此要访问特定的引用,你也可以使用索引
下面是一些简单的例子。希望他们会澄清任何剩余的问题,你可以修改,以适应您的需要。
Options API codesandbox example
Composition API codesandbox example

相关问题