当前位置:首页 > VUE

vue实现弓型结构

2026-01-22 19:08:03VUE

Vue 实现弓型结构

弓型结构通常指一种对称的弧形布局,常见于菜单、导航或数据可视化场景。以下提供两种实现方式:

使用 CSS Flexbox 和 Transform

<template>
  <div class="arc-container">
    <div 
      v-for="(item, index) in items" 
      :key="index" 
      class="arc-item"
      :style="getItemStyle(index)"
    >
      {{ item }}
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: ['Item 1', 'Item 2', 'Item 3', 'Item 4', 'Item 5'],
      radius: 150,
      angleStep: 30
    }
  },
  methods: {
    getItemStyle(index) {
      const angle = (index - Math.floor(this.items.length / 2)) * this.angleStep
      const rad = angle * Math.PI / 180
      return {
        transform: `
          rotate(${angle}deg) 
          translate(${this.radius}px) 
          rotate(${-angle}deg)
        `
      }
    }
  }
}
</script>

<style>
.arc-container {
  display: flex;
  justify-content: center;
  position: relative;
  height: 300px;
}
.arc-item {
  position: absolute;
  width: 60px;
  height: 60px;
  display: flex;
  align-items: center;
  justify-content: center;
  background: #42b983;
  color: white;
  border-radius: 50%;
}
</style>

使用 SVG 实现精确弧形

<template>
  <svg width="400" height="300" viewBox="0 0 400 300">
    <path 
      d="M100,150 A150,150 0 0 1 300,150" 
      fill="none" 
      stroke="#ccc" 
      stroke-width="2"
    />
    <circle 
      v-for="(item, index) in items" 
      :key="index"
      :cx="getX(index)"
      :cy="getY(index)"
      r="20"
      fill="#42b983"
    />
  </svg>
</template>

<script>
export default {
  data() {
    return {
      items: ['A', 'B', 'C', 'D', 'E'],
      centerX: 200,
      centerY: 150,
      radius: 150,
      startAngle: -60,
      endAngle: 60
    }
  },
  methods: {
    getX(index) {
      const angle = this.startAngle + 
        (index * (this.endAngle - this.startAngle) / (this.items.length - 1))
      return this.centerX + this.radius * Math.cos(angle * Math.PI / 180)
    },
    getY(index) {
      const angle = this.startAngle + 
        (index * (this.endAngle - this.startAngle) / (this.items.length - 1))
      return this.centerY - this.radius * Math.sin(angle * Math.PI / 180)
    }
  }
}
</script>

关键参数说明

  • radius 控制弓形的弯曲程度
  • angleStepstartAngle/endAngle 控制元素分布范围
  • 三角函数计算确保元素沿弧线均匀分布
  • SVG 版本适合需要精确控制路径的场景

两种方式均可通过调整参数实现不同曲率的弓形布局,Flexbox 方案更适合简单UI元素,SVG方案更适合需要复杂路径的场景。

vue实现弓型结构

标签: 结构vue
分享给朋友:

相关文章

vue实现下拉框删除

vue实现下拉框删除

Vue 实现下拉框删除功能 在Vue中实现下拉框的删除功能通常涉及以下步骤: 数据绑定与渲染 在Vue组件中定义数据数组用于存储下拉框选项: data() { return { op…

vue原型实现

vue原型实现

Vue 原型实现的关键点 Vue.js 的原型系统是其响应式机制的核心部分,通过原型链实现数据的动态绑定和依赖收集。以下是实现 Vue 原型的主要技术要点。 数据响应式原理 Vue 通过 Obje…

vue 实现pc

vue 实现pc

Vue 实现 PC 端应用的核心要点 Vue.js 是一个渐进式框架,适合构建 PC 端单页应用(SPA)或复杂的前端界面。以下是实现 PC 端应用的关键方法和注意事项: 项目初始化与工程化配置…

vue实现triger

vue实现triger

在Vue中实现触发器(trigger)功能通常涉及自定义事件或DOM事件触发。以下是几种常见场景的实现方法: 自定义事件触发 通过$emit方法触发父组件中监听的自定义事件: // 子组件 thi…

vue实现框架

vue实现框架

Vue 框架实现的核心方法 基础项目搭建 使用 Vue CLI 或 Vite 快速初始化项目。Vue CLI 适合传统项目,Vite 更适合现代轻量级应用。安装后通过命令行工具选择所需配置(如 Rou…

vue 实现级联

vue 实现级联

Vue 实现级联选择器 级联选择器(Cascader)常用于省市区选择、分类选择等场景。Vue 中可以通过 Element UI、Ant Design Vue 等 UI 库实现,也可以手动封装。 使…