更新记录
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 应使用等距柱状投影全景图,否则画面会出现明显拉伸或错位。
- 启用陀螺仪时需要在真机微信小程序中验证,开发者工具对设备方向能力的支持有限。
- 非微信小程序端会展示“当前平台暂不支持”的状态。