ball-swiper

Vue3 球面 3D 轮播组件:卡片沿球面排布、鼠标拖拽旋转、箭头翻页,也可退化为平面排布,适合首页头图、产品展廊、作品集等视觉焦点场景
1,096
Install
npm install ball-swiper
Latest Version:1.2.1
License:MIT
Last Updated:Oct 23, 2026
Links: npm
Maintainer: 9mountain

ball-swiper

Vue3 球面 3D 轮播组件:卡片沿球面排布、鼠标拖拽旋转、箭头翻页,也可退化为平面排布(ball3D=false)——适合首页头图、产品展廊、作品集等「视觉焦点」轮播展示。

English: Vue3 spherical 3D carousel — cards are laid out along a sphere with perspective scaling, rotated by mouse drag or arrow clicks (flat mode optional). Ideal for hero banners, product galleries and portfolio showcases.

ball-swiper

快速开始

npm i ball-swiper -S

注:样式需手动引入 import 'ball-swiper/index.css'。 注:rem 布局前置要求——组件内部按 px→rem 换算尺寸,宿主页面必须设置 html 的 font-size(如 document.documentElement.style.fontSize = document.documentElement.clientWidth / 120 + 'px'),否则卡片尺寸失真。

快速应用

全局注入
import 'ball-swiper/index.css'; // ⚠️ 样式需手动引入
import BallSwiper from 'ball-swiper'
app.use(BallSwiper);
局部注入
import BallSwiperLib from 'ball-swiper';
import 'ball-swiper/index.css';
// 注:产物为 default 导出,具名导入依赖 CJS 互操作、部分构建工具(如 Vite)下不可靠,请 default 导入后解构
const { BallSwiper } = BallSwiperLib;

TypeScript 与 AI 支持

  • 自带 index.d.ts 类型声明(package.json types 字段已配置),安装后编辑器/AI 直接获得完整类型提示。
  • 配套 AI.md:面向 AI 助手的使用指南(API 速查、最小示例、典型错误对照),AI 编码工具可直接读取。

与同类的区别(选型参考)

对比对象 选择本包的理由
swiper / 通用平面轮播 卡片沿球面排布带透视缩放,拖拽旋转、箭头翻页,「视觉焦点」仪式感强;平面轮播只是水平滑动
swiper 3D 模式 / vue-carousel-3d 它们是 coverflow / 卡片堆叠式 3D 轮播;本包专做球面布局(卡片沿球面弧线分布、按距中位缩放),展示页头图/展廊的差异化视觉
vue-sphere(3D 图片球体) 图片球是密集图片贴球面、鼠标跟随旋转;本包是卡片式球面轮播——内容由插槽自定义、可点选(itemClick)、箭头逐张翻页

适用:大屏 / 展示页的头像墙、商品墙、作品集、首页头图等「视觉焦点」轮播展示。 不适用:移动端触摸交互(只支持鼠标拖拽,无 touch 事件);需要自动播放(无 autoplay);数据频繁变动(每次全量重排);SSR 渲染(内部依赖 DOM 测量)。

主参数

参数 类型 必填项 默认值 参考值 说明
data Array √ 数据来源。必传,不传会直接报错。
ball3D Boolean × true 是否3D球面。false 为平面排布(span 生效)。
height String × 100% 300px 高度。
showNum Number × 7 展示数据量,请使用奇数值。偶数值不会自动进位成奇数(偶数时卡片呈半卡偏移效果)。
span Number × 0 左右空隙,ball3D为false时有效。
itemBg String × item背景。
jtImg String × 左右箭头图片。请传入左侧箭头图片,右侧箭头会自动水平反转使用。

事件与插槽

参数 类型 解释
@itemClick 点击回调 (obj) => {}。拖动位移 >50px 时不触发。
#default 作用域插槽 { row } 逐项传出数据。
示例
<template>
  <!-- rem 前置:组件内部 px→rem 换算依赖 html font-size -->
  <BallSwiper
    :data="data"
    :showNum="7"
    height="300px"
    @itemClick="itemClick">
    <template #default="{ row }">
      <div class="name">{{ row.name }}</div>
      <div class="img">
        
      </div>
    </template>
  </BallSwiper>
</template>

<script setup>
import { ref, onMounted } from 'vue';
import 'ball-swiper/index.css'; // ⚠️ 样式需手动引入
import BallSwiperLib from 'ball-swiper';
// 注:产物为 default 导出,具名导入依赖 CJS 互操作、部分构建工具(如 Vite)下不可靠,请 default 导入后解构
const { BallSwiper } = BallSwiperLib;

const data = ref([
  { name: 'A', url: 'a.png' },
  { name: 'B', url: 'b.png' },
  { name: 'C', url: 'c.png' },
]);
const itemClick = (row) => console.log(row);

onMounted(() => {
  // rem 前置:按视口宽度设置根字号
  document.documentElement.style.fontSize = document.documentElement.clientWidth / 120 + 'px';
});
</script>

版本以 package.json 为准。

Related Packages

@morev/vue-swiper

Latest Swiper with extra features. For Vue 2 + SSR

1,149 3
vue-concise-slider

vue-slider,A simple sliding component,has easy configuration,support self-adapti...

125,004
vue2-swiper

一个简单的vue2.x swiper插件

7,655 12
vue-tags-ball

a 3d tags ball for vue2

361 10
hopla

3D model viewer plugin for Vue3 based on 3Dhop (3dhop.net)

246

Version History

Version Released License
1.2.1 MIT
1.2.0 MIT
1.1.2 MIT
1.1.1 MIT
1.1.0 MIT