hotspot.js 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. /**
  2. * krpano 1.20 全景hotspot统一schema
  3. *
  4. *
  5. * */
  6. import config from "../config";
  7. const initState = {
  8. id: "",
  9. title: "",
  10. type: 0, // 热点大类型
  11. ath: 0,
  12. atv: 0,
  13. link: "",
  14. icon: "",
  15. visible: true,
  16. size: 0,
  17. style: {
  18. fontSize: 12,
  19. position: "top",
  20. isHover: false,
  21. borderColor: "",
  22. fillColor: "",
  23. textColor: "",
  24. isShowLine: "",
  25. isTextWrap: "",
  26. lineDirection: "",
  27. textDirection: "",
  28. textNumPerLine: "",
  29. duration: 0,
  30. frameNumber: 0,
  31. frameWidth: 0,
  32. },
  33. };
  34. //基本样式汇总
  35. const convertBaseStyle = (dest, origin) => {
  36. if (dest) {
  37. // normal
  38. dest.style.fontSize = origin.fontSize;
  39. dest.style.position = origin.titlePosition;
  40. // 兼容旧数据
  41. if ("visible" in origin && typeof origin.visible == "boolean") {
  42. dest.visible = origin.visible ? 0 : 1;
  43. // origin.titleDisplayMode = origin.visible ? "always" : "never";
  44. origin.titleDisplayMode = origin.visible ? 1 : 0;
  45. delete origin.visible;
  46. dest.style.position = "top";
  47. }
  48. // if (origin && origin.titleDisplayMode == "always") {
  49. if (origin && origin.titleDisplayMode == 1) {
  50. dest.visible = 0;
  51. }
  52. // if (origin && origin.titleDisplayMode == "never") {
  53. if (origin && origin.titleDisplayMode == 0) {
  54. dest.visible = 1;
  55. }
  56. if (origin && origin.titleDisplayMode == "hover") {
  57. dest.visible = 2;
  58. }
  59. dest.style.borderColor = "";
  60. dest.style.fillColor = "rgba(0,0,0,0.8)";
  61. dest.style.textColor = "rgba(255,255,255,1)";
  62. }
  63. //custom
  64. if (origin && origin.hotspotIconType === "serial_frame") {
  65. dest.style.duration = origin.serialFrameInfo.duration;
  66. dest.style.frameNumber = origin.serialFrameInfo.frameNumber;
  67. dest.style.frameWidth = origin.serialFrameInfo.frameWidth;
  68. }
  69. //custom
  70. if (origin && origin.hotspotIconType === "personalized_tag") {
  71. dest.style.borderColor = origin.personalizedTagInfo.borderColor;
  72. dest.style.fillColor = origin.personalizedTagInfo.fillColor;
  73. dest.style.isTextWrap = origin.personalizedTagInfo.isTextWrap;
  74. dest.style.lineDirection = origin.personalizedTagInfo.lineDirection;
  75. dest.style.textColor = origin.personalizedTagInfo.textColor;
  76. dest.style.textDirection = origin.personalizedTagInfo.textDirection;
  77. dest.style.textNumPerLine = origin.personalizedTagInfo.textNumPerLine;
  78. dest.style.isShowLine = origin.personalizedTagInfo.isShowLine;
  79. }
  80. };
  81. const coverSystemIconPart = (origin) => {
  82. const duplicate = structuredClone(initState);
  83. duplicate.id = origin.name;
  84. duplicate.title = origin.hotspotTitle;
  85. duplicate.ath = origin.ath;
  86. duplicate.atv = origin.atv;
  87. duplicate.type = 0;
  88. duplicate.icon = origin.img || "";
  89. duplicate.link = origin.link || "";
  90. duplicate.size = origin.size;
  91. convertBaseStyle(duplicate, origin);
  92. return duplicate;
  93. };
  94. const coverImageconPart = (origin) => {
  95. const defaultImage = config.getStaticResource("/panoassets/images/hotspot/image_place_holder.png");
  96. const duplicate = structuredClone(initState);
  97. duplicate.id = origin.name;
  98. duplicate.title = origin.hotspotTitle;
  99. duplicate.ath = origin.ath;
  100. duplicate.atv = origin.atv;
  101. duplicate.type = 1;
  102. duplicate.icon = origin.customIconInfo.img || defaultImage;
  103. duplicate.link = origin.link || "";
  104. duplicate.size = origin.size;
  105. convertBaseStyle(duplicate, origin);
  106. return duplicate;
  107. };
  108. const coverSerialFrame = (origin) => {
  109. const duplicate = structuredClone(initState);
  110. const defaultImage = config.getStaticResource("/panoassets/images/hotspot/image_place_holder.png");
  111. // console.log('defaultImage', defaultImage);
  112. duplicate.id = origin.name;
  113. duplicate.title = origin.hotspotTitle;
  114. duplicate.ath = origin.ath;
  115. duplicate.atv = origin.atv;
  116. duplicate.type = 2;
  117. duplicate.icon = origin.serialFrameInfo.img + "?x-oss-process=image/resize,w_128,q_80" || defaultImage;
  118. duplicate.link = origin.link || "";
  119. duplicate.size = origin.size;
  120. convertBaseStyle(duplicate, origin);
  121. return duplicate;
  122. };
  123. const coverpersonalizedTag = (origin) => {
  124. const duplicate = structuredClone(initState);
  125. duplicate.id = origin.name;
  126. duplicate.title = origin.hotspotTitle;
  127. duplicate.ath = origin.ath;
  128. duplicate.atv = origin.atv;
  129. duplicate.type = 3;
  130. duplicate.link = origin.link || "";
  131. duplicate.size = origin.size;
  132. convertBaseStyle(duplicate, origin);
  133. return duplicate;
  134. };
  135. export const convertJQHotspot = (origin) => {
  136. const type = origin.hotspotIconType;
  137. switch (type) {
  138. case "system_icon":
  139. return coverSystemIconPart(origin);
  140. case "custom_image":
  141. return coverImageconPart(origin);
  142. case "serial_frame":
  143. return coverSerialFrame(origin);
  144. case "personalized_tag":
  145. return coverpersonalizedTag(origin);
  146. default:
  147. return coverSystemIconPart(origin);
  148. }
  149. };