tutorial-driver.ts 992 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. import {nextTick} from "vue";
  2. import sleep from "./sleep";
  3. class TutorialDriver {
  4. private readonly name: string;
  5. private readonly len: number;
  6. private idSet: Set<string> = new Set();
  7. private readonly hook: () => void;
  8. private flag = true;
  9. constructor(name: string, len: number, hook: () => void) {
  10. this.name = name;
  11. this.len = len;
  12. this.hook = hook;
  13. }
  14. setId(name: string, splicing: boolean = true) {
  15. const id = splicing ? `#${this.name}-${name}` : name
  16. this.idSet.add(id)
  17. if (this.idSet.size === this.len && this.flag) {
  18. this.flag = false
  19. nextTick().then(() => {
  20. sleep(200).then(() => {
  21. this.hook && this.hook()
  22. })
  23. })
  24. }
  25. return id;
  26. }
  27. getSize(): number {
  28. return this.idSet.size
  29. }
  30. getId(name: string) {
  31. return `#${this.name}-${name}`
  32. }
  33. }
  34. export default TutorialDriver