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