Skip to content

Commit 778a049

Browse files
committed
fix: wait for scrollIntoView to finish
1 parent eb33f8f commit 778a049

File tree

1 file changed

+83
-22
lines changed

1 file changed

+83
-22
lines changed

assets/script/index.js

Lines changed: 83 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,37 @@ window.onresize = () => {
1717
};
1818

1919

20+
function waitTransition(section) {
21+
22+
return new Promise((resolve, reject) => {
23+
24+
try {
25+
26+
let loop = setInterval(() => {
27+
28+
if (
29+
Math.round(document.body.scrollLeft) == section.offsetLeft
30+
&& Math.round(document.body.scrollTop) == section.offsetTop
31+
) {
32+
33+
clearInterval(loop);
34+
resolve();
35+
36+
}
37+
38+
}, 1);
39+
40+
} catch(err) {
41+
42+
reject(err);
43+
44+
}
45+
46+
})
47+
48+
}
49+
50+
2051
for (let checkBox of type.querySelectorAll('form > div > label > input')) {
2152

2253
checkBox.onchange = function() {
@@ -44,7 +75,6 @@ type.querySelector('form').onsubmit = function(e) { e.preventDefault();
4475
if (this.type.value == 'revert') {
4576

4677
summary.querySelector('form > nav > button.finish').style.display = 'none';
47-
summary.querySelector('form').summary.parentNode.click();
4878

4979
body.querySelector('form > nav > button.finish').style.display = 'none';
5080

@@ -58,10 +88,10 @@ type.querySelector('form').onsubmit = function(e) { e.preventDefault();
5888
behavior: 'smooth'
5989
});
6090

91+
waitTransition(summary).then(() => summary.querySelector('form').summary.focus());
92+
6193
} else {
6294

63-
scope.querySelector('form').scope.parentNode.click();
64-
6595
summary.querySelector('form > nav > button.finish').style.display = '';
6696

6797
body.querySelector('form > nav > button.finish').style.display = '';
@@ -76,6 +106,8 @@ type.querySelector('form').onsubmit = function(e) { e.preventDefault();
76106
behavior: 'smooth'
77107
});
78108

109+
waitTransition(scope).then(() => scope.querySelector('form').scope.focus());
110+
79111
}
80112

81113
};
@@ -124,13 +156,13 @@ scope.querySelector('form').scope.oninput = function() {
124156
};
125157
scope.querySelector('form').onsubmit = function(e) { e.preventDefault();
126158

127-
summary.querySelector('form').summary.parentNode.click();
128-
129159
currentTarget = summary;
130160
summary.scrollIntoView({
131161
behavior: 'smooth'
132162
});
133163

164+
waitTransition(summary).then(() => summary.querySelector('form').summary.focus());
165+
134166
};
135167
scope.querySelector('form').onreset = function() {
136168

@@ -139,6 +171,8 @@ scope.querySelector('form').onreset = function() {
139171
behavior: 'smooth'
140172
});
141173

174+
waitTransition(type).then(() => type.querySelector('input[checked]').focus());
175+
142176
};
143177

144178

@@ -174,23 +208,24 @@ summary.querySelector('form').onsubmit = function(e) { e.preventDefault();
174208

175209
if (e.submitter.classList.contains('finish')) {
176210

177-
significantChange.querySelector('form').significantChange.parentNode.click();
178211
significantChange.querySelector('form').significantChange.checked = false;
179212

180213
currentTarget = significantChange;
181214
significantChange.scrollIntoView({
182215
behavior: 'smooth'
183216
});
184217

185-
} else {
218+
waitTransition(significantChange).then(() => significantChange.querySelector('form').significantChange.focus());
186219

187-
body.querySelector('form').body.parentNode.click();
220+
} else {
188221

189222
currentTarget = body;
190223
body.scrollIntoView({
191224
behavior: 'smooth'
192225
});
193226

227+
waitTransition(body).then(() => body.querySelector('form').body.focus());
228+
194229
}
195230

196231
};
@@ -203,15 +238,17 @@ summary.querySelector('form').onreset = function() {
203238
behavior: 'smooth'
204239
});
205240

206-
} else {
241+
waitTransition(type).then(() => type.querySelector('input[checked]').focus());
207242

208-
scope.querySelector('form').scope.parentNode.click();
243+
} else {
209244

210245
currentTarget = scope;
211246
scope.scrollIntoView({
212247
behavior: 'smooth'
213248
});
214249

250+
waitTransition(scope).then(() => scope.querySelector('form').scope.focus());
251+
215252
}
216253

