当前位置:首页 > JavaScript

js实现360全景

2026-03-01 05:05:02JavaScript

实现360全景的JavaScript方法

使用Three.js库

Three.js是一个强大的3D JavaScript库,适合创建360全景效果。以下是一个基础实现示例:

import * as THREE from 'three';

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 geometry = new THREE.SphereGeometry(500, 60, 40);
geometry.scale(-1, 1, 1);
const texture = new THREE.TextureLoader().load('panorama.jpg');
const material = new THREE.MeshBasicMaterial({ map: texture });
const sphere = new THREE.Mesh(geometry, material);
scene.add(sphere);

camera.position.set(0, 0, 0.1);

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

使用Panolens.js库

Panolens.js是专门为全景查看设计的轻量级库:

const panorama = new PANOLENS.ImagePanorama('panorama.jpg');
const viewer = new PANOLENS.Viewer({
    container: document.getElementById('panorama-container')
});
viewer.add(panorama);

纯CSS实现简单全景

对于简单的需求,可以使用CSS 3D变换:

<div class="panorama-container">
    <img src="panorama.jpg" class="panorama-image">
</div>

<style>
.panorama-container {
    width: 100%;
    height: 100vh;
    overflow: hidden;
    perspective: 1000px;
}
.panorama-image {
    width: 300%;
    height: 100%;
    transform-style: preserve-3d;
    animation: rotate 60s linear infinite;
}
@keyframes rotate {
    from { transform: rotateY(0deg); }
    to { transform: rotateY(360deg); }
}
</style>

移动设备支持

为支持移动设备陀螺仪控制:

window.addEventListener('deviceorientation', (event) => {
    const beta = event.beta;  // -180到180
    const gamma = event.gamma; // -90到90
    // 根据陀螺仪数据更新相机位置
    camera.rotation.set(
        THREE.MathUtils.degToRad(beta * 0.5),
        THREE.MathUtils.degToRad(gamma * 0.5),
        0
    );
}, true);

性能优化建议

  • 使用压缩的等矩形全景图(建议分辨率不超过8000x4000)
  • 启用WebGL抗锯齿
  • 对于Three.js,考虑使用BufferGeometry代替常规Geometry
  • 实现动态分辨率调整
window.addEventListener('resize', () => {
    camera.aspect = window.innerWidth / window.innerHeight;
    camera.updateProjectionMatrix();
    renderer.setSize(window.innerWidth, window.innerHeight);
});

交互功能实现

添加热点和交互控制:

// Three.js中添加热点
const hotspotGeometry = new THREE.SphereGeometry(1, 16, 16);
const hotspotMaterial = new THREE.MeshBasicMaterial({ color: 0xff0000 });
const hotspot = new THREE.Mesh(hotspotGeometry, hotspotMaterial);
hotspot.position.set(0, 0, -10);
scene.add(hotspot);

// 点击事件
window.addEventListener('click', (event) => {
    const mouse = new THREE.Vector2(
        (event.clientX / window.innerWidth) * 2 - 1,
        -(event.clientY / window.innerHeight) * 2 + 1
    );
    const raycaster = new THREE.Raycaster();
    raycaster.setFromCamera(mouse, camera);
    const intersects = raycaster.intersectObjects(scene.children);
    if (intersects.length > 0) {
        console.log('点击了全景中的对象');
    }
});

js实现360全景

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

相关文章

js实现

js实现

实现 JavaScript 功能的方法 在 JavaScript 中实现特定功能通常涉及多个步骤。以下是常见的实现方法: 基础语法和变量声明 使用 let 或 const 声明变量: let co…

js实现拖拽

js实现拖拽

实现拖拽的基本步骤 通过监听鼠标事件(mousedown、mousemove、mouseup)实现拖拽功能。以下是核心代码逻辑: const draggableElement = document…

js实现轮播图

js实现轮播图

基础轮播图实现 使用HTML、CSS和JavaScript实现一个简单的自动轮播图。HTML结构包含一个容器和多个图片项。 <div class="slider"> <div…

js实现倒计时

js实现倒计时

使用 setInterval 实现倒计时 通过 setInterval 定时器每秒更新剩余时间,适用于简单倒计时场景。 function countdown(seconds, callbac…

js实现验证码

js实现验证码

使用Canvas生成图形验证码 在HTML中创建一个Canvas元素用于绘制验证码。通过JavaScript随机生成数字或字母组合,并添加干扰线、噪点等干扰元素增强安全性。 <canvas…

h5实现全景

h5实现全景

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