I can add an element (such as a rectangle) and allow the user to drag it. However when the page refreshes or reloads it will jump back to its original position. Is it possible to save the new location so when reloading it will stay?
you can use hypes API to get and set a position in conjunction with localeStorage to store and retrieve the data
dragStorage.hype.zip (13.0 KB)
may work not well tested
5 Likes
Very clever
If anyone is curious about the magic going on here, this runs ‘on scene load’:
const dragStorageKey = "elementPositions";
if (event.type === "HypeSceneLoad") {
let dragStorageObj = getStorage();
if (dragStorageObj != false) {
for (key in dragStorageObj) {
let el = hypeDocument.getElementById(key);
if (el) {
hypeDocument.setElementProperty(el, 'left', dragStorageObj[key]['left']);
hypeDocument.setElementProperty(el, 'top', dragStorageObj[key]['top']);
}
}
}
} else {
if (event['hypeGesturePhase'] === hypeDocument.kHypeGesturePhaseEnd) {
let dragStorageObj = getStorage();
if (dragStorageObj === false) {
dragStorageObj = {};
};
dragStorageObj[element.id] = {};
let tmpObj = dragStorageObj[element.id];
tmpObj["left"] = hypeDocument.getElementProperty(element, 'left');
tmpObj["top"] = hypeDocument.getElementProperty(element, 'top');
localStorage.setItem(dragStorageKey, JSON.stringify(dragStorageObj));
}
}
function getStorage() {
let dragStorageKeys = localStorage.getItem(dragStorageKey);
if (dragStorageKeys) {
return JSON.parse(dragStorageKeys);
} else {
return false;
}
}
@h_classen has set this up so as long as your element has an ID set, its location will be stored.
1 Like
Thank You for this example of using localStorage
Hans!
So far in my brief run through all has worked fine.
Brilliant Hans! Thank you very much. My only regret now is not posting here before instead of working out how to do this outside the usability of Hype!
Just what I was trying to achieve. Genius :-)
1 Like