/* var ceshi = ''; // var ceshi = 'http://192.168.0.135:8105'; // var ceshi = 'http://47.107.252.54:8105'; // var token = "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhZG1pbiIsInJvbGUiOm51bGwsIm1hbmFnZXIiOm51bGwsImlkIjoxLCJ1c2VyTmFtZSI6ImFkbWluIiwiZXhwIjoxNTk2NzAxNjAyLCJpYXQiOjE1OTY2MTUyMDIsImp0aSI6Ijk0YjA5YTg1LWViY2ItNDE1Yy04OGVmLWU0MDM1M2UzYmIxYyJ9.Uzi95n0kYXp7bdpY77MdLtTpPL_Fq-jn0tE7gjg6AzA" var token = window.localStorage.token */ var ceshi = ''; // var ceshi = 'http://8.135.106.227:8004'; var _musicMaxWeight = 8 //M var _hotNum = 0 function reData(data, type) { return JSON.stringify(data) == type ? null : data } //window.EditTools //新编辑界面 var EditTools = function(n) { //main2018 里面的主要对象 this.n = n; //当前状态 this.atPanel = null; //场景信息 this.sceneInformation = new SceneInformation(); //热点 this.hotpoint = new Hotpoint(); //导览 this.editGuide = new EditGuide(); //音乐 this.editMiuse = new EditMiuse(); //初始化界面 this.init(); } EditTools.prototype.init = function() { this.hotpoint.init(this.n); var that = this; this.initSaveAll(); this.active(); //请求数据someData.js $.ajax(g_Prefix + "data/" + window.number + "/someData.json" + "?" + Date.now(), { dataType: "json" }).done(function(data) { //创建导览 that.editMiuse.init(data); //请求完someData.js 之后再请求data2.js data2(data, that.sceneInformation.init); }) //请求热点数据 data2.js function data2(data, callback) { $.ajax(g_Prefix + "data/" + window.number + "/data2.js" + "?" + Date.now(), { dataType: "json" }).done(function(data2) { callback(data, data2); // fyz 初始化导览需要两部分数据, 其中data2为data.js中的数据 that.editGuide.init(data, data2); }).fail(callback(data, data2)) } $("body").on("click", function() { $(".DelConfirm").removeClass("active"); }) } //点击的时候激活状态 EditTools.prototype.active = function() { var that = this; var confirmSnap = $(".confirmSnap.innerBtn"); var snapshotGui = $(".snapshotGui.overlayGui"); $('.toolBottom .toolLeft li').click(function() { var name = $(this).data("name"); $('.toolLeft li[data-name=' + name + ']').addClass("active").siblings().removeClass("active"); $('.toolRight .' + name).removeClass("hide").siblings().addClass("hide"); if (name == that.atPanel) return; console.log(`atPanel ${that.atPanel} name ${name}`) switch (that.atPanel) { //退出 case "panoVisible": VisiSet.finishSetPanoVisible() break; case "screen": confirmSnap.addClass("hide").removeClass("unable"); snapshotGui.hide(); break; case "overlay": EditOverlay.leave() break; case "hotpoint": $("#hotpointDetail").hasClass("atRight") || $("#hotpointDetail a.close").click(); VisiSet.finishSetTagVisible() break; } switch (name) { case "panoVisible": VisiSet.enterSet(VisiSet.beginSetPanoVisible.bind(VisiSet)) $(".toolLeft").addClass("unable") break; case "screen": confirmSnap.removeClass("hide"); $('#camera-start').text("点此设置为初始画面") snapshotGui.show(); if (player.modeTran.split("-")[1] != "panorama") $(".confirmSnap").addClass("unable") break; case "overlay": EditOverlay.enter() break; } that.atPanel = name; /* if(name != "hotpoint"){ $("#hotpointDetail").hasClass("atRight") || $("#hotpointDetail a.close").click() } */ }) //滚动阻止事件 $(".toolRight div.content").on("mousewheel", function(event) { event.stopPropagation() }); // 输入框阻止事件 $('.toolRight').on('keydown', function(ev) { ev.stopPropagation(); }) } //保存按钮 EditTools.prototype.initSaveAll = function() { var that = this; $('#save').on('click', function() { $(".edit-loading").removeClass("hide"); var $images = $(".information .edit-fun-images a.result"); new Promise(function(resolve, reject) { upload($images, 'images', resolve) }).then(function(imgUrls) { //导览的数据 var guides = Array.from($('.tourList ul li')).map(function(dom) { return dom.data }) var hots = {} // 热点数据 var hotLength = 0; for (let i in player.model.hots) { let hot = player.model.hots[i]; hots[i] = { position: { x: hot.mesh.position.x, y: hot.mesh.position.y, z: hot.mesh.position.z }, //有的定制场景代码是旧的,只能使用rotation,所以不输出quaternion : rotation: hot.isSprite ? new THREE.Euler().setFromQuaternion(hot.quaternion).toObject() : hot.mesh.rotation.toObject(), isSprite: hot.isSprite ? 1 : 0, noAction: hot.noAction ? 1 : 0, linkType: hot.linkType, infoAttribute: hot.infoAttribute, order: hotLength++//因为热点保存后在hots里的顺序会被修改,所以使用order来记录顺序 } if (hot.visiblePanos) hots[i].visiblePanos = hot.visiblePanos if (hot.infoAttribute) { delete hot.infoAttribute.position; delete hot.infoAttribute.quaternion; delete hot.infoAttribute.rotation; } } var info = { name: $('#pjtName').val(), summary: $('#info-summary').val(), weixinDesc: $('#weixin-summary').val(), shareImgUrl: imgUrls[0] || '', backgroundMusic: $('#query-bgm').attr('href'), hoticon: JSON.parse($(".hotStyle-item li.active").attr("data-val")), camera_start: $('#camera-start')[0].data, loadlogo: $("#loadlogo").is(':checked'), special: $("#g_specialScene").is(':checked'), vision_version: $("#twoData").is(':checked') ? "1.1.562.17209" : false, flyInOnlyBySwitch: $("#flyInOnlyBySwitch").is(':checked'), /************************************** 方奕卓 场景可配置项 ******************************************/ hotImageScale: $("#hotImgScale").is(':checked'), // 热点图片可放大 hideFloorMarker: $("#hideFloorMarker").is(':checked'), // 地面标记 hideMouseMarker: $("#hideMouseMarker").is(':checked'), // 鼠标标记 floorMarkerColor: $('#floorMarkerColor').val(), // 地面/导览标志颜色 mouseMarkerColor: $('#mouseMarkerColor').val(), // 鼠标标志颜色 momentTour: $('#tourSwitch input').is(':checked') ? 'black' : 'walk', // 导览瞬间过渡 showHotListSta: $('#hotListSwitch input').is(':checked'), // 开启热点列表 hotIconScale: $('#hotIconScale input').val(), // 热点缩放 supportsVR: $('#VRSwitch input').is(':checked'), // 开启VR功能 /**************** 陈志广 小地图可配置项 *********** */ cadSignColor: $('#cadSignColor').val(), cadBorderColor: $('#cadBorderColor').val(), cadBorderWidth: $('#cad-size').val(), showCad: $('input[name="show-cad"]').is(':checked'), } var overlayInfo = [] player.overlayGroup.children.forEach((overlay)=>{ var info = EditOverlay.getSavingInfo(overlay) if (info) overlayInfo.push(info); } ) let url = '/api/scene/edit' $.ajax({ method: 'POST', headers: { 'Content-Type': 'application/json', token: token }, dataType: 'json', contentType: 'application/json', url: ceshi + url, data: JSON.stringify({ sceneCode: number, hots: reData(hots, '{}'), name: number, guides: reData(guides, '[]'), info: info, tourAudio: reData(that.editGuide.tourAudio, '{}'), overlays: reData(overlayInfo, '[]') }), success: function(data) { if (data.code === 0) { location.reload() } if (data.code === 5001) { alert('请重新登录') localStorage.token = '' location.reload() } } }) }); }) } //场景信息编辑 var SceneInformation = function() {} SceneInformation.prototype.init = function(data, data2) { var $options = $('.hotStyle-item li'); var $loadlogo = $("#loadlogo"); var $hotImageScale = $("#hotImgScale"); var $hideFloorMarker = $("#hideFloorMarker"); var $hideMouseMarker = $("#hideMouseMarker"); var $g_specialScene = $("#g_specialScene"); var $twoData = $("#twoData"); /*******************方奕卓 其他项需要用到data来初始化, 故一并放到这里 ******************/ let momentTour = $('#tourSwitch input'); // 导览瞬间过渡开关 let hotListSwitch = $('#hotListSwitch input'); // 热点列表开关 let hotIconScale = $('#hotIconScale input'); // 热点图标缩放 let VRSwitch = $('#VRSwitch input'); // VR功能开启 /***********************************************************************************/ $(".model-title2").text(data.name); $('#pjtName').val(data.name); $('#info-summary').val(data.summary); //if (data2) $('#weixin-summary').val(data2.weixinDesc); $('#weixin-summary').val(data.weixinDesc); for (var i = 0; i < $options.length; i++) { if ($options.eq(i).attr('data-val') === JSON.stringify(data.hoticon)) { $options.eq(i).addClass("active").siblings().removeClass("active"); } } $('#camera-start')[0].data = data.camera_start; $(".shotImg.innerBtn").on("click", ()=>{ var EntryInfo = $('#camera-start')[0].data if (EntryInfo) { var to = player.model.panos.get(EntryInfo.pano.uuid); var q = new THREE.Quaternion().fromArray(EntryInfo.camera.quaternion); var lookAtPoint = new THREE.Vector3(0,0,-1).applyQuaternion(q).add(to.position); player.flyToPano({ pano: to, lookAtPoint: lookAtPoint }) } } ) if(data.shareImgUrl){ var imagesHTML = '
' $(".information .edit-fun-images.list ").html(imagesHTML); $("#shareImgUpload").addClass("hide") } /*************方奕卓 其他项的初始化操作 ************/ initColorElem(data); addListener(); // 给其他元素绑定事件 if (data.momentTour === 'black') { momentTour.prop('checked', true); } if (data.showHotListSta) { hotListSwitch.prop('checked', true); } if (data.hotIconScale && parseFloat(data.hotIconScale) <= 1.5 && parseFloat(data.hotIconScale) >= 0.3) { hotIconScale.val(parseFloat(data.hotIconScale)); } if (data.supportsVR) { VRSwitch.prop('checked', true); } /************************************************/ //隐藏公司logo if (data.loadlogo) { $loadlogo[0].checked = true showLogo(); } // 热点图片放大 if (data.hotImageScale) { $hotImageScale[0].checked = true } // 隐藏地面标记 if (data.hideFloorMarker) { $hideFloorMarker[0].checked = true } // 隐藏鼠标标记 if (data.hideMouseMarker) { $hideMouseMarker[0].checked = true } //特殊大场景 if (data.special) { $g_specialScene[0].checked = true } //启动二代的数据 if (data.vision_version === "1.1.562.17209" || data.vision_version) { $twoData[0].checked = true } if (data.flyInOnlyBySwitch) { $("#flyInOnlyBySwitch")[0].checked = true } } /** * 初始化颜色选择的html元素 * @param {*} data * @param {*} elem */ function initColorElem(data, elem) { let $floorMarkerColor = $('#floorMarkerColor'); let $mouseMarkerColor = $('#mouseMarkerColor'); let $floorMarkerColorTex = $('#floorMarkerColorTex'); let $mouseMarkerColorTex = $('#mouseMarkerColorTex'); let $cadSignColor = $('#cadSignColor'); let $cadSignColorTex = $('#cadSignColorTex'); let $cadBorderColor = $('#cadBorderColor'); let $cadBorderColorTex = $('#cadBorderColorTex'); var colorRe = /^#([0-9a-fA-F]{6}|[0-9a-fA-F]{3})$/; // 事件监听 $floorMarkerColor.on('change', function(e) { $('#floorMarkerColorTex').attr('placeholder', e.target.value) }) $floorMarkerColorTex.on('blur keydown', function(e) { (e.type === 'blur' || e.type === 'keydown' && e.keyCode === 13) && setColor(e, $floorMarkerColor, this); }) $mouseMarkerColor.on('change', function(e) { $('#mouseMarkerColorTex').attr('placeholder', e.target.value) }) $mouseMarkerColorTex.on('blur keydown', function(e) { (e.type === 'blur' || e.type === 'keydown' && e.keyCode === 13) && setColor(e, $mouseMarkerColor, this); }) // 事件监听 $cadSignColor.on('change', function(e) { $('#cadSignColorTex').attr('placeholder', e.target.value) }) $cadSignColorTex.on('blur keydown', function(e) { (e.type === 'blur' || e.type === 'keydown' && e.keyCode === 13) && setColor(e, $cadSignColor, this); }) // 事件监听 $cadBorderColor.on('change', function(e) { $('#cadBorderColorTex').attr('placeholder', e.target.value) }) $cadBorderColorTex.on('blur keydown', function(e) { (e.type === 'blur' || e.type === 'keydown' && e.keyCode === 13) && setColor(e, $cadBorderColor, this); }) // 设置颜色值 function setColor(e, colorElem, inputElem) { var isColor = colorRe.test(e.target.value); isColor && colorElem.val(e.target.value); // isColor ? colorElem.val(e.target.value): (inputElem.placeholder = colorElem.val()); } // 判断data中是否有存在的颜色值, 否则设置默认值 data.floorMarkerColor ? $floorMarkerColor.val(data.floorMarkerColor) : $floorMarkerColor.val('#4bcdfc'); data.mouseMarkerColor ? $mouseMarkerColor.val(data.mouseMarkerColor) : $mouseMarkerColor.val('#4bcdfc'); // 判断data中是否有存在的颜色值, 否则设置默认值 data.cadSignColor ? $cadSignColor.val(data.cadSignColor) : $cadSignColor.val('#00c8af'); data.cadBorderColor ? $cadBorderColor.val(data.cadBorderColor) : $cadBorderColor.val('#ffffff'); $('input[name="show-cad"]')[0].checked = !!data.showCad $('#cad-size > option[value="'+(data.cadBorderWidth ? data.cadBorderWidth : '0.01')+'"]').attr("selected",true); if (data.showCad) { $('input[name="show-cad"]').trigger('change') } } $('input[name="show-cad"]').on('change', function(ev) { if (!ev.target.checked) { return $('.cad').hide() } let taht = this if (!taht.floorJSON) { $.ajax({ url: '//super.4dage.com/data/'+ window.number +'/floor.json', method: 'GET', success(res) { taht.floorJSON = res loadCAD(taht.floorJSON) $('#cadSignColor').on('change', function(ev) { loadCAD() }) $('#cadBorderColor').on('change', function(ev) { loadCAD() }) $('#cad-size').on('change', function(ev) { loadCAD() }) }, error() { alert('当前场景没有小地图floor.json文件,请联系三维部门添加') ev.target.checked = false } }) } else { $('.cad').show() } }) function loadCAD(data) { grendCAD(data, $('#player')[0], $('#cadSignColor').val(), $('#cadBorderColor').val(), $('#cad-size').val()) } function addListener() {} //设置初始界面 function getSeft(seft) { $('#camera-start').on('click', function() { if (VisiSet.setPanoVisible) { return VisiSet.savePanoVisibles() } else if (VisiSet.setTagVisible) { return VisiSet.saveTagVisibles() } // 这部分内容需要配合main_2018.js中来进行修改 var snap = JSON.parse("{" + seft.getSnapAngleInfo() + "}") this.data = { camera: { position: snap.metadata.camera_position, quaternion: snap.metadata.camera_quaternion// 相机朝向 }, pano: { uuid: snap.metadata.scan_id // 起始点位的id } } var ev = document.createEvent("MouseEvent"); //点击截取视图 g_snapShotWidth = 240 * 4; g_snapShotHeight = 118 * 4; window.screenSta = 'startScreen'; ev.initMouseEvent("snapshotBegin", true, true, document.defaultView, 0, 0, 0, 0, 0, false, false, false, false, 0, null); ev.__callback = (imgData,info)=>{ uploadImg(imgData, (rs)=>{ if (rs.code === 0) { $(".shotImg.innerBtn").css("background-image", "url(" + rs.data + ")") this.data.thumbImg = rs.data; } } , "thumbImg.jpg") } window.dispatchEvent(ev); }); } //热点编辑 var Hotpoint = function() { this.spotList = $(".spotList"); this.hotpointDetail = $("#hotpointDetail"); // fyz 导览编辑页面同样采取热点编辑的样式, 这里确保只查找到热点编辑 } Hotpoint.prototype.init = function(n) { this.active(); this.addmedia(); // 添加多媒体 this.addMusic(); // 添加音乐 this.addModel(); // 添加模型 this.addwebPack(); // 添加外链 this.initSaveHot(); // 保存热点 var that = this; let hotIconScale = $('#hotIconScale'); //点击添加热点按钮 $('#addHotSpots').on("click", function() { //点击添加热点 g_HotStatus = g_HotStatus === "add" ? null : "add"; $("#player").css("cursor", "cell"); }); //点击热点列表弹出按钮 this.spotList.on("click", function(e) { var target = $(e.target); if (target.hasClass("del")) { e.stopPropagation(); target.siblings(".DelConfirm").addClass("active"); that.spotList.find("i").text(that.spotList.find("ul li").length); } else { if (target.hasClass("DelConfirm")) { e.stopPropagation(); that.removeHot(target, n); } else { //点击热点列表弹出编辑热点窗口 if (target.hasClass("title") || target.hasClass("icon")) { that.editHot(target) } } } }); //点击热点编辑窗口右上角的关闭按钮 this.hotpointDetail.find("a.close, button.cancel").on("click", function() { var spot_id = that.hotpointDetail.attr("data-id"); var hot = player.model.hots[spot_id]; var info = hot.infoAttribute; //that.hotpointDetail[0].targetDOM.infoAttribute; if (info) { info.position && hot.mesh.position.copy(info.position) info.quaternion && hot.mesh.quaternion.copy(info.quaternion) hot.isSprite = info.isSprite hot.noAction = info.noAction hot.linkOutside = info.linkOutside hot.hardware = info.hardware } that.hotpointDetail.addClass("atRight"); transformControls.detach() }); //创建列表 for (let i in player.model.hots) { this.addHotList(player.model.hots[i]); } // 初始话的时候把热点信息添加到对应的热点中 直接使用data2.json的会怎样? /* $.ajax(g_Prefix + "data/" + window.number + "/hot/js/data.js" + "?" + Date.now(), { dataType: "json" }) .then(function (infos) { that.infos = infos ; Object.keys(infos).forEach(function (key) { //sxm增加热点列表可读性,方便查看删除操作等 that.spotList.find("ul li[data-spid=" + key + "]")[0] && (that.spotList.find("ul li[data-spid=" + key + "]")[0].infoAttribute = infos[key])&& (that.spotList.find("ul li[data-spid=" + key + "] .title").html(infos[key].title)); }) }) */ this.hotpointDetail.find("li[name='addHardware'] #grDel").on("click",()=>{ this.editSpot.hardwareTemp = {}; //清空时不能为null! this.hotpointDetail.find("li[name='addHardware'] #grAdd").removeClass('unable'); this.editSpot.showPannel() }) } /** * 显示编辑热点的窗口和初始化热点窗口的数据 */ Hotpoint.prototype.editHot = function(target) { this.hotpointDetail.removeClass("atRight"); $("#hotpointDetail .audio.mediaUpload").find("input").val(''); // 点击编辑导览清空上一次文件 var playIcon = 'images/play.png'; var $layout = $("#hotpointDetail")[0]; $layout.targetDOM = target.closest("li")[0]; //closest匹配选择器的第一个祖先元素 //编辑时将热点列表唯一标识带入,以便后期保存使用识别 var li_id = $($layout.targetDOM).attr("data-spid"); this.editSpot = player.model.hots[li_id]; this.hotpointDetail.attr("data-id", li_id); var info = this.editSpot.infoAttribute || {} //$layout.targetDOM.infoAttribute || {} transformControls.transCtlChangeMode("translate") // 参数初始化 info.title = info.title || ''; info.content = info.content || ''; info.iframe = info.iframe || []; info.model = info.model || []; info.images = info.images || []; info.video = info.video || []; info.isSprite = this.editSpot.isSprite info.noAction = this.editSpot.noAction info.hardwareTemp = info.hardware || {} if(info.hardware && info.hardware.id!=void 0){ this.hotpointDetail.find("li[name='addHardware'] #grAdd").addClass("unable"); }else{ this.hotpointDetail.find("li[name='addHardware'] #grAdd").removeClass("unable"); } try { transformControls.attach(player.model.hots[li_id].mesh) player.model.hots[li_id].examine(player, { dontOpen: true }) //add info.position = player.model.hots[li_id].position.clone() info.quaternion = player.model.hots[li_id].quaternion.clone() } catch (e) {} initStyle(player.model.hots[li_id]) $("#isSprite")[0].checked = this.editSpot.isSprite // $("#noAction")[0].checked = this.editSpot.noAction $(".webPage .MenuOptions li").removeClass("chosen") $(".webPage .MenuOptions li[index = " + this.editSpot.linkType+"]").addClass("chosen") var iframesHTML = info.iframe.map(function(iframe) { return this.inputList("请填写网页链接", iframe) } .bind(this)) var modulesHTML = info.model.map(function(module) { return this.inputList("请填写网页链接", module) } .bind(this)) var imagesHTML = info.images.map(function(image) { return '' }) var videosHTML = info.video.map(function(ly) { var imgDom = (!ly.img || ly.img === "undefined") ? '' : 'success'; var imgUrl = (!ly.img || ly.img === "undefined") ? playIcon : ly.img; return '' }) this.hotpointDetail.find(".name > input").val(info.title); this.hotpointDetail.find(".editText").val(info.content); this.hotpointDetail.find(".photo .list").html(imagesHTML); this.hotpointDetail.find(".video .list").html(videosHTML); this.hotpointDetail.find(".model .list").html(modulesHTML); this.hotpointDetail.find(".webPage .list").html(iframesHTML); let bgName = info.bgName || '热点背景音乐'; if (info.backgroundMusic) { this.hotpointDetail.find(".audio .playBox").removeClass("hide"); this.hotpointDetail.find("#upload-hotBgm").attr('data-hotBgm', info.backgroundMusic) this.hotpointDetail.find(".audio .playBox a").attr("href", info.backgroundMusic); this.hotpointDetail.find('#hotBgName')[0].innerHTML = bgName; this.hotpointDetail.find(".audio .submit").text("替换"); } else { this.hotpointDetail.find(".audio .playBox").addClass("hide"); this.hotpointDetail.find("#upload-hotBgm").removeAttr('data-hotBgm') // 没有背景音乐,则移除该属性, 避免其他热点的干扰 } // $layout.targetDOM.infoAttribute = info this.editSpot.infoAttribute = info } //添加图片和视频 Hotpoint.prototype.addmedia = function() { // 视频预览控制 var $videoLayout = $('.fun-view-video') $videoLayout.find('span').on('click', function() { $videoLayout.hide(); $videoLayout.find('video').attr('src', '')[0].pause() }); // 图片加载回调 function imageSuccess(file) { if (!/image\/\w+/.test(file.type)) { alert("文件必须为图片!"); return false; } if (!restrictedSize(file, 9)) { return false; } var img = new Image() img.src = URL.createObjectURL(file); return img } // 视频加载回调 function videoSuccess(file, $elayout) { if (!/video\/\w+/.test(file.type)) { alert("视频必须为mp4格式!"); return false; } $elayout.append('上传封面') return '
'
}
// 视频封面回调
function thumSuccess(file, $elayout, $seft) {
if (!/image\/\w+/.test(file.type)) {
alert("文件必须为图片!");
return false;
}
if (!restrictedSize(file, 2)) {
return false;
}
$seft.closest('div').find('img').attr('src', URL.createObjectURL(file));
}
// 图片与视频加载
function fileHandle() {
var $seft = $(this)
var $layout = $seft.closest("li");
var type = $seft.parent().attr('data-type');
var file = this.files[0];
var $din = $(document.createElement('div'));
var fnc = type === 'photo' ? imageSuccess : type === 'video' ? videoSuccess : thumSuccess
var $dom = fnc(file, $din, $seft)
if (type === 'photo' || type === 'video') {
if (!$dom)
return $seft.val('');
var $addLayout = $(document.createElement('a'));
var $addInput = $('')
var $close = $(document.createElement('span'));
$addInput[0].files = this.files;
$addLayout.append($addInput)
$addLayout.append($close);
$addLayout.append($dom);
$addLayout.addClass("result");
$din.prepend($addLayout);
$layout.find('.edit-fun-images').append($din);
}
if (searchParent($seft[0], {
id: 'shareImgUpload'
})) {
//信息页面的分享图片
$("#shareImgUpload").addClass("hide")
}
}
;// 图片与视频加载
$('.upload, .edit-fun-images').on('change', function(ev) {
if (ev.target.tagName.toUpperCase() === 'INPUT') {
fileHandle.call(ev.target)
}
})
$('.edit-fun-images').on('click', function(ev) {
var $tag = $(ev.target)
var tagName = ev.target.tagName.toUpperCase()
if (tagName === 'SPAN') {
var $resf = $(ev.target)
if (searchParent($resf[0], {
className: 'forShareImg'
})) {
//信息页面的分享图片
$("#shareImgUpload").removeClass('hide')
}
$resf.parent().parent().remove()
} else if (tagName === 'IMG' && $tag.hasClass('play-video')) {
$videoLayout.css('display', 'flex').find('video').attr('src', $tag.attr('videoURL'))[0].play()
}
})
}
//========================xzw=======================更改热点样式图
var currStyle;
//当前选择的模式 默认or用户自定义
var currentHotStyleImg = [];
//当前编辑状态下添加的图, 每次开始编辑热点时更新
var editStyleImgIndex = 0;
//当前正在编辑第几张图
var uploadInput = $('');
$("#hotpointDetail .style .MenuOptions li").on("click", (e)=>{
//热点页面内样式切换
currStyle = $(e.target).attr("index")
if (currStyle == "default") {
$("#userUploadStyle").addClass("hide")
} else {
$("#userUploadStyle").removeClass("hide")
}
$("#hotpointDetail .style .MenuOptions li").removeClass("chosen");
$(e.target).addClass("chosen")
}
)
$('#userUploadStyle li').on('click', (e)=>{
var index = $(e.currentTarget).index();
if (e.target.classList.contains("del")) {
//删除图片
if (currentHotStyleImg.length == 2 && index == 0) {
//删除第一个 且有第二个的话
setImgContent(0, currentHotStyleImg[1].src);
setImgContent(1, null);
currentHotStyleImg = [currentHotStyleImg[1]]
} else {
setImgContent(index, null);
currentHotStyleImg.pop()
if (currentHotStyleImg.length == 0) {
$('#userUploadStyle li').eq(1).addClass("hide");
}
}
} else {
//添加图片
uploadInput.click()
editStyleImgIndex = index;
}
}
)
uploadInput.on("change", (e)=>{
inputMedia({
enableTypes: ["photo"],
photoDone: (resultImg)=>{
currentHotStyleImg[editStyleImgIndex] = resultImg;
setImgContent(editStyleImgIndex, resultImg.src)
if (editStyleImgIndex == 0)
$('#userUploadStyle li').eq(1).removeClass("hide");
resultImg.needSave = true
}
}, "photo", e);
}
)
var setImgContent = function(index, src) {
var li = $('#userUploadStyle li').eq(index)
var div = li.find('>div');
if (src) {
li.addClass("uploaded")
div.css("background-image", `url(${src})`)
} else {
li.removeClass("uploaded")
div.css("background-image", '')
}
}
var initStyle = function(hot) {
//每次开始编辑热点时更新列表UI 和 currentHotStyleImg
if (!hot.styleTex)
hot.styleTex = [];
$('#userUploadStyle li>div').css("background-image", "");
$('#userUploadStyle li').removeClass("uploaded")
currentHotStyleImg = hot.styleTex.slice(0);
if (hot.styleTex.length) {
$("#hotpointDetail .style .MenuOptions li").eq(1).click();
hot.styleTex.forEach((img,index)=>{
setImgContent(index, img.src)
}
)
$('#userUploadStyle li').eq(1).removeClass("hide")
} else {
$("#hotpointDetail .style .MenuOptions li").eq(0).click()
$('#userUploadStyle li').eq(1).addClass("hide")
}
}
//=====================================================
//选择热点的样式
Hotpoint.prototype.active = function() {
$(".hotStyle-item li").on('click', function() {
$(this).addClass('active').siblings().removeClass('active');
})
}
//当前处于的状态,比如是否是添加热点的状态
Hotpoint.prototype.state = function(that, Hot) {
if (g_HotStatus === "add") {
//console.log(Hot)
this.addHot(that, Hot, (hot)=>{
this.addHotList(hot);
}
);
}
}
Hotpoint.prototype.updateNumDisplay = function() {
this.spotList.find("i").text(this.spotList.find("ul li").length);
}
//删除热点
Hotpoint.prototype.removeHot = function(that, thisScene) {
var hotId = that.closest("li").attr("data-spid");
player.model.hots[hotId].dispose();
delete player.model.hots[hotId]
that.closest("li").remove();
this.updateNumDisplay()
console.log("删除成功:" + hotId);
}
//添加热点模型
Hotpoint.prototype.addHot = function(that, Hot, fn) {
if (!window.hotIntersect)
return;
// 没有正确的热点位置, return
var position = hotIntersect.point.toArray();
//var sid = g_HotMeshes.length > 0 ? "sprite_" + (parseInt(g_HotMeshes[g_HotMeshes.length - 1].name.substring(7)) + 1) : "sprite_" + g_HotMeshes.length;//这么写出bug了。因为当前热点名字不是按照从小到大
var sid = getRandomSid()
var hot = new Hot(sid,{
position: position,
rotation: [0, 0, 0],
size: 1.05
},that.model);
that.model.hots[sid] = hot;
if (player.getMouseDirection().angleTo(window.hotIntersect.face.normal) < Math.PI / 2) {
hot.mesh.lookAt(window.hotIntersect.face.normal.clone().negate().add(hotIntersect.point));
hot.mesh.position.add(window.hotIntersect.face.normal.clone().negate().multiplyScalar(0.01))
//avoid mesh crash with chunks 模型的精度可能和floorplan的不一样,所以chunk即使材质经过处理还是会闪烁但是wallmesh不会
} else {
hot.mesh.lookAt(window.hotIntersect.face.normal.clone().add(hotIntersect.point));
hot.mesh.position.add(window.hotIntersect.face.normal.clone().multiplyScalar(0.01))
}
hot.quaternion.copy(hot.mesh.quaternion)
hot.position.copy(hot.mesh.position)
g_HotStatus = false;
that.mouseCouldBeClickToMove = false;
$("#player").css("cursor", "");
//添加完热点之后的回调函数
if (g_HotMeshes && g_newHot.length === g_newHot.length++) {
var thisScene = that;
//fn && fn.call(this, thisScene);
fn && fn(hot)
}
}
//添加热点列表
Hotpoint.prototype.addHotList = function(hot) {
var li = $("