Vue使用photo-sphere-viewer360°×180°全景插件模擬VR看房譬正、房間切換

近兩年隨著VR的火熱合砂,市面上也出現(xiàn)了很多購房和二手房軟件小程序出現(xiàn)了VR看房功能且蓬,實現(xiàn)足不出戶就能親身體驗岩遗,那么類似這樣的功能是怎么實現(xiàn)的呢跌捆?

今天阿七就和大家一起來學習一下360°×180°全景插件photo-sphere-viewer和他的插件(這里只用到標記插件Markers)

photo-sphere-viewer

photo-sphere-viewer是基于three.jsuEvent 2

下載插件

使用npm或yarn下載安裝

npm install photo-sphere-viewer

yarn add photo-sphere-viewer

或者手動通過promise-polyfill下載安裝

使用

<template>
  <div id="viewer"></div>
</template>
<script>
    import {Viewer} from 'photo-sphere-viewer'
    import 'photo-sphere-viewer/dist/photo-sphere-viewer.css'
    export default {
        data(){
            return{
                viewer:'',
                imgurl1:require('../assets/1.jpg'),
            }
        },
        mounted(){
            this.viewer = new Viewer({
                container:document.querySelector('#viewer'),
                panorama:this.imgurl1,
                size:{
                    width: '100vw',
                    height: '50vh',
                },
            });
        }
    }
</script>
在這里插入圖片描述

常用參數(shù)

container(必需的)
類型:HTMLElement | string
包含全景圖或元素標識符的HTML元素钧敞。

container: document.querySelector('.viewer')
container: 'viewer' // will target [id="viewer"]

panorama (必需的)
類型: string | string[] | object
全景圖像的路徑锅必。對于等角的全景圖伐脖,它必須是單個字符串(我文章使用的就是720°全景圖)介粘;
對于立方體貼圖秉犹,它必須是數(shù)組或?qū)ο螅▽鶄€面)蛉谜。

// Equirectangular panorama :
panorama: 'path/to/panorama.jpg'

// Cubemap as array (order is important) :
panorama: [
  'path/to/left.jpg', 'path/to/front.jpg',
  'path/to/right.jpg', 'path/to/back.jpg',
  'path/to/top.jpg', 'path/to/bottom.jpg',
]

// Cubemap as object :
panorama: {
  left:   'path/to/left.jpg',  front:  'path/to/front.jpg',
  right:  'path/to/right.jpg', back:   'path/to/back.jpg',
  top:    'path/to/top.jpg',   bottom: 'path/to/bottom.jpg',
}

plugins
類型: array
啟用的插件列表。(如后面會用到的標記插件marker)

markers:切換標記
markersList:顯示標記列表
gyroscope:陀螺儀切換
stereo:切換立體聲視圖(VR)

caption
類型: string
導航欄中顯示的文本崇堵。如果導航欄被禁用型诚,它將一直顯示,但沒有按鈕鸳劳。允許使用HTML狰贯。
size
類型: { width: integer, height: integer }
最終大小(如果為全景圖容器)赏廓。默認情況下涵紊,container使用的大小,并在調(diào)整窗口大小時遵循幔摸。
navbar
導航欄的配置摸柄。

autorotate :切換自動旋轉(zhuǎn)
zoomOut :放大
zoomRange :縮放滑塊
zoomIn :縮小
zoom:zoomOut+ zoomRange+zoomIn
download :下載源圖像
caption :標題
fullscreen :切換全屏視圖

自定義導航欄按鈕:

 navbar: [
    {
      id: 'my-button',//按鈕的唯一標識符,在使用該navbar.getButton()方法時很有用
      content: 'Custom',//必需的,按鈕內(nèi)容
      title: 'Hello world',//鼠標懸停在按鈕上時顯示工具提示
      className: 'custom-button',//CSS類已添加到按鈕
      onClick: () => {
        alert('Hello from custom button');//必需的,單擊按鈕時調(diào)用的函數(shù)
      }
      //disabled:false,最初禁用該按鈕
      //hidden:false,最初隱藏按鈕
    },
  ]

更多參數(shù)參考官網(wǎng)

Markers插件

官方插件(在左側(cè)菜單中列出)可在目錄photo-sphere-viewer內(nèi)的主軟件包中找到dist/plugins既忆。一些插件還具有其他CSS文件驱负。

導入

import MarkersPlugin from 'photo-sphere-viewer/dist/plugins/markers'
import 'photo-sphere-viewer/dist/plugins/markers.css';

使用

所有插件均包含一個JavaScript類嗦玖,該類必須提供給plugins數(shù)組。一些插件還將采用嵌套數(shù)組中提供的配置對象电媳。

this.viewer = new Viewer({
    container:document.querySelector('#viewer'),
    panorama:this.imgurl1,
    size:{
        width: '100vw',
        height: '50vh',
    },
    plugins: [
        [MarkersPlugin, {
            markers: [
                {
                    id:'circle',
                    tooltip:'A circle of radius 30',
                    circle:30,
                    svgStyle : {
                        fill:'rgba(255,255,0,0.3)',
                        stroke:'yellow',
                        strokeWidth:'2px',
                    },
                    longitude: -1.5,
                    latitude: -0.28,
                    anchor: 'center right',
                }
            ],
        }],
    ],
});

