| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252 |
- <script setup>
- import { watch } from "vue";
- import { CommonVal } from "@/components/ChengGuangYuanJing/store/CommonVal.js";
- import { IframeEdit } from '@/components/ChengGuangYuanJing/js/IframeEdit.js'
- // 固定操作3d的代码。可以不做其他修改
- // 接收参数
- const props = defineProps({
- iframeId: {
- type: String
- },
- url: {
- type: String
- },
- });
- // 定义发射给父组件的方法
- const emits = defineEmits([
- 'callbackObjIframeEdit',
- 'callbackLoadPercentage',
- 'callbackLoadEnd',
- 'callbackDistanceYes',
- 'callbackDistanceNo',
- 'callbackCameraVisualAngleJsonToLook'
- ])
- /**
- * 回调加载百分比
- */
- const callbackLoadPercentageEvent = (json) => {
- emits('callbackLoadPercentage', json);
- }
- /**
- * 回调加载完成
- */
- const callbackLoadEndEvent = (json) => {
- emits('callbackLoadEnd', json);
- }
- /**
- * 回调距离范围内
- */
- const callbackDistanceYesEvent = (json) => {
- emits('callbackDistanceYes', json);
- }
- /**
- * 回调距离范围外
- */
- const callbackDistanceNoEvent = (json) => {
- emits('callbackDistanceNo', json);
- }
- /**
- * 回调视角切换完成
- */
- const callbackCameraVisualAngleJsonToLookEvent = (json) => {
- emits('callbackCameraVisualAngleJsonToLook', json);
- }
- /**
- * 页面初始化
- */
- const viewInit = () => {
- // 判断是否成功找到摇杆才触发
- var viewTimeBool = setInterval(function () {
- try {
- var objPreviewBtnMove = objIframeEdit.objIframe.$("#previewBtnMove");
- if (objPreviewBtnMove != null && objPreviewBtnMove != undefined) {
- viewAssemblyVisibilityMain();
- // clearInterval(viewTimeBool);
- // viewTimeBool = null;
- }
- } catch (e) {
- }
- }, 1000 / 3);
- }
- /**
- * 隐藏页面组件
- */
- const viewAssemblyVisibilityMain = () => {
- objIframeEdit.viewAssemblyVisibility();
- objIframeEdit.viewAssemblyVisibilityRole();
- objIframeEdit.viewBackgroundColorClean();
- // 额外隐藏其他的组件
- objIframeEdit.objIframe.$("#edit3DActionTab").css("display", "none");
- objIframeEdit.objIframe.$(".previewRoleChatMain").css("display", "none");
- objIframeEdit.objIframe.$(".previewBtnMove").css("display", "none");
- objIframeEdit.objIframe.$(".previewBtnAction").css("display", "none");
-
- }
- // 如果是多个iframe,则new 出多个即可。 后续对应的iframe,单独对应的对象去触发封装好的方法
- let objIframeEdit = new IframeEdit();
- CommonVal().obj[props.iframeId] = objIframeEdit;
- /**
- * 初始化应用
- */
- const appInit = () => {
- objIframeEdit.loading(
- // html iframe 的 唯一 id, 也就是对应 html id="" 的参数
- props.iframeId,
- // 加载完成回调
- function (roleChoiceOpenBool) {
- callbackLoadEndEvent({
- "roleChoiceOpenBool": roleChoiceOpenBool
- });
- // 如果是角色选择
- if (roleChoiceOpenBool === true) {
- try {
- objIframeEdit.objIframe.$(".weiXinSaoYiSao").css("display", "none");
- } catch (e) {
- }
- try {
- objIframeEdit.objIframe.$(".qrContainerMainLogin").css("display", "none");
- } catch (e) {
- }
- try {
- objIframeEdit.objIframe.$(".mainLoginSubmitWeiXin").css("display", "none");
- } catch (e) {
- }
- try {
- let btnAll = objIframeEdit.objIframe.$(".btn");
- for (let btnAllI = 0; btnAllI < btnAll.length; btnAllI++) {
- if (btnAll[btnAllI].innerText == "微信登录") {
- // console.log(btnAll[btnAllI].innerText);
- btnAll[btnAllI].style.display = "none";
- }
- }
- } catch (e) {
- }
- // console.log("加载完成,当前是选择角色页面");
- } else {
- // console.log("加载完成,当前是3d场景页面");
- // 某个视角切换完成回调逻辑
- objIframeEdit.objIframe.window.CameraVisualAngleJsonToLookEvent = function (json) {
- callbackCameraVisualAngleJsonToLookEvent(json);
-
- };
- // 初始化被操作的页面
- viewInit();
-
- }
- },
- // 加载百分比
- function (
- // 加载百分比
- loadPercentage,
- // 是否需要触发点击进入的逻辑
- clickIntoBool
- ) {
- // console.log( "当前加载百分比", loadPercentage, clickIntoBool );
- callbackLoadPercentageEvent({
- "loadPercentage": loadPercentage,
- "clickIntoBool": clickIntoBool
- });
-
- }
- );
- // 回调距离事件
- objIframeEdit.distanceEventJsonCallback = function (distanceEventJson) {
- // console.log("回调距离事件", distanceEventJson);
- callbackDistanceYesEvent(distanceEventJson["yes"]);
- callbackDistanceNoEvent(distanceEventJson["no"]);
- };
- }
- appInit();
- </script>
- <template>
- <div class="threeWorldIframeContent" >
- <iframe
- :id="iframeId" :name="iframeId"
- class="threeWorldIframe"
- scrolling="auto" frameborder="no" marginwidth="0" marginheight="0"
- :src="url"
- >
- </iframe>
- </div>
- </template>
- <style lang="less" scoped>
- .threeWorldIframeContent * {
- -moz-user-select: none;
- -webkit-user-select: none;
- -ms-user-select: none;
- -khtml-user-select: none;
- user-select: none;
- }
- .threeWorldIframeContent {
- width: 100%;
- height: 100%;
- // position: fixed;
- position: absolute;
- left: 0px;
- top: 0px;
- z-index: 0;
- /* 注意这里必须是被允许穿透点击的,否则堆叠高于了 canvas,则会出现无法点击到canvas了。加了这个即可解决这个问题 */
- // pointer-events: none;
- }
- .threeWorldIframe {
- width: 100%;
- height: 100%;
- position: absolute;
- left: 0px;
- top: 0px;
- z-index: 0;
- /* 注意这里必须是被允许穿透点击的,否则堆叠高于了 canvas,则会出现无法点击到canvas了。加了这个即可解决这个问题 */
- // pointer-events: none;
- }
- </style>
|