如何在 Angular 10 中实现 360 度全景照片球查看器?

问题描述 投票:0回答:1

我正在开发 Angular 10 项目,希望集成 photo-sphere-viewer 库来显示 360 度图像。但是,我在 Angular 10 中正确设置它时遇到困难。我已经使用 npm 安装了 photo-sphere-viewer,但我不确定如何在我的 Angular 组件中正确导入和使用它。 任何人都可以提供如何在 Angular 10 中实现 photo-sphere-viewer 的分步指南或示例吗?

任何有关 Angular 兼容性最佳实践的建议也将不胜感激。

提前致谢!

https://photo-sphere-viewer.js.org/

angular 360-panorama photosphereviewer
1个回答
0
投票

首先我们可以使用以下命令安装库

photo-sphere-viewer

npm install @photo-sphere-viewer/core

然后我们需要使用以下命令安装它的依赖项

three.js

npm i three.js
npm i --save-dev @types/three

确保您拥有正确解决方案的元定义,如入门指南中所述。

index.html

<!DOCTYPE html>
<html lang="en">
  <head>
    <title>My app</title>
    <meta charset="UTF-8" />
    <base href="/" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  </head>
  <body>
    <app-root>Loading...</app-root>
  </body>
</html>

您必须包含照片查看器的相关 CSS。我将其添加到全局样式 css 文件中。

样式.css

@import '../node_modules/@photo-sphere-viewer/core/index.css';

html,
body,
#viewer {
  width: 100%;
  height: 100%;
  margin: 0;
  font-family: sans-serif;
}

您可以创建一个自定义指令

PhotoSphereViewerDirective
,它接受照片查看器配置的输入,我们用它来初始化照片查看器,在
ngAfterViewInit
钩子上(在初始化视图/HTML 时触发)。

@Directive({
  selector: '[photoSphereViewer]',
  standalone: true,
})
export class PhotoSphereViewerDirective {
  @Input('photoSphereViewer') viewerConfig = {};
  element = inject(ElementRef);

  ngAfterViewInit() {
    const viewer = new Viewer({
      container: this.element.nativeElement,
      ...this.viewerConfig,
    });
  }
}

最后,我们通过将其添加到

imports
数组中来在组件中使用该指令。

这里使用的是 Angular 10,因此没有独立组件,您需要做的就是摆脱指令装饰器的

standalone: true
。然后将其添加到应用程序模块或您想要使用该指令的其他模块的声明数组中。

@Component({
  selector: 'app-root',
  standalone: true,
  imports: [PhotoSphereViewerDirective],
  styles: [`:host {display: block;height:100vh;width:100vh}`],
  template: `
    <div [photoSphereViewer]="viewerConfig" id="viewer"></div>
  `,
})
export class App {
  viewerConfig = {
    panorama:
      'https://upload.wikimedia.org/wikipedia/commons/4/46/Greenland_scenery.jpg',
  };
}

Stackblitz 演示

© www.soinside.com 2019 - 2024. All rights reserved.