初始化之后踏揣,可以使用getPlugin方法獲得插件實例,從而允許在插件上調(diào)用方法并訂閱事件匾乓。

const markersPlugin = this.viewer.getPlugin(MarkersPlugin);

markersPlugin.on('something', () => {
  /* ... */
});

點擊查看更多標記插件的參數(shù)方法

最終效果

最終代碼

<template>
  <div id="viewer"></div>
</template>
<script>
    import {Viewer} from 'photo-sphere-viewer'
    import MarkersPlugin from 'photo-sphere-viewer/dist/plugins/markers'
    import 'photo-sphere-viewer/dist/photo-sphere-viewer.css'
    import 'photo-sphere-viewer/dist/plugins/markers.css';
    export default {
        data(){
            return{
                viewer:'',
                imgurl1:require('../assets/1.jpg'),
                imgurl2:require('../assets/2.jpg'),
                imgurl3:require('../assets/3.jpg'),
            }
        },
        mounted(){
            this.viewer = new Viewer({
                container:document.querySelector('#viewer'),
                panorama:this.imgurl1,
                size:{
                    width: '100vw',
                    height: '50vh',
                },
                plugins: [
                    [MarkersPlugin, {
                        markers: [
                            {
                                id:'circle',
                                tooltip:'A circle of radius 30',
                                circle:30,
                                svgStyle : {
                                    fill:'rgba(255,255,0,0.3)',
                                    stroke:'yellow',
                                    strokeWidth:'2px',
                                },
                                longitude: -1.5,
                                latitude: -0.28,
                                anchor: 'center right',
                            }
                        ],
                    }],
                ],
            });

            const markersPlugin = this.viewer.getPlugin(MarkersPlugin);

            markersPlugin.on('select-marker', (e, marker) => {
                this.viewer.animate({
                    longitude: marker.config.longitude,
                    latitude: marker.config.latitude,
                    zoom: 100,
                    speed: '-2rpm',
                }).then(() =>
                    this.viewer.setPanorama(
                        this.imgurl2
                    ).then(() =>
                        markersPlugin.updateMarker({
                            id: marker.id,
                            longitude: -1.8,
                            latitude: -0.28,
                        }),
                        this.viewer.animate({
                            zoom: 50,
                            speed: '2rpm',
                        }).then(() =>
                            this.imgurl2 = this.imgurl3,
                            console.log("繼續(xù)操作")
                        )
                    )
                )
            });
        }
    }
</script>

最終效果

由于GIF過大捞稿,壓縮后效果欠佳,但不影響功能展示拼缝,建議自行運行一次


在這里插入圖片描述

素材圖片

在這里插入圖片描述

在這里插入圖片描述

在這里插入圖片描述

注:圖片來源網(wǎng)絡

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末娱局,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子咧七,更是在濱河造成了極大的恐慌衰齐,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,681評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件继阻,死亡現(xiàn)場離奇詭異耻涛,居然都是意外死亡,警方通過查閱死者的電腦和手機瘟檩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評論 3 399
  • 文/潘曉璐 我一進店門抹缕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人墨辛,你說我怎么就攤上這事卓研。” “怎么了睹簇?”我有些...
    開封第一講書人閱讀 169,421評論 0 362
  • 文/不壞的土叔 我叫張陵奏赘,是天一觀的道長。 經(jīng)常有香客問我太惠,道長磨淌,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,114評論 1 300
  • 正文 為了忘掉前任凿渊,我火速辦了婚禮梁只,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘嗽元。我一直安慰自己敛纲,他們只是感情好,可當我...
    茶點故事閱讀 69,116評論 6 398
  • 文/花漫 我一把揭開白布剂癌。 她就那樣靜靜地躺著淤翔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪佩谷。 梳的紋絲不亂的頭發(fā)上旁壮,一...
    開封第一講書人閱讀 52,713評論 1 312
  • 那天监嗜,我揣著相機與錄音,去河邊找鬼抡谐。 笑死裁奇,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的麦撵。 我是一名探鬼主播刽肠,決...
    沈念sama閱讀 41,170評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼免胃!你這毒婦竟也來了音五?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,116評論 0 277
  • 序言:老撾萬榮一對情侶失蹤羔沙,失蹤者是張志新(化名)和其女友劉穎躺涝,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體扼雏,經(jīng)...
    沈念sama閱讀 46,651評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡坚嗜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,714評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了诗充。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片苍蔬。...
    茶點故事閱讀 40,865評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖其障,靈堂內(nèi)的尸體忽然破棺而出银室,到底是詐尸還是另有隱情涂佃,我是刑警寧澤励翼,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站辜荠,受9級特大地震影響汽抚,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜伯病,卻給世界環(huán)境...
    茶點故事閱讀 42,211評論 3 336
  • 文/蒙蒙 一造烁、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧午笛,春花似錦惭蟋、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,699評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至癌佩,卻和暖如春木缝,著一層夾襖步出監(jiān)牢的瞬間便锨,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,814評論 1 274
  • 我被黑心中介騙來泰國打工我碟, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留放案,地道東北人。 一個月前我還...
    沈念sama閱讀 49,299評論 3 379
  • 正文 我出身青樓矫俺,卻偏偏與公主長得像吱殉,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子厘托,可洞房花燭夜當晚...
    茶點故事閱讀 45,870評論 2 361

推薦閱讀更多精彩內(nèi)容