217254
};
@@ -221,36 +258,44 @@ body.querySelector('form').onsubmit = function(e) { e.preventDefault();
221258

222259
if (e.submitter.classList.contains('finish')) {
223260

224-
significantChange.querySelector('form').significantChange.parentNode.click();
225261
significantChange.querySelector('form').significantChange.checked = false;
226262

227263
currentTarget = significantChange;
228264
significantChange.scrollIntoView({
229265
behavior: 'smooth'
230266
});
231267

268+
waitTransition(significantChange).then(() => significantChange.querySelector('form').significantChange.focus());
269+
232270
} else {
233271

234272
currentTarget = footer;
235273
footer.scrollIntoView({
236274
behavior: 'smooth'
237275
});
238276

239-
if (type.querySelector('form').type.value == 'revert')
240-
setTimeout(() => footer.querySelector('form button[type="submit"]').click(), 1000);
277+
if (type.querySelector('form').type.value == 'revert') {
278+
279+
waitTransition(footer).then(() => footer.querySelector('form').refs.focus());
280+
281+
} else {
282+
283+
waitTransition(footer);
284+
285+
}
241286

242287
}
243288

244289
};
245290
body.querySelector('form').onreset = function() {
246291

247-
summary.querySelector('form').summary.parentNode.click();
248-
249292
currentTarget = summary;
250293
summary.scrollIntoView({
251294
behavior: 'smooth'
252295
});
253296

297+
waitTransition(summary).then(() => summary.querySelector('form').summary.focus());
298+
254299
};
255300

256301

@@ -267,7 +312,6 @@ for (let text of footer.querySelectorAll('form > div > label > input[type="text"
267312
}
268313
footer.querySelector('form').onsubmit = function(e) { e.preventDefault();
269314

270-
significantChange.querySelector('form').significantChange.parentNode.click();
271315
significantChange.querySelector('form').significantChange.checked = false;
272316

273317
if (this.breakingChange.value.trim() != '')
@@ -278,16 +322,18 @@ footer.querySelector('form').onsubmit = function(e) { e.preventDefault();
278322
behavior: 'smooth'
279323
});
280324

325+
waitTransition(significantChange).then(() => significantChange.querySelector('form').significantChange.focus());
326+
281327
};
282328
footer.querySelector('form').onreset = function() {
283329

284-
body.querySelector('form').body.parentNode.click();
285-
286330
currentTarget = body;
287331
body.scrollIntoView({
288332
behavior: 'smooth'
289333
});
290334

335+
waitTransition(body).then(() => body.querySelector('form').body.focus());
336+
291337
};
292338

293339

@@ -300,7 +346,7 @@ significantChange.querySelector('form').onsubmit = function(e) { e.preventDefaul
300346
behavior: 'smooth'
301347
});
302348

303-
setTimeout(() => type.querySelector('form button[type="submit"]').click(), 1000);
349+
waitTransition(type).then(() => type.querySelector('form button[type="submit"]').click());
304350

305351
} else if (summary.querySelector('form').summary.value.trim() == '') {
306352

@@ -309,7 +355,7 @@ significantChange.querySelector('form').onsubmit = function(e) { e.preventDefaul
309355
behavior: 'smooth'
310356
});
311357

312-
setTimeout(() => summary.querySelector('form button[type="submit"]').click(), 1000);
358+
waitTransition(summary).then(() => summary.querySelector('form button[type="submit"]').click());
313359

314360
} if (type.querySelector('form').type.value == 'revert' && footer.querySelector('form').refs.value.trim() == '') {
315361

@@ -318,7 +364,7 @@ significantChange.querySelector('form').onsubmit = function(e) { e.preventDefaul
318364
behavior: 'smooth'
319365
});
320366

321-
setTimeout(() => footer.querySelector('form button[type="submit"]').click(), 1000);
367+
waitTransition(footer).then(() => footer.querySelector('form button[type="submit"]').click());
322368

323369
} else {
324370

@@ -355,6 +401,8 @@ significantChange.querySelector('form').onsubmit = function(e) { e.preventDefaul
355401
behavior: 'smooth'
356402
});
357403

404+
waitTransition(result);
405+
358406
}
359407

360408
};
@@ -365,6 +413,16 @@ significantChange.querySelector('form').onreset = function() {
365413
behavior: 'smooth'
366414
});
367415

416+
if (type.querySelector('form').type.value == 'revert') {
417+
418+
waitTransition(footer).then(() => footer.querySelector('form').refs.focus());
419+
420+
} else {
421+
422+
waitTransition(footer);
423+
424+
}
425+
368426
};
369427

370428

@@ -385,19 +443,22 @@ result.querySelector('form').onsubmit = function(e) { e.preventDefault();
385443
behavior: 'smooth'
386444
});
387445

446+
waitTransition(type).then(() => type.querySelector('input[checked]').focus());
447+
388448
}
389449

390450
};
391451
result.querySelector('form').onreset = function() {
392452

393453
let checked = significantChange.querySelector('form').significantChange.checked;
394454

395-
significantChange.querySelector('form').significantChange.parentNode.click();
396455
significantChange.querySelector('form').significantChange.checked = checked;
397456

398457
currentTarget = significantChange;
399458
significantChange.scrollIntoView({
400459
behavior: 'smooth'
401460
});
402461

462+
waitTransition(significantChange).then(() => significantChange.querySelector('form').significantChange.focus());
463+
403464
};

0 commit comments

Comments
 (0)