photo-sphere-viewer全景插件使用笔记

 1、安装

cnpm i photo-sphere-viewer --save

2、使用

2-1、新建Panorama组件

<template>
    <div id="viewer"></div>
    <!-- <div class="swiper">
      <div class="swiper_item" @click="changeImg(0)">
        <img src="../assets/imgs/hall1.png" alt />
      </div>
      <div class="swiper_item" @click="changeImg(1)">
        <img src="../assets/imgs/hall2.png" alt />
      </div>
      <div class="swiper_item" @click="changeImg(2)">
        <img src="../assets/imgs/hall3.png" alt />
      </div>
    </div> -->
</template>

<script>
import { Viewer } from "photo-sphere-viewer";
import "photo-sphere-viewer/dist/photo-sphere-viewer.css";
import { MarkersPlugin } from "photo-sphere-viewer/dist/plugins/markers";
import "photo-sphere-viewer/dist/plugins/markers.css";

export default {
  name: "HelloWorld",
  props: {
    allMarkers: {
      type: Array,
      default:()=>[]
    },
  },
  data() {
    return {
      markersPlugin: null,
      viewer: null,
      selectedImg: require("../assets/imgs/1.png"),
      imgs: [
        require("../assets/imgs/1.png"),
        require("../assets/imgs/2.png"),
        require("../assets/imgs/3.png")
      ],
      selectMarkers: [],
    };
  },

  mounted() {
    this.selectMarkers = this.allMarkers[0].markers;
    this.init();
  },
  methods: {
    init() {
      if (this.viewer)
        try {
          this.viewer.destroy();
        } catch (e) {
          console.log(e);
          const viewer = document.querySelector("#viewer");
          viewer.removeChild(viewer.childNodes[0]);
        }

      this.viewer = new Viewer({
        container: document.querySelector("#viewer"),
        panorama: this.selectedImg,
        caption: "全景",
        defaultLong: 0,
        defaultLat: -1,
        defaultZoomLvl: 0,
        loadingTxt: "加载中...",
        // loadingImg:'',
        // navbar: [
        //   'autorotate',
        //   'zoom',
        //   'caption',
        //   'fullscreen'
        // ],
        size: {
          width: "100vw",
          height: "100vh"
        },
        plugins: [
          [
            MarkersPlugin,
            {
              markers: this.selectMarkers
            }
          ]
        ]
      });
      this.viewer.once("ready", () => {
        // console.log("ready");
        // 自动旋转
        // this.viewer.startAutorotate()
      });

      this.markersPlugin = this.viewer.getPlugin(MarkersPlugin);
      this.markersPlugin.on("select-marker", (e, marker) => {
        // 点击选中标注
        // console.log("select-marker e:", e);
        // console.log("marker:", marker);
        this.$emit("markerClick", marker);
        //if (e.args[0].config.note)
          //this.viewer.setViewer(this.itemArr[e.args[0].config.note].img);
      });
      this.viewer.on("click", (e, data) => {
        //  console.log('点击事件对象:', e)
        // console.log('点击事件数据data:', data)
        // 添加标注
        // let configArr = Object.keys(this.markersPlugin.markers).map(
        //   item => this.markersPlugin.markers[item].config
        // );
        // localStorage.setItem("configArr", JSON.stringify(configArr));
      });
      this.viewer.on('position-updated', (e, position) => {
        // console.log(`new position is longitude: ${position.longitude} latitude: ${position.latitude}`);
      });

    },
    changeImg(index) {
      this.selectedImg = this.imgs[index];
      //this.viewer.setPanorama(this.selectedImg);
      this.selectMarkers = this.allMarkers[index].markers;
      this.init();
    }
  },
  watch: {
    allMarkers (newValue, oldValue) {

    }
  },
};
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped lang="scss">

  #viewer {
    width: 100%!important;
    height: 100%!important;
    position: absolute;
    left: 0;
    top: 0;
    z-index: 2;
  }
  // .swiper {
  //   position: absolute;
  //   left: 0;
  //   top: 30%;
  //   display: flex;
  //   align-items: center;
  //   cursor: pointer;
  //   z-index: 6;
  //   background: rgba(0, 0, 0, 0.5);
  //   width: 100%;
  //   height: 100px;
  //   justify-content: center;
  //   .swiper_item {
  //     width: 180px;
  //     height: 90px;
  //     border: 2px solid #fff;
  //     img {
  //       width: 100%;
  //       height: 100%;
  //     }
  //   }
  // }

