当前位置:首页 > JavaScript

js 实现全景

2026-03-14 00:49:23JavaScript

使用 Three.js 实现全景效果

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

安装 Three.js

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 变换也能实现基本效果:

js 实现全景

<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>

移动端陀螺仪控制

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

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
分享给朋友:

相关文章

h5实现全景

h5实现全景

H5 实现全景效果的方法 H5 实现全景效果通常通过 WebGL、Three.js 或 CSS3D 技术实现,以下是几种常见方案: 使用 Three.js 实现 360° 全景 Three.js 是…

js实现换肤

js实现换肤

使用CSS变量实现换肤 通过CSS变量可以轻松实现主题切换功能。CSS变量在根元素中定义,通过JavaScript动态修改这些变量值。 :root { --primary-color: #349…

js实现tab选项卡切换

js实现tab选项卡切换

实现Tab选项卡切换的JavaScript方法 使用纯JavaScript实现Tab切换功能,可以通过监听点击事件动态切换内容显示状态。以下是两种常见实现方式: 基础DOM操作实现 /…

js实现二叉树

js实现二叉树

二叉树的基本概念 二叉树是一种树形数据结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树的常见操作包括插入、删除、遍历等。 二叉树的节点定义 在JavaScript中,二叉树的节点可…

js实现dh

js实现dh

JavaScript 实现 DH(Diffie-Hellman)密钥交换 Diffie-Hellman(DH)密钥交换是一种安全协议,允许双方在不安全的通信信道上建立一个共享密钥。以下是如何在 Jav…

js实现防洪

js实现防洪

防抖(Debounce)实现 防抖的核心思想是在事件触发后延迟执行回调函数,若在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口调整等场景。 function debounce(f…