日安,我刚接触Vue.js,我想要一个导航栏,默认是透明的,但是在滚动时会改变背景。不幸的是,它不起作用。我尝试了一些解决方案,但是没有一个起作用。所以这个JavaScript代码是Stack Overflow的一个例子,它在Fiddle中起作用。如果你需要更多的信息和/或代码,请告诉我。
导航值
<template>
<div id="navigation">
<nav class="nav-items">
<router-link class="item" to="/home">Home</router-link>
<router-link class="item" to="/about">About</router-link>
<router-link class="item" to="/japan">Japan</router-link>
</nav>
</div>
</template>
<script>
export default {
name: 'navigation'
}
import scroll from '../assets/js/scroll.js';
</script>
滚动. js
const navbar = document.querySelector('#navigation')
window.addEventListener('scroll', function(e) {
const lastPosition = window.scrollY
if (lastPosition > 50 ) {
navbar.classList.add('colored')
} else if (navbar.classList.contains('colored')) {
navbar.classList.remove('colored')
} else {
navbar.classList.remove('colored')
}
})
导航.scss
仅供参考:我已删除此处不必要的代码。
#navigation {
background: transparent;
.colored {
background: #fff;
transition: 0.3s;
}
}
2条答案
按热度按时间wtzytmuj1#
<hr>
。Vue是一个JavaScript框架,因此您可以在其中的任何地方插入普通代码,它将运行得非常好。
恕我直言,你的问题不是关于导入普通代码,而是关于在正确的时间运行它。
您必须在
mounted()
钩子内运行代码,因为#navigation
存在于DOM中:1.您的
scroll.js
可以安全地编写为:1.您的SCSS似乎不正确:
将把
declaration
应用于任何具有.colored
类的元素,该元素***位于具有navigation
的id
的元素***内部。但是您的代码在***#navigation
上切换类colored
***。因此,您的SCSS应如下所示:可能看起来不多,但是
&
使您的代码适用(或不适用)。1.您可能希望将
transition
应用到#navigation
,因为它应该在具有colored
类***和不具有colored
类***时应用。如果不这样做,则返回过渡(从.colored
到:not(.colored)
)将不会设置动画。为了记录并回答您最初的问题,将自定义代码导入到Vue组件中的***正确方法***是:
a)将代码导出为函数:
(in滚动. js)
b)进口:
(in您的组件)
c)在您需要的地方运行:
(i.e:安装中)
显然,您希望根据函数的用途/角色以及项目的命名约定来重命名函数。
最后,但并非最不重要的是,如果你的函数需要带参数,你可能想把它作为一个方法来使用:
......并且,在组件中:
pbpqsu0x2#
就这样
来源:Link