cta.ts 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. /**
  2. * CTA 按钮控制器
  3. *
  4. * - 页面加载后按钮常驻可见(工具栏之上)
  5. * - 填色完成后调用 `ctaHighlight()` 放大 + 强脉冲,引导用户点击
  6. * - 点击后通过 mraid 适配层跳转 Store
  7. */
  8. import { openStoreUrl } from "./mraid";
  9. /** App Store / Google Play 落地页链接,按需替换 */
  10. // 正式上线时换回自己的 app:
  11. // const STORE_URL_IOS = "https://apps.apple.com/app/id1575480118";
  12. // const STORE_URL_ANDROID = "https://play.google.com/store/apps/details?id=com.pcoloring.art.puzzle.color.by.number";
  13. // 测试期间使用 PBN,避免产生无效转化
  14. const STORE_URL_IOS =
  15. "https://apps.apple.com/gb/app/paint-by-number-coloring-games/id1420058690";
  16. const STORE_URL_ANDROID =
  17. "https://play.google.com/store/apps/details?id=com.oakever.paintbynumber";
  18. function getStoreUrl(): string {
  19. const ua = navigator.userAgent;
  20. if (/android/i.test(ua)) return STORE_URL_ANDROID;
  21. return STORE_URL_IOS; // iOS / 桌面 fallback
  22. }
  23. /**
  24. * 初始化 CTA 按钮:绑定点击事件。
  25. * 应在 DOM ready 后调用一次。
  26. */
  27. export function initCta(): void {
  28. const btn = document.getElementById("cta-btn");
  29. if (!btn) return;
  30. btn.addEventListener("click", () => {
  31. openStoreUrl(getStoreUrl());
  32. });
  33. }
  34. /**
  35. * 填色完成后调用,放大按钮并加强脉冲动画,吸引用户点击。
  36. */
  37. export function ctaHighlight(): void {
  38. const btn = document.getElementById("cta-btn");
  39. if (!btn) return;
  40. btn.classList.add("cta-highlight");
  41. }