当前位置:首页 > VUE

vue实现左右悬浮

2026-03-09 07:10:06VUE

实现左右悬浮的Vue组件

使用Vue实现左右悬浮效果可以通过固定定位结合动态样式实现。以下是两种常见实现方式:

基础固定定位实现

<template>
  <div class="float-container">
    <div class="float-left" :style="{top: leftTop + 'px'}">
      <!-- 左侧悬浮内容 -->
    </div>
    <div class="float-right" :style="{top: rightTop + 'px'}">
      <!-- 右侧悬浮内容 -->
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      leftTop: 100,
      rightTop: 100
    }
  },
  mounted() {
    window.addEventListener('scroll', this.handleScroll)
  },
  beforeDestroy() {
    window.removeEventListener('scroll', this.handleScroll)
  },
  methods: {
    handleScroll() {
      this.leftTop = window.scrollY + 100
      this.rightTop = window.scrollY + 100
    }
  }
}
</script>

<style>
.float-left {
  position: fixed;
  left: 20px;
  z-index: 100;
}

.float-right {
  position: fixed;
  right: 20px;
  z-index: 100;
}
</style>

使用VueUse库优化实现

安装VueUse后可以简化滚动监听:

npm install @vueuse/core

优化后的组件代码:

<template>
  <div>
    <div class="float-left" :style="{top: y + 100 + 'px'}">
      <!-- 左侧悬浮内容 -->
    </div>
    <div class="float-right" :style="{top: y + 100 + 'px'}">
      <!-- 右侧悬浮内容 -->
    </div>
  </div>
</template>

<script>
import { useWindowScroll } from '@vueuse/core'

export default {
  setup() {
    const { y } = useWindowScroll()
    return { y }
  }
}
</script>

响应式悬浮布局

针对不同屏幕尺寸调整悬浮元素位置:

@media (max-width: 768px) {
  .float-left, .float-right {
    width: 80px;
    padding: 5px;
  }
}

带关闭功能的悬浮组件

<template>
  <div class="float-right" v-if="!hidden" :style="{top: y + 100 + 'px'}">
    <button @click="hidden = true">×</button>
    <!-- 悬浮内容 -->
  </div>
</template>

<script>
export default {
  data() {
    return {
      hidden: false
    }
  }
}
</script>

悬浮按钮组件封装

可复用的悬浮按钮组件:

<template>
  <div 
    class="float-btn"
    :class="position"
    :style="{top: offset + 'px'}"
    @click="$emit('click')"
  >
    <slot></slot>
  </div>
</template>

<script>
export default {
  props: {
    position: {
      type: String,
      default: 'right',
      validator: value => ['left', 'right'].includes(value)
    },
    offset: {
      type: Number,
      default: 100
    }
  }
}
</script>

<style>
.float-btn {
  position: fixed;
  z-index: 100;
  cursor: pointer;
}
.float-btn.left {
  left: 20px;
}
.float-btn.right {
  right: 20px;
}
</style>

使用时:

vue实现左右悬浮

<float-btn position="left" @click="handleLeftClick">
  <span>左侧按钮</span>
</float-btn>

这些实现方式涵盖了基本的悬浮定位、响应式处理、交互控制和组件封装,可根据实际需求选择或组合使用。

标签: vue
分享给朋友:

相关文章

vue实现选中单元格

vue实现选中单元格

Vue 实现选中单元格的方法 基础实现思路 在 Vue 中实现选中单元格功能,通常可以通过动态绑定 class 或 style 来实现。以下是一个基于表格的简单实现示例: <template&…

vue实现视窗

vue实现视窗

Vue 实现视窗功能 在 Vue 中实现视窗功能通常涉及监听浏览器窗口大小变化、响应式布局或创建自定义弹窗组件。以下是几种常见实现方式: 监听浏览器窗口大小变化 使用 Vue 的 mounted 和…

vue树形实现

vue树形实现

Vue 树形组件实现方法 使用递归组件实现树形结构 递归组件是 Vue 中实现树形结构的常见方法。通过组件调用自身的方式,可以轻松构建多层嵌套的树形结构。 <template> &l…

vue架构实现

vue架构实现

Vue 架构实现核心方案 Vue.js 的架构实现通常围绕模块化、组件化和状态管理展开。以下为常见实现方案: 基于单文件组件(SFC)的模块化 通过 .vue 文件组织模板、脚本和样式: <…

vue实现颜色

vue实现颜色

Vue 实现颜色的方法 在 Vue 中实现颜色管理可以通过多种方式,以下是一些常见的方法: 使用 CSS 变量动态绑定颜色 在 Vue 组件的样式中定义 CSS 变量,并通过 Vue 的数据绑定动态…

vue实现getapp

vue实现getapp

Vue 中实现全局获取应用实例的方法 在 Vue 3 中,可以通过 getCurrentInstance 方法获取当前组件实例,但需要明确其使用场景和限制。以下是具体实现方式: 方法一:通过 get…