</style>

2-2、在父组件中使用

 <Viewer ref="viewer" :allMarkers="allMarkers" @markerClick="markerClick"></Viewer>
import Viewer from "@/components/Panorama";
components: {
    Viewer,
},
data() {
    return {
         allMarkers: [
        {
          id: 1,
          markers: [
            {
              id: "circle1",
              tooltip: "告别厅",
              image: require("../assets/imgs/location.png"),
              width: 42,
              height: 42,
              type: 2, //0:火化间;1:冷藏间;2:礼厅;3:整容室;4:寄存楼
              latitude: -0.4221159803388941,
              longitude: 0.03261432372133218,
              //image:require('http://r7usw4smv.hn-bkt.clouddn.com/location.png'),
              // circle: 30,
              // svgStyle: {
              //   fill: "rgba(255,255,0,0.3)",
              //   stroke: "yellow",
              //   strokeWidth: "2px"
              // },
              tooltip: {
                content: "告别厅",
                position: "top center"
              },

              anchor: "center right"
            },
            {
              id: "circle2",
              tooltip: "火化车间",
              image: require("../assets/imgs/location.png"),
              width: 42,
              height: 42,
              type: 0, //0:火化间;1:冷藏间;2:礼厅;3:整容室;4:寄存楼
              latitude: -0.3096705823556736,
              longitude: 1.1343366046831023,
              //image:require('http://r7usw4smv.hn-bkt.clouddn.com/location.png'),
              // circle: 30,
              // svgStyle: {
              //   fill: "rgba(255,255,0,0.3)",
              //   stroke: "yellow",
              //   strokeWidth: "2px"
              // },
              tooltip: {
                content: "火化车间",
                position: "top center"
              },

              anchor: "center right"
            },
            {
              id: "circle3",
              tooltip: "冷藏车间",
              image: require("../assets/imgs/location.png"),
              width: 42,
              height: 42,
              type: 1, //0:火化间;1:冷藏间;2:礼厅;3:整容室;4:寄存楼
              latitude: -0.28699595792868204,
              longitude: 0.9175876718648941,
              //image:require('http://r7usw4smv.hn-bkt.clouddn.com/location.png'),
              // circle: 30,
              // svgStyle: {
              //   fill: "rgba(255,255,0,0.3)",
              //   stroke: "yellow",
              //   strokeWidth: "2px"
              // },
              tooltip: {
                content: "冷藏车间",
                position: "top center"
              },

              anchor: "center right"
            }
          ]
        },
        {
          id: 2,
          markers: [
            {
              id: "circle21",
              tooltip: "告别厅",
              image: require("../assets/imgs/location.png"),
              width: 42,
              height: 42,
              type: 2, //0:火化间;1:冷藏间;2:礼厅;3:整容室;4:寄存楼
              longitude: 3.0766780303950747,
              latitude: -0.21467843779267137,
              //image:require('http://r7usw4smv.hn-bkt.clouddn.com/location.png'),
              // circle: 30,
              // svgStyle: {
              //   fill: "rgba(255,255,0,0.3)",
              //   stroke: "yellow",
              //   strokeWidth: "2px"
              // },
              tooltip: {
                content: "告别厅",
                position: "top center"
              },

              anchor: "center right"
            },
            {
              id: "circle22",
              tooltip: "火化车间",
              image: require("../assets/imgs/location.png"),
              width: 42,
              height: 42,
              type: 0, //0:火化间;1:冷藏间;2:礼厅;3:整容室;4:寄存楼
              longitude: 3.286823799201783,
              latitude: -0.21291828556393577,
              //image:require('http://r7usw4smv.hn-bkt.clouddn.com/location.png'),
              // circle: 30,
              // svgStyle: {
              //   fill: "rgba(255,255,0,0.3)",
              //   stroke: "yellow",
              //   strokeWidth: "2px"
              // },
              tooltip: {
                content: "火化车间",
                position: "top center"
              },

              anchor: "center right"
            },
            {
              id: "circle23",
              tooltip: "冷藏车间",
              image: require("../assets/imgs/location.png"),
              width: 42,
              type: 1, //0:火化间;1:冷藏间;2:礼厅;3:整容室;4:寄存楼
              height: 42,
              longitude: 3.2390790716404045,
              latitude: -0.10984851141091401,
              //image:require('http://r7usw4smv.hn-bkt.clouddn.com/location.png'),
              // circle: 30,
              // svgStyle: {
              //   fill: "rgba(255,255,0,0.3)",
              //   stroke: "yellow",
              //   strokeWidth: "2px"
              // },
              tooltip: {
                content: "冷藏车间",
                position: "top center"
              },

              anchor: "center right"
            }
          ]
        },
        {
          id: 3,
          markers: [
            {
              id: "circle31",
              tooltip: "火化车间",
              image: require("../assets/imgs/location.png"),
              width: 42,
              height: 42,
              type: 0, //0:火化间;1:冷藏间;2:礼厅;3:整容室;4:寄存楼
              longitude: 3.473472070069134,
              latitude: -0.1269166471157681,
              //image:require('http://r7usw4smv.hn-bkt.clouddn.com/location.png'),
              // circle: 30,
              // svgStyle: {
              //   fill: "rgba(255,255,0,0.3)",
              //   stroke: "yellow",
              //   strokeWidth: "2px"
              // },
              tooltip: {
                content: "火化车间",
                position: "top center"
              },

              anchor: "center right"
            },
            {
              id: "circle32",
              tooltip: "告别厅",
              image: require("../assets/imgs/location.png"),
              width: 42,
              height: 42,
              type: 2, //0:火化间;1:冷藏间;2:礼厅;3:整容室;4:寄存楼
              longitude: 3.328840666762973,
              latitude: -0.1983232261151171,
              //image:require('http://r7usw4smv.hn-bkt.clouddn.com/location.png'),
              // circle: 30,
              // svgStyle: {
              //   fill: "rgba(255,255,0,0.3)",
              //   stroke: "yellow",
              //   strokeWidth: "2px"
              // },
              tooltip: {
                content: "告别厅",
                position: "top center"
              },

              anchor: "center right"
            },
            {
              id: "circle33",
              tooltip: "冷藏车间",
              image: require("../assets/imgs/location.png"),
              width: 42,
              height: 42,
              type: 1, //0:火化间;1:冷藏间;2:礼厅;3:整容室;4:寄存楼
              longitude: 3.5987922730603397,
              latitude: -0.23625929132905643,
              //image:require('http://r7usw4smv.hn-bkt.clouddn.com/location.png'),
              // circle: 30,
              // svgStyle: {
              //   fill: "rgba(255,255,0,0.3)",
              //   stroke: "yellow",
              //   strokeWidth: "2px"
              // },
              tooltip: {
                content: "冷藏车间",
                position: "top center"
              },

              anchor: "center right"
            }
          ]
        }
      ], //馆内标记点
}
},
methods:{
     //选择馆
    changeHall(num) {
      this.selectBtn = `b${num + 1}`;
      this.init();
      //获取标记点

      this.$refs.viewer.changeImg(num);
    },
    //点击标记点获取数据
    async markerClick(marker) {
      // console.log(marker,'点击的标记点')
      this.loading=Loading.service({
          lock: true,
          text: '加载中...',
          spinner: 'el-icon-loading',
          background: 'rgba(0, 0, 0, 0.7)'
        });
      let params = {
        orgCode: this.selectBtn,
        type: marker.config.type
      };
      let res = await fetchNowData(params);

    },
}

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值