gpt4 book ai didi

javascript - 如何使用intersectionObserver/Scrollspy在元素上显示特定类?

转载 作者:行者123 更新时间:2023-12-04 13:26:26 32 4
gpt4 key购买 nike

这是我在 vue 页面中的三个部分。

<section id="home">Home</section>
<section id="about">About</section>
<section id="contact">Contact</section>
当我单击导航栏链接时,它会将我滚动到相应的部分。
这是我的路由器链接。
<router-link to="/">Home</router-link>
<router-link to="/#about">About</router-link>
<router-link to="/#contact">Contact</router-link>
默认情况下,这些类被添加到事件页面的链接中。
router-link-active router-link-exact-active

<a href="/" class="router-link-active router-link-exact-active" data-v-41458b80="" aria-current="page">Home</a>
<a href="/#about" class="router-link-active router-link-exact-active" data-v-41458b80="" aria-current="page">About</a>
<a href="/#contact" class="router-link-active router-link-exact-active" data-v-41458b80="" aria-current="page">Contact</a>
但由于所有部分都在同一索引页面上,这些类被添加到所有导航栏链接中。
当页面位于特定部分时,有没有办法添加自定义类?

最佳答案

如果你想制作一个像 in this example 这样的交叉点观察者,你可以使用下面的代码

<template>
<div>
<a href="https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API">
Intersection observer example
</a>

<p
v-observe-visibility="{
callback: resetHashUrl,
intersection: {
threshold: 0.5,
},
}"
style="background-color: hsl(0, 0%, 80%); height: 100vh"
>
top block (triggered at 50% of the block)
</p>

<p
v-observe-visibility="{
callback: (isVisible, entry) => pushNewHash(isVisible, entry, 'center'),
intersection: {
threshold: 0.7,
},
}"
style="background-color: hsl(210, 17%, 40%); color: hsl(0, 0%, 100%); height: 100vh"
>
center block (triggered if at least 70% of the block visible aka threshold value)
</p>

<p
v-observe-visibility="{
callback: (isVisible, entry) => pushNewHash(isVisible, entry, 'end'),
intersection: {
threshold: 0.3,
},
}"
style="background-color: hsl(210, 50%, 13%); color: hsl(0, 0%, 100%); height: 100vh"
>
end block (triggered if at least 30% of the block visible aka threshold value)
</p>
</div>
</template>

<script>
import Vue from 'vue'
import { ObserveVisibility } from 'vue-observe-visibility'

Vue.directive('observe-visibility', ObserveVisibility)

export default {
methods: {
resetHashUrl(isVisible, _entry) {
if (isVisible) history?.replaceState(null, null, ' ')
},
pushNewHash(isVisible, _entry, newHash) {
if (isVisible) location.hash = newHash
},
},
}
</script>
靠的是 vue-observe-visibility并且工作非常好,不需要很多配置!

如果您正在寻找更简单的滚动 spy ,例如 this one ,你可以使用这个包: https://github.com/ibufu/vue2-scrollspy

编辑一个可能更适合的例子。
如果您想根据您所在的路线或要为其传递参数来应用某些类,则可以使用此代码片段。
<template>
<div>
<button :class="{ 'custom-class': isOnSpecificPath('/test') }">Click me</button>
<button :class="{ 'custom-class': isOnSpecificPath('/index') }">Click me</button>
</div>
</template>

<script>
export default {
methods: {
isOnSpecificPath(pathToTest) {
return this.$route.path === pathToTest
},
},
}
</script>

<style>
.custom-class {
color: hsl(39, 100%, 46%);
font-weight: 700;
}
</style>
enter image description here

关于javascript - 如何使用intersectionObserver/Scrollspy在元素上显示特定类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68264650/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com