首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Vue 3脚本设置的scrollIntoView

使用Vue 3脚本设置的scrollIntoView
EN

Stack Overflow用户
提问于 2022-07-09 09:38:06
回答 1查看 498关注 0票数 0

我试图滚动到一个特定的元素点击。但我得到了以下错误。

代码语言:javascript
运行
复制
Uncaught TypeError: element.scrollIntoView is not a function

这是我的剧本

代码语言:javascript
运行
复制
<script setup>
import { ref } from 'vue'

function goTo(refName){
    let element = ref(refName);
   element.scrollIntoView({behavior: "smooth"})
}

</script>

这是我的点击功能

代码语言:javascript
运行
复制
<DayWithText v-for="day in daysOfWeek" :name="day.shortHand" :day="day.day" :date="day.date"  @click.prevent="goTo('test')"/>

这就是元素

代码语言:javascript
运行
复制
<p ref="test">test</p>

我做错了什么?

EN

回答 1

Stack Overflow用户

发布于 2022-07-09 11:44:38

ref('test')不返回<p ref="test">test</p>。它创建一个新的ref,初始值为'test' (string)。

要得到这一段,你必须声明为

代码语言:javascript
运行
复制
const test = ref(null)

内部<script setup> (在mount之前)。

在组件安装后的任何时候

代码语言:javascript
运行
复制
test.value?.scrollIntoView({behavior: "smooth"})

会起作用的。

演示:

代码语言:javascript
运行
复制
const { createApp, ref } = Vue;

createApp({
  setup() {
    const test = ref(null);
    const goToTest = () => {
      test.value?.scrollIntoView({behavior: "smooth", block: "center"})
    }
    return {
      test,
      goToTest
    }
  }
}).mount('#app')
代码语言:javascript
运行
复制
#app p {
  margin: 200vh 0;
}
代码语言:javascript
运行
复制
<script src="https://unpkg.com/vue@3.2/dist/vue.global.prod.js"></script>
<div id="app">
  <button @click="goToTest">Go to test</button>
  <p ref="test">test</p>
</div>

mount的遮罩下,当<template>解析器找到一个ref时,它将查找具有该名称的声明变量的setup范围。如果找到并且如果它是一个ref,那么当前的DOM元素将放置在该引用的value中。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72920333

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档