driverGuide.ts 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. // src/composables/useDriver.ts
  2. import { driver, type DriveStep, type Config } from 'driver.js'
  3. import 'driver.js/dist/driver.css'
  4. let driverInstance: ReturnType<typeof driver> | null = null
  5. /**
  6. * useDriver composable
  7. * @param steps 引导步骤数组
  8. * @param globalConfig 可选的 driver 配置
  9. */
  10. export function useDriver(steps: DriveStep[], globalConfig?: Config) {
  11. if (!driverInstance) {
  12. driverInstance = driver({
  13. ...globalConfig,
  14. animate: false,
  15. showProgress: true, // 显示进度条
  16. overlayOpacity: 0.7, // 遮罩透明度
  17. overlayColor: '#2b2f36', // 遮罩颜色
  18. // allowClose: false, // 禁止用户关闭引导
  19. showButtons: ['previous', 'next', 'close'],
  20. onPopoverRender: (popoverDOM, { config, state, driver }) => {
  21. // 如果用户配置了自己的 onPopoverRender,也执行它
  22. globalConfig?.onPopoverRender?.(popoverDOM, { config, state, driver })
  23. }
  24. })
  25. }
  26. driverInstance.setSteps(steps)
  27. return {
  28. start: (stepIndex = 0) => driverInstance?.drive(stepIndex),
  29. moveNext: () => driverInstance?.moveNext(),
  30. movePrevious: () => driverInstance?.movePrevious(),
  31. highlight: (step: DriveStep) => driverInstance?.highlight(step),
  32. destroy: () => driverInstance?.destroy(),
  33. isActive: () => driverInstance?.isActive(),
  34. driverInstance // 暴露实例给你更多操作
  35. }
  36. }