浏览代码

fix: 差不多写好了

xzw 2 年之前
父节点
当前提交
da45aa5ede
共有 2 个文件被更改,包括 63 次插入59 次删除
  1. 8 2
      src/pages/LaserBim.vue
  2. 55 57
      src/utils/ConvertViews.js

+ 8 - 2
src/pages/LaserBim.vue

@@ -84,14 +84,20 @@ let getView = ()=>{
     }
 } 
 
-const initConvertView = () => {
-    if(sourceApp && targetApp/* && this.sourceSceneName != sourceApp.Potree.settings.number*/){//存在且和当前不同
+const initConvertView = (noNeedBindEvent) => {
+    if(sourceApp && targetApp ){//存在且和当前不同
         views.init(sourceApp, targetApp , sourceApp.viewer.inputHandler.domElement, 'laser', getView(), 
                     sourceApp.viewer.images360.panos.slice(0,2).map(e=>e.position))
     }
 }
 
 const onLoadSource = () => {
+    
+    if(views.loaded){
+        views.clear({dontClearTarget:true})   
+    }
+
+
     sourceApp = sourceFrame.value.contentWindow
     sourceApp.loaded.then(sdk => {
         if (mode.value != 0) {

+ 55 - 57
src/utils/ConvertViews.js

@@ -10,18 +10,23 @@ export default class ConvertViews {
     }
 
      
-    clear(){
+    clear(o={}){
         this.loaded = false;
-        this.targetApp = this.sourceApp = null;
+        this.sourceApp = null;
+        if(!o.dontClearTarget){
+            this.targetApp = null
+        }
+         
     }
     
-    init(sourceApp, targetApp, dom2, sceneType, cameraData, sourcePano) {
+    init(sourceApp, targetApp, sourceDom, sceneType, cameraData, sourcePano) {
         //if (!this.player1.model.panos.list.length || !this.player2.model.panos.list.length) return
         
         if(this.loaded || !targetApp ) return 
-        
+        let needBindEvent = !this.targetApp // 若targetApp存在表明targetApp的dom未换掉,事件还存在
         this.sourceApp = sourceApp
         this.targetApp = targetApp
+        this.sourceDom = sourceDom
         let viewer = this.viewer = targetApp.viewer 
         
         this.needConvertAxis = sceneType == '4dkk'
@@ -57,64 +62,57 @@ export default class ConvertViews {
         ) */
         this.loaded = true
         this.receive(cameraData)
-        
-        
-        
-        
-        {//传递到另一边的dom
-            let getEvent = (type, e)=>{
-                return new MouseEvent(type, {
-                    bubbles: false,//?
-                    cancelable: true,
-                    view: this.sourceApp,
-                    clientX: e.clientX, clientY: e.clientY, 
-                    button: e.button, buttons: e.buttons,  which: e.which,
-                    altKey: e.altKey, ctrlKey: e.ctrlKey, shiftKey:e.shiftKey, metaKey: e.metaKey, 
-                    detail:e.detail, 
-                    //target :  dom2  
-                });
-                
-            }
-            
-            
-            this.lockCamera(true)
-            let dom1 = viewer.getDomElement() 
-            dom1.addEventListener('mousedown',(e)=>{
-                let event = getEvent('mousedown', e)
-                dom2.dispatchEvent(event)  
-            })
-            dom1.addEventListener('mousemove',(e)=>{
-                let event = getEvent('mousemove', e)
-                dom2.dispatchEvent(event)  
-            })
-            dom1.addEventListener('mouseup',(e)=>{
-                let event = getEvent('mouseup', e)
-                sourceApp.dispatchEvent(event)   //mouseup 在laser中加在window上的
-            })
-            dom1.addEventListener('mousewheel',(e)=>{
-                let event = getEvent('mousewheel', e)
-                event.wheelDelta = e.wheelDelta  //wheelDelta没法在getEvent参数中赋值
-                dom2.dispatchEvent(event)  
-            })
-            let stop = (e)=>{
-                /* var event = document.createEvent('MouseEvents');
-                event.initMouseEvent('mouseup', true, false, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
-                dom2.dispatchEvent(event)   */
-                let event = getEvent('mouseup', e)
-                dom2.dispatchEvent(event)   
-            }
-            dom1.addEventListener('mouseout',stop)
-            dom1.addEventListener('mouseover',stop)
-             
-        } 
-        
-        
+        needBindEvent && this.bindCamEvent() 
+          
     }
 
 
 
  
-
+    bindCamEvent(){//传递到另一边的dom 
+        this.lockCamera(true)
+        
+        let getEvent = (type, e)=>{
+            return new MouseEvent(type, {
+                bubbles: false,//?
+                cancelable: true,
+                view: this.sourceApp,
+                clientX: e.clientX, clientY: e.clientY, 
+                button: e.button, buttons: e.buttons,  which: e.which,
+                altKey: e.altKey, ctrlKey: e.ctrlKey, shiftKey:e.shiftKey, metaKey: e.metaKey, 
+                detail:e.detail, 
+                //target :  dom2  
+            });
+            
+        }  
+        
+        let dom1 = this.viewer.getDomElement() 
+        dom1.addEventListener('mousedown',(e)=>{
+            let event = getEvent('mousedown', e)
+            this.sourceDom.dispatchEvent(event)  
+        })
+        dom1.addEventListener('mousemove',(e)=>{
+            let event = getEvent('mousemove', e)
+            this.sourceDom.dispatchEvent(event)  
+        })
+        dom1.addEventListener('mouseup',(e)=>{
+            let event = getEvent('mouseup', e)
+            this.sourceApp.dispatchEvent(event)   //mouseup 在laser中加在window上的
+        })
+        dom1.addEventListener('mousewheel',(e)=>{
+            let event = getEvent('mousewheel', e)
+            event.wheelDelta = e.wheelDelta  //wheelDelta没法在getEvent参数中赋值
+            this.sourceDom.dispatchEvent(event)  
+        })
+        let stop = (e)=>{ //drag到另一边时停止旋转, 防止转到另一边
+            let event = getEvent('mouseup', e)
+            this.sourceApp.dispatchEvent(event)   
+        }
+        dom1.addEventListener('mouseout',stop)
+        dom1.addEventListener('mouseover',stop)
+    
+        
+    }
 
     receive(data){