我有一個Web應用程序,用戶可以在該應用程序中添加對象到場景中,移動它,改變旋轉等。但是,我有一個下拉菜單,它決定了整個頁面上的各個參數要遵循的單位制。下拉式更改應通過頁面刷新。這導致整個場景被重置。有什麼方法可以保存場景,然後用三個j將它重新加載到之前的狀態?THREE.js如何在刷新之前保存場景並在頁面刷新完成後加載它?
0
A
回答
4
您試圖實現的一個美好例子是three.js editor本身。您可以在github上找到它的源代碼。
它是什麼,它存儲在(即配置,camera
和scene
對象)編輯器的狀態進入local storage
和indexedDB
,然後(你可以只用一個也住)時,頁面初始化它會檢查是否場景的state
被設置在indexedDB
那裏,它從那裏加載它。
您可能需要閱讀代碼本身,但我會在此解釋主要邏輯。
1.裝載從本地存儲場景時的頁面加載
可以發現,在index.html
當有這段代碼
editor.storage.init(function() {
editor.storage.get(function (state) {
if (state !== undefined) {
editor.fromJSON(state);
}
var selected = editor.config.getKey('selected');
if (selected !== undefined) {
editor.selectByUuid(selected);
}
});
所以這個檢查,如果有數據處於fromJSON
函數/js/Editor.js
,它基本上將camera
和scene
等設置爲存儲在indexedDB
中的任何值。看到的確切代碼是
fromJSON: function (json) {
var loader = new THREE.ObjectLoader();
// backwards
if (json.scene === undefined) {
var scene = loader.parse(json);
this.setScene(scene);
return;
}
// TODO: Clean this up somehow
var camera = loader.parse(json.camera);
this.camera.position.copy(camera.position);
this.camera.rotation.copy(camera.rotation);
this.camera.aspect = camera.aspect;
this.camera.near = camera.near;
this.camera.far = camera.far;
this.setScene(loader.parse(json.scene));
this.scripts = json.scripts;
}
要檢查其怎麼裝從本地存儲/ IndexedDB的正是你可以檢查位於該JS文件夾本身Config.js
和Storage.js
文件。
第二存儲數據到IndexedDB的週期性
再在index.html
你可以找到下面的代碼並更新IndexedDB
模型這種行爲上的事件或超時被觸發,甚至通過手動調用這段代碼editor.storage.set(editor.toJSON());
。
var saveState = function (scene) {
if (editor.config.getKey('autosave') === false) {
return;
}
clearTimeout(timeout);
timeout = setTimeout(function() {
editor.signals.savingStarted.dispatch();
timeout = setTimeout(function() {
editor.storage.set(editor.toJSON());
editor.signals.savingFinished.dispatch();
}, 100);
}, 1000);
};
希望你可以利用這個例子來實現你的目標。
相關問題
- 1. 如何在ajax上傳完成後刷新當前頁面
- 2. 頁面加載後如何刷新javascript
- 3. javascript只在刷新頁面後加載
- 4. ASP.Net UpdatePanel在頁面加載後刷新
- 5. Java applet:如何在頁面刷新之前確保銷燬已完成
- 6. 頁面刷新完成加載後,加起來變量
- 7. 如何在頁面刷新之後在jquery中保留值
- 8. 頁面刷新之間保存變量
- 9. 加載完成後刷新一次頁面
- 10. 在刷新頁面之前掛鉤
- 11. 刷新頁面並保存帖子
- 12. 如何在鏈接點擊後在屏幕上保留網頁並在新頁面加載後才刷新?
- 13. 如何在java方法執行完成後刷新頁面
- 14. 如何在對話框完成後刷新頁面?
- 15. 保存當前選中< li >在Angular頁面刷新後
- 16. 如何讓頁面在刷新後保持當前模板?
- 17. 刷新Iframe頁面加載
- 18. 在刷新頁面後保留值
- 19. 在3°頁面刷新後保留SESSION
- 20. 保存AJAX加載頁面的URL,因此可以在刷新後加載
- 21. 該頁面之前,它完整地刷新了jQuery代碼
- 22. 使用Javascript更改背景顏色並在刷新頁面後保留它
- 23. 元刷新:統計在頁面加載之後或之前啓動?
- 24. 保存謂詞orderBy在頁面刷新
- 25. 加載後刷新jquery移動頁面
- 26. 頁面加載後刷新標籤
- 27. 頁面刷新後加載popover
- 28. 重新加載/刷新後,使頁面元素保持可見
- 29. 如何通過jQuery刷新頁面並確保存在連接?
- 30. 刷新頁面之前,自動完成功能無法工作?