-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathscript.js
94 lines (81 loc) · 2.63 KB
/
script.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
const emojiSource = document.querySelector('.emoji-source');
const emojiOptions = document.getElementById('emoji-options');
const emojiUrlInput = document.getElementById('emoji-url');
const emojiContainer = document.getElementById('emoji-container');
function saveEmojiPositions() {
const positions = [];
const emojis = document.querySelectorAll('.emoji');
emojis.forEach(emoji => {
positions.push({
left: emoji.style.left,
top: emoji.style.top,
text: emoji.textContent,
url: emoji.dataset.url
});
});
localStorage.setItem('emojiPositions', JSON.stringify(positions));
}
function loadEmojiPositions() {
const positions = JSON.parse(localStorage.getItem('emojiPositions'));
if (positions) {
positions.forEach(position => {
const newEmoji = document.createElement('span');
newEmoji.classList.add('emoji');
newEmoji.textContent = position.text;
newEmoji.style.left = position.left;
newEmoji.style.top = position.top;
newEmoji.dataset.url = position.url;
emojiContainer.appendChild(newEmoji);
makeEmojiDraggable(newEmoji);
});
}
}
function makeEmojiDraggable(emoji) {
let isDragging = false;
let offsetX, offsetY;
emoji.addEventListener('mousedown', (e) => {
isDragging = true;
offsetX = e.clientX - emoji.offsetLeft;
offsetY = e.clientY - emoji.offsetTop;
e.preventDefault();
});
document.addEventListener('mouseup', () => {
isDragging = false;
saveEmojiPositions();
});
document.addEventListener('mousemove', (e) => {
if (isDragging) {
emoji.style.left = e.clientX - offsetX + 'px';
emoji.style.top = e.clientY - offsetY + 'px';
e.preventDefault();
}
});
emoji.addEventListener('click', (e) => {
if (!isDragging && emoji.dataset.url) {
window.open(emoji.dataset.url, '_blank');
} else {
emoji.classList.toggle('selected');
}
});
}
emojiSource.addEventListener('click', () => {
emojiOptions.style.display = 'block';
});
emojiOptions.addEventListener('click', (e) => {
if (e.target.classList.contains('emoji-option')) {
const newEmoji = document.createElement('span');
newEmoji.classList.add('emoji');
newEmoji.textContent = e.target.textContent;
const url = emojiUrlInput.value;
newEmoji.dataset.url = url;
newEmoji.style.position = 'absolute';
newEmoji.style.left = '250px';
newEmoji.style.top = '150px';
emojiContainer.appendChild(newEmoji);
makeEmojiDraggable(newEmoji);
emojiOptions.style.display = 'none';
emojiUrlInput.value = ''; // Clear the input field
}
});
// Load saved positions on page load
loadEmojiPositions();