vue中利用three.js实现全景图的完整示例


Posted in Vue.js onDecember 07, 2020

粗暴一点,直接上代码:

第一步:

通过指令下载three.js

npm install three -S

第二步:

在组件中引用

import * as THREE from 'three'

第三步:

html部分

<div id="container"></div>

js部分

<script>
  import * as THREE from 'three';
  var camera;
  var renderer;
  var scene;
  export default {
    name: 'panorama',
    data() {
      return {
        bigImg: require("../../../../../images/项目案例/001.jpg"),//全景图图片路径
      }
    },
    mounted() {
      // 调用全景图函数
      this.$nextTick(() => {
        this.init();
        this.animate();
      })
    },
    methods: {
      // 全景图配置函数---------------
      init() {
        var container = document.getElementById('container');
        // 创建渲染器
        renderer = new THREE.WebGLRenderer();
        renderer.setPixelRatio(window.devicePixelRatio);
        // 设置画布的宽高
        renderer.setSize(window.innerWidth, window.innerHeight);
        // 判断容器中子元素的长度
        let childs = container.childNodes;
        if (container.childNodes.length > 0) {
          container.removeChild(childs[0]);
          container.appendChild(renderer.domElement);
        } else {
          container.appendChild(renderer.domElement);
        }
        //   container.appendChild(renderer.domElement);
        // 创建场景
        scene = new THREE.Scene();
        // 创建相机
        camera = new THREE.PerspectiveCamera(90, window.innerWidth / window.innerHeight, 0.1, 100);
        camera.position.set(0, 0, 0);
        var material = new THREE.MeshBasicMaterial();//材质
        var texture = new THREE.TextureLoader().load(this.bigImg);
        material.map = texture;
        var skyBox = new THREE.Mesh(
          new THREE.SphereBufferGeometry(100, 100, 100),
          material
        );
        skyBox.geometry.scale(1, 1, -1);
        scene.add(skyBox);
        window.addEventListener('resize', this.onWindowResize, false);
        var bMouseDown = false;
        var x = -1;
        var y = -1;
        // 添加鼠标事件
        container.onmousedown = function (event) {
          event.preventDefault();//取消默认事件
          x = event.clientX;
          y = event.clientY;
          bMouseDown = true;
        }
        container.onmouseup = function (event) {
          event.preventDefault();
          bMouseDown = false;
        }
        container.onmousemove = function (event) {
          event.preventDefault();
          if (bMouseDown) {
            skyBox.rotation.y += -0.005 * (event.clientX - x);
            skyBox.rotation.x += -0.005 * (event.clientY - y);
            if (skyBox.rotation.x > Math.PI / 2) {
              skyBox.rotation.x = Math.PI / 2
            }
            if (skyBox.rotation.x < -Math.PI / 2) {
              skyBox.rotation.x = -Math.PI / 2
            }
            x = event.clientX;
            y = event.clientY;
          }
        }
        container.onmousewheel = function (event) {
          event.preventDefault();
          if (event.wheelDelta != 0) {
            camera.fov += event.wheelDelta > 0 ? 1 : -1;
            if (camera.fov > 150) {
              camera.fov = 150;
            }
            else if (camera.fov < 30) {
              camera.fov = 30;
            }
            camera.updateProjectionMatrix();
          }
        }
      },
      onWindowResize() {
        // 窗口缩放的时候,保证场景也跟着一起缩放
        camera.aspect = window.innerWidth / window.innerHeight;
        camera.updateProjectionMatrix();
        renderer.setSize(window.innerWidth, window.innerHeight);
      },
      animate() {
        requestAnimationFrame(this.animate);
        renderer.render(scene, camera);
      }
    },
  }
</script>

