hotspot.js 5.0 KB

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