typescript - 为什么即使我能够获得对我试图滚动到的元素的引用,scrollIntoView 在 Vue 3 中也不起作用
问题描述
我有一个 Vue 3 组件,我正在尝试将其设置为单页应用程序的导航。当用户单击一个项目时,我希望页面滚动到包含该部分内容的元素。
奇怪的是,我可以使用document.querySelector
. 我可以将 div 记录到控制台,但是当我尝试在 div 上调用 scrollIntoView 时,它不会做任何事情,除非我将它包装element.scrollIntoView
在一个setTimeout
函数中。
我确定这与 Vue 组件生命周期有关。我尝试将我的代码包装在onMounted
函数中,这只会使我的scrollPageTo
函数超出范围。
<template>
<div id="navigation-view" class="navigation-bar bg-gradient-to-tr w-full mx-auto flex items-start py-4">
<div class="w-full mx-auto text-right">
<nav>
<a class="top-nav-item" href="#" v-on:click="scrollPageTo('home-view')">
<i class="fa fa-home fa-lg"></i> Home
</a>
<a class="top-nav-item" href="#" v-on:click="scrollPageTo('hello-view')">
<i class="fa fa-hands-helping fa-lg"></i> Hello
</a>
<a class="top-nav-item" href="#" v-on:click="scrollPageTo('contact-view')">
<i class="fa fa-envelope fa-lg"></i> Contact
</a>
</nav>
</div>
</div>
<div class="logo">
<img src="/assets/img/615io-logo-wbg.png" alt="615io logo">
</div>
</template>
<script lang="ts">
import {defineComponent, onMounted} from "vue";
export default defineComponent({
setup() {
const scrollPageTo = (navEl) => {
console.log(`#${navEl}`);
let element = document.querySelector(`#${navEl}`);
console.log(element);
element.scrollIntoView({behavior: 'smooth'});
}
return {
scrollPageTo,
}
}
});
</script>
解决方案
推荐阅读
- selenium-webdriver - 无法生成唯一范围报告我使用过 SimpleDateFormat 类
- elixir - Enum.each 在循环 ExUnit 测试时丢失变量
- javascript - 是否建议添加到全局窗口对象?
- ios - 在 iPad 2019 iOS v12.2 上的 Mobile Safari 上打开一个 url
- android - Volley 错误的 URL - 如何解决?
- python-3.x - “工作表”对象没有属性“max_col”
- python - 根据第一个索引循环遍历数组
- sql - 透视排名表
- python - Python3 unittest 中的 Proxyquire 等效项
- c# - 在 C# 中使用相对路径