到此这篇关于vue中利用three.js实现全景图的文章就介绍到这了,更多相关vue用three.js实现全景图内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Vue.js 相关文章推荐
Vue项目利用axios请求接口下载excel
Nov 17 Vue.js
VUE+Element实现增删改查的示例源码
Nov 23 Vue.js
对vue生命周期的深入理解
Dec 03 Vue.js
vue使用exif获取图片经纬度的示例代码
Dec 11 Vue.js
Vue 集成 PDF.js 实现 PDF 预览和添加水印的步骤
Jan 22 Vue.js
vue 计算属性和侦听器的使用小结
Jan 25 Vue.js
vue打开新窗口并实现传参的图文实例
Mar 04 Vue.js
Vue图片裁剪组件实例代码
Jul 02 Vue.js
Vue3中的Refs和Ref详情
Nov 11 Vue.js
Element-ui Layout布局(Row和Col组件)的实现
Dec 06 Vue.js
vue-cli3.x配置全局的scss的时候报错问题及解决
Apr 30 Vue.js
Vue深入理解插槽slot的使用
Aug 05 Vue.js
详解Vue中的自定义指令
Dec 07 #Vue.js
vue-router定义元信息meta操作
Dec 07 #Vue.js
Vue如何实现验证码输入交互
Dec 07 #Vue.js
Vue $attrs &amp; inheritAttr实现button禁用效果案例
Dec 07 #Vue.js
vuex Module将 store 分割成模块的操作
Dec 07 #Vue.js
浅谈Vue使用Elementui修改默认的最快方法
Dec 05 #Vue.js
vue+element_ui上传文件,并传递额外参数操作
Dec 05 #Vue.js
You might like
电脑硬件及电脑配置知识大全
2020/03/17 数码科技
免费手机号码归属地API查询接口和PHP使用实例分享
2014/04/10 PHP
php判断并删除空目录及空子目录的方法
2015/02/11 PHP
php检测url是否存在的方法
2015/04/14 PHP
浅谈PHP中关于foreach使用引用变量的坑
2016/11/14 PHP
七种PHP开发环境搭建工具
2020/06/28 PHP
jQuery 位置函数offset,innerWidth,innerHeight,outerWidth,outerHeight,scrollTop,scrollLeft
2010/03/23 Javascript
使用jQuery模板来展现json数据的代码
2010/10/22 Javascript
JavaScript实现N皇后问题算法谜题解答
2014/12/29 Javascript
jQuery常用数据处理方法小结
2015/02/20 Javascript
使用纯javascript实现放大镜效果
2015/03/18 Javascript
js编写贪吃蛇的小游戏
2020/08/24 Javascript
概述javascript在Google IE中的调试技巧
2016/11/24 Javascript
Angular.Js的自动化测试详解
2016/12/09 Javascript
详解Javascript中DOM的范围
2017/02/13 Javascript
js 索引下标之li集合绑定点击事件
2018/01/12 Javascript
React Native中NavigatorIOS组件的简单使用详解
2018/01/27 Javascript
简化vuex的状态管理方案的方法
2018/06/02 Javascript
React 使用recharts实现散点地图的示例代码
2018/12/07 Javascript
微信小程序自定义模态弹窗组件详解
2019/12/24 Javascript
react使用CSS实现react动画功能示例
2020/05/18 Javascript
[01:55]TI9显影之尘系列 - Evil Geniuses
2019/08/22 DOTA
Python(Tornado)模拟登录小米抢手机
2013/11/12 Python
10种检测Python程序运行时间、CPU和内存占用的方法
2015/04/01 Python
Python实现类似jQuery使用中的链式调用的示例
2016/06/16 Python
Python验证文件是否可读写代码分享
2017/12/11 Python
Python数据分析之双色球统计两个红和蓝球哪组合比例高的方法
2018/02/03 Python
python实现大转盘抽奖效果
2019/01/22 Python
完美解决Python matplotlib绘图时汉字显示不正常的问题
2019/01/29 Python
python网络爬虫 Scrapy中selenium用法详解
2019/09/28 Python
解决Django部署设置Debug=False时xadmin后台管理系统样式丢失
2020/04/07 Python
Django中的模型类设计及展示示例详解
2020/05/29 Python
python的setattr函数实例用法
2020/12/16 Python
单位单身证明样本
2014/10/11 职场文书
python超详细实现完整学生成绩管理系统
2022/03/17 Python
MySQL中EXPLAIN语句及用法
2022/05/20 MySQL