当前位置:首页 > VUE

vue监听滚动实现fixed

2026-01-21 10:36:52VUE

监听滚动实现 Fixed 效果

在 Vue 中监听滚动事件并实现 Fixed 效果,可以通过以下方法实现:

方法一:使用 v-bind:class 动态绑定样式

<template>
  <div :class="{ 'fixed-header': isFixed }">
    <!-- 内容 -->
  </div>
</template>

<script>
export default {
  data() {
    return {
      isFixed: false
    }
  },
  mounted() {
    window.addEventListener('scroll', this.handleScroll)
  },
  beforeDestroy() {
    window.removeEventListener('scroll', this.handleScroll)
  },
  methods: {
    handleScroll() {
      this.isFixed = window.scrollY > 100 // 100为滚动阈值
    }
  }
}
</script>

<style>
.fixed-header {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  z-index: 100;
}
</style>

方法二:使用 Vue 指令

<template>
  <div v-fixed>
    <!-- 内容 -->
  </div>
</template>

<script>
export default {
  directives: {
    fixed: {
      inserted(el) {
        window.addEventListener('scroll', () => {
          const shouldFix = window.scrollY > 100
          el.style.position = shouldFix ? 'fixed' : ''
          el.style.top = shouldFix ? '0' : ''
          el.style.left = shouldFix ? '0' : ''
          el.style.width = shouldFix ? '100%' : ''
          el.style.zIndex = shouldFix ? '100' : ''
        })
      }
    }
  }
}
</script>

方法三:使用 Composition API

<template>
  <div :style="headerStyle">
    <!-- 内容 -->
  </div>
</template>

<script>
import { ref, onMounted, onUnmounted } from 'vue'

export default {
  setup() {
    const isFixed = ref(false)

    const handleScroll = () => {
      isFixed.value = window.scrollY > 100
    }

    onMounted(() => {
      window.addEventListener('scroll', handleScroll)
    })

    onUnmounted(() => {
      window.removeEventListener('scroll', handleScroll)
    })

    const headerStyle = computed(() => ({
      position: isFixed.value ? 'fixed' : '',
      top: isFixed.value ? '0' : '',
      left: isFixed.value ? '0' : '',
      width: isFixed.value ? '100%' : '',
      zIndex: isFixed.value ? '100' : ''
    }))

    return { headerStyle }
  }
}
</script>

注意事项

  • 监听滚动事件时,务必在组件销毁前移除事件监听,避免内存泄漏
  • 使用 position: fixed 时,注意可能影响页面布局,可能需要为后续内容添加 margin/padding
  • 对于性能优化,可以考虑使用 requestAnimationFrame 或节流函数优化滚动事件处理

vue监听滚动实现fixed

标签: vuefixed
分享给朋友:

相关文章

验证码实现vue

验证码实现vue

验证码实现(Vue) 使用组件库(如Element UI) Element UI提供了现成的验证码组件,可直接集成到Vue项目中。 安装Element UI: npm install elemen…

vue实现共享屏幕

vue实现共享屏幕

共享屏幕的基本实现 在Vue中实现共享屏幕功能通常需要结合浏览器的getDisplayMedia API。以下是一个基础实现示例: <template> <div>…

vue实现下拉层级

vue实现下拉层级

Vue实现下拉层级菜单 使用Vue实现下拉层级菜单可以通过递归组件或动态渲染的方式完成。以下是两种常见实现方法: 递归组件实现 创建一个递归组件处理多级菜单结构: <template>…

vue实现按钮组轮换

vue实现按钮组轮换

实现按钮组轮换的方法 在Vue中实现按钮组轮换效果可以通过动态绑定类和事件处理来完成。以下是一种常见的实现方式: 模板部分 <template> <div class="bu…

vue实现展开与收起

vue实现展开与收起

Vue 实现展开与收起功能 在 Vue 中实现展开与收起功能可以通过多种方式完成,以下是一些常见的方法: 使用 v-show 或 v-if 控制显示 通过 Vue 的指令 v-show 或 v-if…

vue无限菜单怎么实现

vue无限菜单怎么实现

实现 Vue 无限菜单的方法 递归组件实现嵌套菜单 使用 Vue 的递归组件特性可以轻松实现无限级嵌套菜单。通过组件调用自身的方式处理嵌套数据。 <template> <ul&…