更新记录

1.0.0(2026-07-24) 下载此版本

兼容微信小程序360全景图预览、VR场景、VR看房等使用场景


平台兼容性

uni-app(5.05)

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
- × × × × × × ×
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟
× × × × × × × × × × ×

uni-app x(5.12)

Chrome Safari Android iOS 鸿蒙 微信小程序
- - - - - -

y-panorama 微信小程序的360全景图预览插件、vr全景插件

基于 threejs-miniprogram 和微信小程序 WebGL Canvas 实现的 360 全景图预览组件,目前仅支持微信小程序端。

页面使用方式

需要安装 threejs-miniprogram 插件,否则会报错。

pnpm i threejs-miniprogram

页面只需要传入全景图片地址和交互配置,并在页面生命周期中调用组件暴露的方法。

<template>
    <y-panoramaViewer
        ref="panoramaViewerRef"
        :drag-sensitivity="panoramaConfig.dragSensitivity"
        :enable-gyroscope="panoramaConfig.enableGyroscope"
        :gyroscope-sensitivity="panoramaConfig.gyroscopeSensitivity"
        :image-url="panoramaImageUrl"
        :inertia-damping="panoramaConfig.inertiaDamping"
        :initial-fov="panoramaConfig.initialFov"
        :max-fov="panoramaConfig.maxFov"
        :max-latitude="panoramaConfig.maxLatitude"
        :min-fov="panoramaConfig.minFov"
        :min-inertia-speed="panoramaConfig.minInertiaSpeed"
        :show-badge="panoramaConfig.showBadge"
    />
</template>

<script setup>
import { ref } from 'vue';
import { onHide, onReady, onShow, onUnload } from '@dcloudio/uni-app';

// 替换为实际的等距柱状投影全景图地址,组件会监听地址变化并自动重新加载。
const panoramaImageUrl = '';

// 视角相关参数使用角度;阻尼越接近 1,拖拽松手后的惯性持续时间越长。
const panoramaConfig = {
    minFov: 35,
    maxFov: 85,
    initialFov: 70,
    maxLatitude: 85,
    dragSensitivity: 0.12,
    enableGyroscope: false,
    gyroscopeSensitivity: 1,
    inertiaDamping: 0.92,
    minInertiaSpeed: 0.01,
    showBadge: true,
};

const panoramaViewerRef = ref(null);

// Canvas 节点要等页面首次渲染完成后才能查询并初始化 WebGL。
onReady(() => {
    panoramaViewerRef.value?.initialize();
});

// 页面回到前台时补绘当前视角,并按配置恢复陀螺仪监听。
onShow(() => {
    panoramaViewerRef.value?.resume();
});

// 页面进入后台后停止惯性动画和陀螺仪监听,避免无意义的计算与耗电。
onHide(() => {
    panoramaViewerRef.value?.pause();
});

// 页面卸载时主动释放纹理、几何体和 WebGL 渲染器。
onUnload(() => {
    panoramaViewerRef.value?.dispose();
});
</script>

Props

参数 类型 默认值 说明
imageUrl String '' 等距柱状投影全景图地址;为空时展示空态。
minFov Number 35 双指放大时允许的最小视野角。
maxFov Number 85 双指缩小时允许的最大视野角。
initialFov Number 70 首次进入和重置视角时使用的视野角。
maxLatitude Number 85 上下拖动允许到达的最大纬度。
dragSensitivity Number 0.12 每移动一个屏幕像素所旋转的角度。
enableGyroscope Boolean false 是否启用设备方向感应来控制全景视角。
gyroscopeSensitivity Number 1 设备方向变化的旋转倍率,负数可反转控制方向。
inertiaDamping Number 0.92 每一帧保留的惯性速度比例,越接近 1 滑动距离越长。
minInertiaSpeed Number 0.01 惯性速度低于该值后停止动画。
showBadge Boolean true 是否显示左上角的全景标识。
badgeText String '360°' 全景标识中展示的文字。

暴露方法

通过 ref 获取组件实例后可调用以下方法:

方法 说明
initialize() 初始化 Canvas、WebGL 渲染器和全景图纹理,建议在页面 onReady 中调用。
resume() 页面回到前台时重新渲染,并在允许时恢复陀螺仪监听。
pause() 页面进入后台时停止惯性动画和陀螺仪监听。
dispose() 页面卸载或不再使用时释放纹理、几何体和 WebGL 渲染器。
reset() 重置经纬度和视野角到初始状态。

注意事项

  • 图片建议使用 HTTPS 地址,并确保小程序后台已配置合法下载域名。
  • imageUrl 应使用等距柱状投影全景图,否则画面会出现明显拉伸或错位。
  • 启用陀螺仪时需要在真机微信小程序中验证,开发者工具对设备方向能力的支持有限。
  • 非微信小程序端会展示“当前平台暂不支持”的状态。

隐私、权限声明

1. 本插件需要申请的系统权限列表:

陀螺仪

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

许可协议

MIT协议

暂无用户评论。