当前位置:首页 > JavaScript

js 实现全景

2026-03-14 00:49:23JavaScript

使用 Three.js 实现全景效果

Three.js 是一个强大的 3D 库,可以轻松实现全景效果。以下是实现步骤:

安装 Three.js

npm install three

创建全景场景

import * as THREE from 'three';
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls';

const scene = new THREE.Scene();
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
const renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);

// 添加全景纹理
const textureLoader = new THREE.TextureLoader();
const texture = textureLoader.load('panorama.jpg');
const geometry = new THREE.SphereGeometry(500, 60, 40);
geometry.scale(-1, 1, 1); // 反转球体内部可见
const material = new THREE.MeshBasicMaterial({ map: texture });
const sphere = new THREE.Mesh(geometry, material);
scene.add(sphere);

// 添加控制器
const controls = new OrbitControls(camera, renderer.domElement);
controls.enableZoom = false;
controls.enablePan = false;
camera.position.z = 1;

function animate() {
    requestAnimationFrame(animate);
    renderer.render(scene, camera);
}
animate();

使用 CSS 3D 实现简易全景

对于简单的全景展示,CSS 3D 变换也能实现基本效果:

<div class="panorama-container">
    <div class="panorama"></div>
</div>

<style>
.panorama-container {
    width: 100vw;
    height: 100vh;
    perspective: 1000px;
    overflow: hidden;
}

.panorama {
    width: 200%;
    height: 100%;
    background-image: url('panorama.jpg');
    background-size: auto 100%;
    transform-style: preserve-3d;
    animation: rotate 60s infinite linear;
}

@keyframes rotate {
    from { transform: rotateY(0deg); }
    to { transform: rotateY(360deg); }
}
</style>

使用 Pannellum 轻量级库

Pannellum 是专门为全景设计的轻量级库:

<div id="panorama"></div>

<script src="pannellum.js"></script>
<link rel="stylesheet" href="pannellum.css">

<script>
pannellum.viewer('panorama', {
    "type": "equirectangular",
    "panorama": "panorama.jpg",
    "autoLoad": true
});
</script>

移动端陀螺仪控制

在移动设备上实现陀螺仪控制的示例代码:

js 实现全景

window.addEventListener('deviceorientation', (event) => {
    const beta = event.beta;  // -180到180
    const gamma = event.gamma; // -90到90

    // 转换为Three.js的旋转
    sphere.rotation.x = (beta * Math.PI / 180);
    sphere.rotation.y = (gamma * Math.PI / 180);
});

注意事项

全景图片应为等距柱状投影格式(equirectangular),常见比例为2:1 Three.js实现时球体半径要足够大,确保相机位于球体中心 性能优化可考虑降低球体分段数或使用WebWorker加载纹理 移动端实现需要考虑陀螺仪权限请求和兼容性问题

标签: 全景js
分享给朋友:

相关文章

js实现动画

js实现动画

使用 CSS 动画与 JavaScript 控制 通过 JavaScript 动态添加或移除 CSS 类来触发动画。CSS 定义关键帧(@keyframes),JavaScript 通过 classL…

js实现图片轮播

js实现图片轮播

实现基础图片轮播 使用HTML、CSS和JavaScript创建一个简单的图片轮播。HTML部分定义轮播容器和图片,CSS设置样式和动画效果,JavaScript处理轮播逻辑。 <div cl…

js实现拷贝

js实现拷贝

实现文本拷贝 使用 document.execCommand 方法(已废弃但兼容性较好): function copyText(text) { const textarea = document…

js实现变形

js实现变形

使用 CSS 和 JavaScript 实现元素变形 在 JavaScript 中实现变形效果通常结合 CSS 的 transform 属性,通过动态修改该属性实现元素的旋转、缩放、倾斜或平移。 基…

js树实现

js树实现

树的基本概念 树是一种非线性的数据结构,由节点和边组成。每个节点包含一个值和指向子节点的引用。树的顶部节点称为根节点,没有子节点的节点称为叶节点。 树的实现方式 在JavaScript中,树可以通过…

js实现跑马灯

js实现跑马灯

实现跑马灯效果 使用HTML和JavaScript可以轻松实现跑马灯效果。以下是两种常见的实现方式: HTML结构 <div id="marquee"> <span>…