淘先锋技术网

首页 1 2 3 4 5 6 7

图片资料来源于:http://resource.haorooms.com/uploads/demo/media/3Dqj/index.html  因本人注册账号下载参考之后再到vue项目中,若有侵权请邮件:[email protected],我将马上更正,谢谢,大神。。。

示例效果图

 

前提:我本打算直接引用静态js,然后直接运行,后来一想,还是自己去npm,按照自己的理解去完成一遍,所以以下是我自己理解一点点之后,直接到vue中的记录,当然,这是我本地开发环境调试,打包之后是否有问题还没测试。

1、Photo Sphere Viewer基于 three.js,因此先安装依赖

     地址:https://www.npmjs.com/package/three   或 npm i three --save-dev

2、安装依赖Photo Sphere Viewer

    下载地址:https://photo-sphere-viewer.js.org/   或  npm install [email protected] --save-dev

 

我的vue目录结构截图

以下分别展示对应的编码文件内容:

1、index.vue

  <template>
    <div class="PSViewer" ref="psvdbg"></div>
  </template>


  <script type="text/javascript" charset="utf-8" src="./script.js"></script>

  <style >@import "./style.scss";</style>

 

2、script.js

var THREE   = require('three');
var PhotoSphereViewer   = require('photo-sphere-viewer');

export default {
    name: "PSViewer",

    data() {
        return {
            width:798,
            height:498,
            img:require('./images/sun.jpg'),
        };
    },

    beforeDestory(){},

    mounted(){
        this.init();
    },

    methods: {
        // photo-sphere-viewer
        init:function(){
            const self   = this;

            var PSV = new PhotoSphereViewer({
                // Panorama, given in base 64
                panorama: self.img,

                // Container
                container: self.$refs.psvdbg,

                // Deactivate the animation
                time_anim: false,

                // Display the navigation bar
                // navbar: true,
                navbar:[
                    'autorotate',
                    'zoom',
                    'fullscreen'
                ],
                navbar_style:{
                    backgroundColor:'rgba(58,67,77,0.7)'
                },

                // Resize the panorama
                size: {
                    width: '100%',
                    height: '498px'
                }
            });
        },
    }
};

 

3、style.scss  基本都是图标定位(我安装依赖之后,自动生成的图标位置有问题,所以重定位了)

.PSViewer{
    overflow: hidden;
    display: block;
    width: 100%;
    height: inherit;
    position: relative;
    .fix{
        position: fixed;
        left: 0;
        bottom: 0;
        right: 0;
        margin: 0 auto;
        width: 200px;
    }
    .psv-hud{
        width: 100%;
        height: 100%;
        display: block;
        position: absolute;
        left: 0;
        right: 0;
        top: 0;
        bottom: 35px;
        z-index: 10;
        svg{
            display: block;
            width: 100%;
            height: 100%
        }
    }
    .psv-container{
        display: block;
        width: 100%;
        height: inherit;
        .psv-loader-container{
            width: 50px;
            height: 50px;
            margin: 0 auto;
            position: absolute;
            left: 0;
            right: 0;
            top: 50%;
            margin-top: -25px;
            *{
                max-width: 100%;
                max-height: 100%;
            }
        }
    }
    .psv-canvas-container{
        display: block;
        width: 100%;
        height: inherit;
        canvas{
            display: block;
            width: 100%;
            height: inherit;
        }
    }
    .psv-navbar{
        &.psv-navbar--open{
            position: absolute;
            bottom: 0;
            width: 100%;
            z-index: 60;
            padding: 8px 0;
            display: block;
            background-color: rgba(255,255,255,0.7);
            .psv-caption{
                display: inline-block;
            }
            .psv-button{
                display: inline-block;
                width: 20px;
                height: 20px;
                cursor: pointer;
                float: left;
                &.psv-zoom-button{
                    float: left;
                    width: auto;
                    .psv-zoom-button-minus{
                        width: 20px;
                        float: left;
                        height: 20px;
                        background-color: transparent;
                        line-height: 20px;
                        color: rgba(255, 255, 255, 0.7);
                        cursor: pointer;
                    }
                    .psv-zoom-button-range{
                        float: left;
                        padding: 10px 8px 0 8px;
                        background-color: transparent;
                        cursor: pointer;
                        .psv-zoom-button-line{
                            width: 50px;
                            height: 2px;
                            background-color: rgba(0, 0, 0, 0.7);
                            position: relative;
                            .psv-zoom-button-handle{
                                position: absolute;
                                top: -3px;
                                left: -3.5px;
                                width: 8px;
                                height: 8px;
                                border-radius: 50%;
                                background-color: rgba(0, 0, 0, 0.7);
                            }
                        }
                    }
                    .psv-zoom-button-plus{
                        width: 20px;
                        float: left;
                        height: 20px;
                        background-color: transparent;
                        line-height: 20px;
                        color: rgba(255, 255, 255, 0.7);
                        cursor: pointer;
                    }
                }
                &.psv-autorotate-button{
                    margin-right: 8px;
                    margin-left: 8px;
                }
                &.psv-fullscreen-button{
                   float:right;
                   margin-right: 8px;
                }
            }
            .psv-caption{
                height: inherit;
            }
        }
    }
}

 

基本上复制我上面的内容就可以使用了,希望可以帮到大家,,,,【其实我是怕自己搞丢了文件,忘记了才马上写日志,尴尬!!!】

 

===============以下是单页面示例代码:

若是直接使用单页面方式的3d全景,可以去这里下载:http://resource.haorooms.com/uploads/demo/media/3Dqj/index.html

反正注册账号不用收费,若是不需要资源文件,只看代码的,可以接着看我以下说的单页面示例代码(资源我不会放出来,也不用联系我,因为上面地址的哥们说了,尊重劳动成果,所以大家需要的可以去下载,体谅一下那位大哥。):

 

只需要引入这些资源:

   <style type="text/css">
       <!-- 移动端的一些意外 css解决方案 -->
        * { touch-action: pan-y; } 
    </style>
    <script src="js/three.min.js"></script>
    <script src="js/photo-sphere-viewer.min.js"></script>

 

     html下body内的内容

    

<div id="your-pano"></div>

    <form method="get" action="example1.html">
        <p style="text-align: center;">
            <input type="file" name="pano" id="pano" />
        </p>
    </form>

    <script type="text/javascript">
        window.onload = function(ev) {
            // 移动端的一些意外 js解决方案
            document.addEventListener('touchstart',function(){
                
            },{ passive: false });
            document.getElementById('pano').addEventListener('change', upload, false);
        };


        // Load a panorama stored on the user's computer
        function upload() {
            // Retrieve the chosen file and create the FileReader object
            var file = document.getElementById('pano').files[0];
            var reader = new FileReader();

            reader.onload = function() {
                initVr(document.getElementById('your-pano'),reader.result)
            };

            reader.readAsDataURL(file);
        }


        function initVr(div,imgurl){
            var PSV = new PhotoSphereViewer({
                // Panorama, given in base 64
                panorama: imgurl,

                // Container
                container: div,

                // Deactivate the animation
                time_anim: false,

                // Display the navigation bar
                navbar: true,

                // Resize the panorama
                size: {
                    width: '100%',
                    height: '400px'
                }
            });
        }
    </script>

 

    刚开始时截图

选择资源图片之后的截图

移动模式下截图