当前位置:首页 > JavaScript

js实现街景图

2026-03-16 03:41:13JavaScript

使用 Google Maps JavaScript API 实现街景

在HTML文件中引入Google Maps API脚本,替换YOUR_API_KEY为实际API密钥:

<script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initMap&libraries=streetView" async defer></script>

创建街景容器并初始化:

<div id="street-view" style="width: 100%; height: 500px;"></div>
<script>
  function initMap() {
    const fenway = { lat: 42.345573, lng: -71.098326 };
    const panorama = new google.maps.StreetViewPanorama(
      document.getElementById("street-view"),
      {
        position: fenway,
        pov: { heading: 34, pitch: 10 },
      }
    );
  }
</script>

通过Three.js自定义街景实现

安装Three.js库:

npm install three

创建全景查看器基础代码:

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();

街景控制参数配置

Google街景常用控制参数:

const panoramaOptions = {
  position: {lat: 40.756, lng: -73.986},  // 坐标位置
  pov: {
    heading: 270,    // 0-360度水平视角
    pitch: 0,        // -90到90度垂直视角
    zoom: 1          // 缩放级别
  },
  addressControl: true,
  showRoadLabels: true,
  zoomControl: true,
  linksControl: true
};

街景导航功能实现

添加街景导航控制按钮:

document.getElementById('rotate-left').addEventListener('click', () => {
  panorama.setPov({
    heading: (panorama.getPov().heading - 30) % 360,
    pitch: panorama.getPov().pitch
  });
});

document.getElementById('zoom-in').addEventListener('click', () => {
  panorama.setZoom(panorama.getZoom() + 1);
});

移动端适配处理

添加触摸事件支持:

const touchHandler = new Hammer(document.getElementById('street-view'));
touchHandler.get('pan').set({ direction: Hammer.DIRECTION_ALL });

touchHandler.on('pan', (ev) => {
  panorama.setPov({
    heading: panorama.getPov().heading - ev.deltaX * 0.2,
    pitch: Math.max(-90, Math.min(90, panorama.getPov().pitch + ev.deltaY * 0.1))
  });
});

性能优化建议

使用低分辨率预览模式:

js实现街景图

const lowResPanorama = new google.maps.StreetViewPanorama(
  container,
  {
    position: location,
    visible: true,
    enableCloseButton: false,
    showRoadLabels: false,
    zoomControlOptions: {
      position: google.maps.ControlPosition.LEFT_BOTTOM
    },
    linksControl: false
  }
);

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

相关文章

js实现vue

js实现vue

Vue.js 简介 Vue.js 是一个渐进式 JavaScript 框架,用于构建用户界面。其核心库专注于视图层,易于与其他库或现有项目整合。 实现 Vue.js 的基本步骤 安装 Vue.j…

js实现全屏

js实现全屏

实现全屏的基本方法 使用JavaScript实现全屏功能主要依赖Element.requestFullscreen()方法。现代浏览器均支持此API,但不同浏览器可能需要添加前缀。 // 触发全屏…

js实现日历

js实现日历

实现日历的基本思路 使用JavaScript实现日历的核心是动态生成日期表格,并处理月份切换逻辑。需要计算当前月的天数、起始星期几,并动态渲染到页面上。 获取当前日期信息 通过Date对象获取当前年…

js实现换肤

js实现换肤

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

js实现点击显示和隐藏

js实现点击显示和隐藏

实现点击显示和隐藏的JavaScript方法 使用classList.toggle切换类名 通过添加/移除CSS类控制元素的显示与隐藏,需提前在CSS中定义隐藏样式(如display: none)。…

js实现授权

js实现授权

授权流程设计 授权流程通常涉及前端与后端的交互,常见方案包括OAuth2.0、JWT等。以JWT为例的典型流程: 用户提交凭证(如用户名密码)到认证服务 服务端验证通过后生成包含用户信息的JWT令牌…