Skip to content

Commit 99a7449

Browse files
authored
v1.6.0: 提升速度,修复最小化/最大化后恢复不正常
1 parent 2fdd0dd commit 99a7449

1 file changed

Lines changed: 40 additions & 43 deletions

File tree

SpeedRunHelper.user.js

Lines changed: 40 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,27 @@ css.innerHTML = `
5959
.speedrun-minimum #speedrun-restore, .speedrun-maximum #speedrun-restore { display: block; }`;
6060
document.body.append(css);
6161

62+
document.addEventListener('dragstart', (event) => {
63+
let pane = event.target.closest('div[id^=speedrun-');
64+
if (pane.draggable) {
65+
srDrag = pane;
66+
srX = event.clientX - srDrag.offsetLeft;
67+
srY = event.clientY - srDrag.offsetTop;
68+
}
69+
});
70+
71+
document.addEventListener('dragover', (event) => {
72+
event.preventDefault();
73+
});
74+
75+
document.addEventListener('drop', (event) => {
76+
event.preventDefault();
77+
let left = event.clientX - srX;
78+
let top = event.clientY - srY;
79+
srDrag.offset = srDrag.style.cssText = `left: ${left}px; top: ${top}px;`;
80+
srDrag = null;
81+
});
82+
6283
document.querySelector('main').addEventListener('contextmenu', async (event) => {
6384
if (event.ctrlKey || event.altKey || event.shiftKey) {
6485
return;
@@ -95,50 +116,35 @@ document.querySelector('main').addEventListener('contextmenu', async (event) =>
95116
}
96117
event.preventDefault();
97118
let { url, rank, player, time } = result;
98-
let id = url.slice(url.lastIndexOf('/') + 1);
119+
let id = url.substring(url.lastIndexOf('/') + 1);
99120
if (worker[id]) {
100121
return;
101122
}
102123
worker[id] = true;
103124
let title = `<div>Rank: ${rank.innerHTML}</div><div>Player: ${player.innerHTML}</div><div>Time: ${time.textContent}</div>`;
104-
if (speedrun[id]) {
125+
let pane = speedrun[id];
126+
if (pane) {
105127
worker[id] = false;
106-
speedrun[id].style.cssText = style[id] = fixedPanePosition(speedrun[id].offset);
107-
return document.body.appendChild(speedrun[id]);
128+
pane.style.cssText = pane.offset;
129+
pane.classList.remove('speedrun-maximum', 'speedrun-minimum');
130+
document.body.appendChild(speedrun[id]);
131+
return;
108132
}
109133
let response = await fetch(url);
110134
let html = await response.text();
111135
let start = html.indexOf('<iframe');
112136
let end = html.indexOf('</iframe>', start) + 9;
113137
let iframe = html.substring(start, end);
114-
console.log(iframe);
115-
createRecordWindow(id, title, top, iframe);
116-
});
117-
118-
document.addEventListener('dragstart', (event) => {
119-
let pane = event.target.closest('div[id^=speedrun-');
120-
if (pane.draggable) {
121-
srDrag = pane;
122-
srX = event.clientX - srDrag.offsetLeft;
123-
srY = event.clientY - srDrag.offsetTop;
138+
let offset = ++srPane * 30;
139+
let top = 130 + offset;
140+
let left = (innerWidth - fixedX) / 2 + offset;
141+
if (left < 0) {
142+
left = 0;
124143
}
125-
});
126-
127-
document.addEventListener('dragover', (event) => {
128-
event.preventDefault();
129-
});
130-
131-
document.addEventListener('drop', (event) => {
132-
event.preventDefault();
133-
srDrag.style.left = event.clientX - srX + 'px';
134-
srDrag.style.top = event.clientY - srY + 'px';
135-
srDrag = null;
136-
});
137-
138-
function createRecordWindow(id, title, top, player) {
139-
let pane = document.createElement('div');
144+
let style = `top: ${top}px; left: ${left}px;`;
145+
console.log(iframe, style);
146+
pane = document.createElement('div');
140147
pane.id = 'speedrun-' + id;
141-
pane.offset = ++srPane * 30;
142148
pane.className = 'speedrun-window';
143149
pane.draggable = true;
144150
pane.innerHTML = `
@@ -149,8 +155,8 @@ function createRecordWindow(id, title, top, player) {
149155
<div id="speedrun-maximum">🔲</div>
150156
<div id="speedrun-remove">❌</div>
151157
</div>
152-
${player}`;
153-
pane.style.cssText = style[id] = fixedPanePosition(pane.offset);
158+
${iframe}`;
159+
pane.style.cssText = pane.offset = style;
154160
pane.addEventListener('click', (event) => {
155161
let { id } = event.target;
156162
if (id === 'speedrun-minimum') {
@@ -162,8 +168,8 @@ ${player}`;
162168
pane.classList.remove('speedrun-minimum');
163169
pane.style.cssText = '';
164170
} else if (id === 'speedrun-restore') {
171+
pane.style.cssText = pane.offset;
165172
pane.classList.remove('speedrun-maximum', 'speedrun-minimum');
166-
pane.style.cssText = style[id];
167173
} else if (id === 'speedrun-remove') {
168174
pane.remove();
169175
--srPane;
@@ -172,13 +178,4 @@ ${player}`;
172178
document.body.appendChild(pane);
173179
speedrun[id] = pane;
174180
worker[id] = false;
175-
}
176-
177-
function fixedPanePosition(offset) {
178-
let top = 130 + offset;
179-
let left = (innerWidth - fixedX) / 2 + offset;
180-
if (left < 0) {
181-
left = 0;
182-
}
183-
return `top: ${top}px; left: ${left}px;`;
184-
}
181+
});

0 commit comments

Comments
 (0)