User:Monster Domosed/common.js: Difference between revisionsGive feedback
Jump to navigation
Jump to search
No edit summary |
No edit summary Tag: Manual revert |
||
| Line 61: | Line 61: | ||
function switchQuality(viewer, icon, lqUrl, hqUrl) { | function switchQuality(viewer, icon, lqUrl, hqUrl) { | ||
const isLQ = viewer.src === lqUrl; | |||
const orbit = viewer.getCameraOrbit(); | |||
const target = viewer.getCameraTarget(); | |||
const fov = viewer.getFieldOfView(); | |||
const oldTime = viewer.currentTime; | |||
const oldAnimation = viewer.animationName; | |||
viewer.setAttribute('camera-controls', 'false'); | |||
let restored = false; | |||
function restoreCamera() { | |||
if (restored) { | |||
return; | |||
} | |||
restored = true; | |||
requestAnimationFrame(function () { | |||
viewer.cameraOrbit = | |||
orbit.theta + 'rad ' + | |||
orbit.phi + 'rad ' + | |||
orbit.radius + 'm'; | |||
viewer.cameraTarget = | |||
target.x + 'm ' + | |||
target.y + 'm ' + | |||
target.z + 'm'; | |||
viewer.fieldOfView = fov; | |||
if (oldAnimation) { | |||
viewer.animationName = oldAnimation; | |||
} | |||
if (typeof oldTime === 'number') { | |||
viewer.currentTime = oldTime; | |||
} | |||
requestAnimationFrame(function () { | |||
viewer.setAttribute('camera-controls', ''); | |||
if (viewer.hasAttribute('autoplay')) { | |||
viewer.play(); | |||
} | |||
}); | |||
}); | |||
} | |||
viewer.addEventListener('load', restoreCamera, { | |||
once: true | |||
}); | |||
viewer.src = isLQ ? hqUrl : lqUrl; | |||
icon.src = isLQ ? HQ_ICON : LQ_ICON; | |||
} | } | ||