ThreeWorldQingXiCheAndQv.vue 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252
  1. <script setup>
  2. import { watch } from "vue";
  3. import { CommonVal } from "@/components/ChengGuangYuanJing/store/CommonVal.js";
  4. import { IframeEdit } from '@/components/ChengGuangYuanJing/js/IframeEdit.js'
  5. // 固定操作3d的代码。可以不做其他修改
  6. // 接收参数
  7. const props = defineProps({
  8. iframeId: {
  9. type: String
  10. },
  11. url: {
  12. type: String
  13. },
  14. });
  15. // 定义发射给父组件的方法
  16. const emits = defineEmits([
  17. 'callbackObjIframeEdit',
  18. 'callbackLoadPercentage',
  19. 'callbackLoadEnd',
  20. 'callbackDistanceYes',
  21. 'callbackDistanceNo',
  22. 'callbackCameraVisualAngleJsonToLook'
  23. ])
  24. /**
  25. * 回调加载百分比
  26. */
  27. const callbackLoadPercentageEvent = (json) => {
  28. emits('callbackLoadPercentage', json);
  29. }
  30. /**
  31. * 回调加载完成
  32. */
  33. const callbackLoadEndEvent = (json) => {
  34. emits('callbackLoadEnd', json);
  35. }
  36. /**
  37. * 回调距离范围内
  38. */
  39. const callbackDistanceYesEvent = (json) => {
  40. emits('callbackDistanceYes', json);
  41. }
  42. /**
  43. * 回调距离范围外
  44. */
  45. const callbackDistanceNoEvent = (json) => {
  46. emits('callbackDistanceNo', json);
  47. }
  48. /**
  49. * 回调视角切换完成
  50. */
  51. const callbackCameraVisualAngleJsonToLookEvent = (json) => {
  52. emits('callbackCameraVisualAngleJsonToLook', json);
  53. }
  54. /**
  55. * 页面初始化
  56. */
  57. const viewInit = () => {
  58. // 判断是否成功找到摇杆才触发
  59. var viewTimeBool = setInterval(function () {
  60. try {
  61. var objPreviewBtnMove = objIframeEdit.objIframe.$("#previewBtnMove");
  62. if (objPreviewBtnMove != null && objPreviewBtnMove != undefined) {
  63. viewAssemblyVisibilityMain();
  64. // clearInterval(viewTimeBool);
  65. // viewTimeBool = null;
  66. }
  67. } catch (e) {
  68. }
  69. }, 1000 / 3);
  70. }
  71. /**
  72. * 隐藏页面组件
  73. */
  74. const viewAssemblyVisibilityMain = () => {
  75. objIframeEdit.viewAssemblyVisibility();
  76. objIframeEdit.viewAssemblyVisibilityRole();
  77. objIframeEdit.viewBackgroundColorClean();
  78. // 额外隐藏其他的组件
  79. objIframeEdit.objIframe.$("#edit3DActionTab").css("display", "none");
  80. objIframeEdit.objIframe.$(".previewRoleChatMain").css("display", "none");
  81. objIframeEdit.objIframe.$(".previewBtnMove").css("display", "none");
  82. objIframeEdit.objIframe.$(".previewBtnAction").css("display", "none");
  83. }
  84. // 如果是多个iframe,则new 出多个即可。 后续对应的iframe,单独对应的对象去触发封装好的方法
  85. let objIframeEdit = new IframeEdit();
  86. CommonVal().obj[props.iframeId] = objIframeEdit;
  87. /**
  88. * 初始化应用
  89. */
  90. const appInit = () => {
  91. objIframeEdit.loading(
  92. // html iframe 的 唯一 id, 也就是对应 html id="" 的参数
  93. props.iframeId,
  94. // 加载完成回调
  95. function (roleChoiceOpenBool) {
  96. callbackLoadEndEvent({
  97. "roleChoiceOpenBool": roleChoiceOpenBool
  98. });
  99. // 如果是角色选择
  100. if (roleChoiceOpenBool === true) {
  101. try {
  102. objIframeEdit.objIframe.$(".weiXinSaoYiSao").css("display", "none");
  103. } catch (e) {
  104. }
  105. try {
  106. objIframeEdit.objIframe.$(".qrContainerMainLogin").css("display", "none");
  107. } catch (e) {
  108. }
  109. try {
  110. objIframeEdit.objIframe.$(".mainLoginSubmitWeiXin").css("display", "none");
  111. } catch (e) {
  112. }
  113. try {
  114. let btnAll = objIframeEdit.objIframe.$(".btn");
  115. for (let btnAllI = 0; btnAllI < btnAll.length; btnAllI++) {
  116. if (btnAll[btnAllI].innerText == "微信登录") {
  117. // console.log(btnAll[btnAllI].innerText);
  118. btnAll[btnAllI].style.display = "none";
  119. }
  120. }
  121. } catch (e) {
  122. }
  123. // console.log("加载完成,当前是选择角色页面");
  124. } else {
  125. // console.log("加载完成,当前是3d场景页面");
  126. // 某个视角切换完成回调逻辑
  127. objIframeEdit.objIframe.window.CameraVisualAngleJsonToLookEvent = function (json) {
  128. callbackCameraVisualAngleJsonToLookEvent(json);
  129. };
  130. // 初始化被操作的页面
  131. viewInit();
  132. }
  133. },
  134. // 加载百分比
  135. function (
  136. // 加载百分比
  137. loadPercentage,
  138. // 是否需要触发点击进入的逻辑
  139. clickIntoBool
  140. ) {
  141. // console.log( "当前加载百分比", loadPercentage, clickIntoBool );
  142. callbackLoadPercentageEvent({
  143. "loadPercentage": loadPercentage,
  144. "clickIntoBool": clickIntoBool
  145. });
  146. }
  147. );
  148. // 回调距离事件
  149. objIframeEdit.distanceEventJsonCallback = function (distanceEventJson) {
  150. // console.log("回调距离事件", distanceEventJson);
  151. callbackDistanceYesEvent(distanceEventJson["yes"]);
  152. callbackDistanceNoEvent(distanceEventJson["no"]);
  153. };
  154. }
  155. appInit();
  156. </script>
  157. <template>
  158. <div class="threeWorldIframeContent" >
  159. <iframe
  160. :id="iframeId" :name="iframeId"
  161. class="threeWorldIframe"
  162. scrolling="auto" frameborder="no" marginwidth="0" marginheight="0"
  163. :src="url"
  164. >
  165. </iframe>
  166. </div>
  167. </template>
  168. <style lang="less" scoped>
  169. .threeWorldIframeContent * {
  170. -moz-user-select: none;
  171. -webkit-user-select: none;
  172. -ms-user-select: none;
  173. -khtml-user-select: none;
  174. user-select: none;
  175. }
  176. .threeWorldIframeContent {
  177. width: 100%;
  178. height: 100%;
  179. // position: fixed;
  180. position: absolute;
  181. left: 0px;
  182. top: 0px;
  183. z-index: 0;
  184. /* 注意这里必须是被允许穿透点击的,否则堆叠高于了 canvas,则会出现无法点击到canvas了。加了这个即可解决这个问题 */
  185. // pointer-events: none;
  186. }
  187. .threeWorldIframe {
  188. width: 100%;
  189. height: 100%;
  190. position: absolute;
  191. left: 0px;
  192. top: 0px;
  193. z-index: 0;
  194. /* 注意这里必须是被允许穿透点击的,否则堆叠高于了 canvas,则会出现无法点击到canvas了。加了这个即可解决这个问题 */
  195. // pointer-events: none;
  196. }
  197. </style>