function - vue 3中上下滚动时如何应用不同的样式?

标签 function vue.js scroll styles

我刚刚开始学习 Vue,并尝试在页面向上、向下滚动以及滚动到达顶部时更改标题的样式。 在 JS 中我有这个:

var prevScrollpos = window.pageYOffset; const header = document.querySelector("header");

window.addEventListener("scroll", function () {
  var currentScrollPos = window.pageYOffset;
   if (prevScrollpos > currentScrollPos) {
     header.classList.add("scrolled");
     header.classList.remove("scrollDown");
     
   }else {
     header.classList.add("scrollDown");
     header.classList.remove("scrolled"); 
   }
  if (currentScrollPos === 0) {
    header.classList.remove("scrollDown");
    header.classList.remove("scrolled"); 
  }
    prevScrollpos = currentScrollPos;
});

但我不知道如何在 vue 3 中实现 希望得到您的帮助 提前致谢!

最佳答案

您可以使用Template Refs .

这是使用您的代码的一些示例:

<template>
  <!-- assign a reference to html element using ref attribute -->
  <header ref="headRef"></header>
</template>
  • 使用选项 API
<script>
  export default {
    methods: {
      vueOnScroll() {
        var prev = window.pageYOffset;
        const refs = this.$refs.headRef; // assign the reference in variable
        window.addEventListener("scroll", () => {
          var curr = window.pageYOffset;
          if (prev > curr) {
            refs.classList.add("scrolled");
            refs.classList.remove("scrollDown");
          } else {
            refs.classList.add("scrollDown");
            refs.classList.remove("scrolled");
          }
          if (curr === 0) {
            refs.classList.remove("scrollDown");
            refs.classList.remove("scrolled");
          }
            prev = curr;
        });
      },
    },
    mounted() {
      // run the function when the component's mount
      this.vueOnScroll();
    }
  }
</script>

<script>
  import { ref } from "@vue/reactivity";
  import { onMounted } from "@vue/runtime-core";

  export default {
    setup() {
      const headRef = ref(null); // obtain the reference
      onMounted(() => {
        var prev = window.pageYOffset;
        window.addEventListener("scroll", () => {
          var curr = window.pageYOffset;
          if (prev > curr) {
            headRef.value.classList.add("scrolled");
            headRef.value.classList.remove("scrollDown");
          } else {
            headRef.value.classList.add("scrollDown");
            headRef.value.classList.remove("scrolled");
          }
          if (curr === 0) {
            headRef.value.classList.remove("scrollDown");
            headRef.value.classList.remove("scrolled");
          }
          prev = current;
        });
      });
      return { headRef };
    },
  };
</script>

关于function - vue 3中上下滚动时如何应用不同的样式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70668157/

相关文章:

javascript - 关于JavaScript构造函数和匿名函数的几个问题

c - 如何使用 C 中的指针表示法和冒泡排序算法对函数中的数组进行排序

javascript - 更改 VuetifyJS DataTable 单元格的默认宽度

ios - 第二个 TableView 没有出现在 ScrollView 中

python - Codecademy 在 python 中使用函数

algorithm - 哈希的双射模拟

javascript - Webpack - 代码分割 : split library into it's own file

数据表中输入和下拉的 CSS 定位

android - 滚动距离 - 无障碍服务 ACTION_SCROLL_FORWARD?

jquery - 是否有更好的方法在 iPhone 的 Safari 中滚动页面(使用 jQuery)(scrollTop 无法正常工作)