Javascript 三点缩放

Javascript 三点缩放,javascript,mobile,three.js,Javascript,Mobile,Three.js,我想在我的three.js panorama播放器中添加收缩缩放 我环顾四周,发现TrackBallControls.js可能内置了这个功能 我尝试过实现它,但是我得到了一个 '未捕获类型错误:未定义不是函数' 在 现在,由于系统的原因,我必须使用Sid.js动态加载所有三个.js脚本,这是否是它无法找到三个.TrackballControls的原因 这是否是三合一手机上的捏缩和缩放的正确解决方案 TrackBallControls.js确实内置了触摸缩放功能,相关代码如下;但是,这些文件不是T

我想在我的three.js panorama播放器中添加收缩缩放

我环顾四周,发现TrackBallControls.js可能内置了这个功能

我尝试过实现它,但是我得到了一个

'未捕获类型错误:未定义不是函数'

现在,由于系统的原因,我必须使用Sid.js动态加载所有三个.js脚本,这是否是它无法找到三个.TrackballControls的原因


这是否是三合一手机上的捏缩和缩放的正确解决方案

TrackBallControls.js确实内置了触摸缩放功能,相关代码如下;但是,这些文件不是Three.js库的一部分。它只存在于示例项目中。您可以找到源代码


TrackBallControls.js内置触摸缩放功能,相关代码如下;但是,这些文件不是Three.js库的一部分。它只存在于示例项目中。您可以找到源代码


如果其他人需要代码,我会稍微修改一下

function onDocumentTouchStart(event) {

    if (event.touches.length == 1) {

        console.log('1');
        event.preventDefault();


        onPointerDownPointerX = event.touches[0].pageX;
        onPointerDownPointerY = event.touches[0].pageY;

        onPointerDownLon = lon;
        onPointerDownLat = lat;

        detectHotspotClick();

    }

    if (event.touches.length == 2) {

        console.log('2');
        _state = STATE.TOUCH_ZOOM_PAN;
        var dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX;
        var dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY;
        _touchZoomDistanceEnd = _touchZoomDistanceStart = Math.sqrt( dx * dx + dy * dy );

    }

}

function onDocumentTouchMove(event) {

    if (event.touches.length == 1) {

        event.preventDefault();

        lon = (onPointerDownPointerX - event.touches[0].pageX) * 0.1 + onPointerDownLon;
        lat = (event.touches[0].pageY - onPointerDownPointerY) * 0.1 + onPointerDownLat;

    }

    if (event.touches.length == 2) {

           var dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX;
           var dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY;
           _touchZoomDistanceEnd = Math.sqrt( dx * dx + dy * dy );

        var factor = _touchZoomDistanceStart / _touchZoomDistanceEnd;
        _touchZoomDistanceStart = _touchZoomDistanceEnd;
        setZoom(camera.fov * factor);

    }

}

function onDocumentTouchEnd( event ) {

            _touchZoomDistanceStart = _touchZoomDistanceEnd = 0;

}

function setZoom(fov){

    camera.fov = fov;

    if(camera.fov < 30) camera.fov = 30;
    if(camera.fov > 100) camera.fov = 100;

    camera.updateProjectionMatrix();

}
文档TouchStart(事件)上的函数{ if(event.touchs.length==1){ console.log('1'); event.preventDefault(); onPointerDownPointerX=event.touchs[0].pageX; onPointerDownPointerY=event.touchs[0].pageY; onPointerDownLon=lon; onPointerDownLat=纬度; DetectThotSpotClick(); } if(event.touchs.length==2){ console.log('2'); _state=state.TOUCH\u ZOOM\u PAN; var dx=event.touchs[0]。pageX-event.touchs[1]。pageX; var dy=event.touchs[0]。pageY-event.touchs[1]。pageY; _touchZoomDistanceEnd=_touchZoomDistanceStart=Math.sqrt(dx*dx+dy*dy); } } 函数onDocumentTouchMove(事件){ if(event.touchs.length==1){ event.preventDefault(); lon=(onPointerDownPointerX-event.touchs[0].pageX)*0.1+onPointerDownLon; lat=(event.touchs[0].pageY-onPointerDownPointerY)*0.1+onPointerDownLat; } if(event.touchs.length==2){ var dx=event.touchs[0]。pageX-event.touchs[1]。pageX; var dy=event.touchs[0]。pageY-event.touchs[1]。pageY; _touchZoomInstanceEnd=Math.sqrt(dx*dx+dy*dy); 变量因子=_touchZoomDistanceStart/_touchZoomDistanceEnd; _TouchZoomInstanceStart=\u TouchZoomInstanceEnd; 设置缩放(camera.fov*因子); } } 函数onDocumentTouchEnd(事件){ _TouchZoomInstanceStart=\u TouchZoomInstanceEnd=0; } 功能设置缩放(fov){ camera.fov=fov; 如果(camera.fov<30)camera.fov=30; 如果(camera.fov>100)camera.fov=100; camera.updateProjectMatrix(); }
如果其他人需要代码,我会稍微修改一下

