handlerVerifySelector.js 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import { sleep } from '@/utils/helper';
  2. import handleSelector from '../handleSelector';
  3. const SLEEP_TIME = 1700;
  4. async function verifySelector(block) {
  5. let elements = await handleSelector(block);
  6. if (!elements) {
  7. await sleep(SLEEP_TIME);
  8. return { notFound: true };
  9. }
  10. if (!block.data.multiple) {
  11. elements.scrollIntoView({
  12. block: 'center',
  13. inline: 'center',
  14. behavior: 'smooth',
  15. });
  16. elements = [elements];
  17. }
  18. const divEl = document.createElement('div');
  19. divEl.style =
  20. 'height: 100%; width: 100%; top: 0; left: 0; background-color: rgb(0 0 0 / 0.3); pointer-events: none; position: fixed; z-index: 99999';
  21. const svgEl = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
  22. svgEl.style =
  23. 'height: 100%; width: 100%; top: 0; left: 0; pointer-events: none; position: relative;';
  24. divEl.appendChild(svgEl);
  25. elements.forEach((element) => {
  26. const { left, top, width, height } = element.getBoundingClientRect();
  27. const rectEl = document.createElementNS(
  28. 'http://www.w3.org/2000/svg',
  29. 'rect'
  30. );
  31. rectEl.setAttribute('y', top);
  32. rectEl.setAttribute('x', left);
  33. rectEl.setAttribute('width', width);
  34. rectEl.setAttribute('height', height);
  35. rectEl.setAttribute('stroke', '#2563EB');
  36. rectEl.setAttribute('stroke-width', '2');
  37. rectEl.setAttribute('fill', 'rgba(37, 99, 235, 0.4)');
  38. svgEl.appendChild(rectEl);
  39. });
  40. document.body.appendChild(divEl);
  41. await sleep(SLEEP_TIME);
  42. divEl.remove();
  43. return { notFound: false };
  44. }
  45. export default verifySelector;