我在纯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')的东西,但我不知道如何做到这一点。
1条答案
按热度按时间ffscu2ro1#
首先,在模板参考上通读Vue documentation。* 页面左上角有一个切换按钮,您可以在Options API和Composition API语法之间切换 *。
使用变量引用refs取决于您的Vue版本和/或语法。
Vue 2 / Options API
该变量应保存与元素上的ref匹配的字符串
Vue 3 /合成API
该变量应被赋值为
ref()
(需要导入)。const的名称应该与元素上的ref的名称匹配Options API和Composition API不应该混合使用,所以只能使用一种语法。
在这两种情况下,你都可以有多个元素具有相同的引用名称,在这种情况下,Vue将创建一个包含所有相同名称引用的数组,因此要访问特定的引用,你也可以使用索引
下面是一些简单的例子。希望他们会澄清任何剩余的问题,你可以修改,以适应您的需要。
Options API codesandbox example
Composition API codesandbox example