function onDocumentTouchStart(event) {

    if (event.touches.length == 1) {

        console.log('1');
        event.preventDefault();


        onPointerDownPointerX = event.touches[0].pageX;
        onPointerDownPointerY = event.touches[0].pageY;

        onPointerDownLon = lon;
        onPointerDownLat = lat;

        detectHotspotClick();

    }

    if (event.touches.length == 2) {

        console.log('2');
        _state = STATE.TOUCH_ZOOM_PAN;
        var dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX;
        var dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY;
        _touchZoomDistanceEnd = _touchZoomDistanceStart = Math.sqrt( dx * dx + dy * dy );

    }

}

function onDocumentTouchMove(event) {

    if (event.touches.length == 1) {

        event.preventDefault();

        lon = (onPointerDownPointerX - event.touches[0].pageX) * 0.1 + onPointerDownLon;
        lat = (event.touches[0].pageY - onPointerDownPointerY) * 0.1 + onPointerDownLat;

    }

    if (event.touches.length == 2) {

           var dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX;
           var dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY;
           _touchZoomDistanceEnd = Math.sqrt( dx * dx + dy * dy );

        var factor = _touchZoomDistanceStart / _touchZoomDistanceEnd;
        _touchZoomDistanceStart = _touchZoomDistanceEnd;
        setZoom(camera.fov * factor);

    }

}

function onDocumentTouchEnd( event ) {

            _touchZoomDistanceStart = _touchZoomDistanceEnd = 0;

}

function setZoom(fov){

    camera.fov = fov;

    if(camera.fov < 30) camera.fov = 30;
    if(camera.fov > 100) camera.fov = 100;

    camera.updateProjectionMatrix();

}
文档TouchStart(事件)上的函数{ if(event.touchs.length==1){ console.log('1'); event.preventDefault(); onPointerDownPointerX=event.touchs[0].pageX; onPointerDownPointerY=event.touchs[0].pageY; onPointerDownLon=lon; onPointerDownLat=纬度; DetectThotSpotClick(); } if(event.touchs.length==2){ console.log('2'); _state=state.TOUCH\u ZOOM\u PAN; var dx=event.touchs[0]。pageX-event.touchs[1]。pageX; var dy=event.touchs[0]。pageY-event.touchs[1]。pageY; _touchZoomDistanceEnd=_touchZoomDistanceStart=Math.sqrt(dx*dx+dy*dy); } } 函数onDocumentTouchMove(事件){ if(event.touchs.length==1){ event.preventDefault(); lon=(onPointerDownPointerX-event.touchs[0].pageX)*0.1+onPointerDownLon; lat=(event.touchs[0].pageY-onPointerDownPointerY)*0.1+onPointerDownLat; } if(event.touchs.length==2){ var dx=event.touchs[0]。pageX-event.touchs[1]。pageX; var dy=event.touchs[0]。pageY-event.touchs[1]。pageY; _touchZoomInstanceEnd=Math.sqrt(dx*dx+dy*dy); 变量因子=_touchZoomDistanceStart/_touchZoomDistanceEnd; _TouchZoomInstanceStart=\u TouchZoomInstanceEnd; 设置缩放(camera.fov*因子); } } 函数onDocumentTouchEnd(事件){ _TouchZoomInstanceStart=\u TouchZoomInstanceEnd=0; } 功能设置缩放(fov){ camera.fov=fov; 如果(camera.fov<30)camera.fov=30; 如果(camera.fov>100)camera.fov=100; camera.updateProjectMatrix(); }
谢谢,这为触摸“架构”提供了有用的见解,更多细节可以在这里找到[Mozilla touch事件处理示例]()。谢谢,这为触摸“架构”提供了有用的见解,更多细节可以在这里找到[Mozilla touch事件处理示例]()。
function onDocumentTouchStart(event) {

    if (event.touches.length == 1) {

        console.log('1');
        event.preventDefault();


        onPointerDownPointerX = event.touches[0].pageX;
        onPointerDownPointerY = event.touches[0].pageY;

        onPointerDownLon = lon;
        onPointerDownLat = lat;

        detectHotspotClick();

    }

    if (event.touches.length == 2) {

        console.log('2');
        _state = STATE.TOUCH_ZOOM_PAN;
        var dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX;
        var dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY;
        _touchZoomDistanceEnd = _touchZoomDistanceStart = Math.sqrt( dx * dx + dy * dy );

    }

}

function onDocumentTouchMove(event) {

    if (event.touches.length == 1) {

        event.preventDefault();

        lon = (onPointerDownPointerX - event.touches[0].pageX) * 0.1 + onPointerDownLon;
        lat = (event.touches[0].pageY - onPointerDownPointerY) * 0.1 + onPointerDownLat;

    }

    if (event.touches.length == 2) {

           var dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX;
           var dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY;
           _touchZoomDistanceEnd = Math.sqrt( dx * dx + dy * dy );

        var factor = _touchZoomDistanceStart / _touchZoomDistanceEnd;
        _touchZoomDistanceStart = _touchZoomDistanceEnd;
        setZoom(camera.fov * factor);

    }

}

function onDocumentTouchEnd( event ) {

            _touchZoomDistanceStart = _touchZoomDistanceEnd = 0;

}

function setZoom(fov){

    camera.fov = fov;

    if(camera.fov < 30) camera.fov = 30;
    if(camera.fov > 100) camera.fov = 100;

    camera.updateProjectionMatrix();

}