manage.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326
  1. //管理js文件 获取modeldata.js 判断是否有特殊的字段,如果有就先加载SpecialScene.js 里面有对特殊场景处理的代码 否则就直接加载main
  2. var Manage = function(){
  3. this.weixinURL = "https://res.wx.qq.com/open/js/jweixin-1.2.0.js",
  4. this.time = "?"+new Date().getTime();
  5. this.loadAudio();
  6. this.loadWeixin();
  7. }
  8. //动态加载js文件
  9. Manage.prototype.LoadJs = function(_files, succes){
  10. /* 已加载文件缓存列表,用于判断文件是否已加载过,若已加载则不再次加载*/
  11. var classcodes = [];
  12. var FileArray = [];
  13. if (typeof _files === "object") {
  14. FileArray = _files;
  15. } else {
  16. /*如果文件列表是字符串,则用,切分成数组*/
  17. if (typeof _files === "string") {
  18. FileArray = _files.split(",");
  19. }
  20. }
  21. if (FileArray != null && FileArray.length > 0) {
  22. var LoadedCount = 0;
  23. for (var i = 0; i < FileArray.length; i++) {
  24. loadFile(FileArray[i], function() {
  25. LoadedCount++;
  26. if (LoadedCount == FileArray.length) {
  27. try {
  28. succes();
  29. }
  30. catch(err) {
  31. console.log("err: 您未定义回调");
  32. }
  33. }
  34. })
  35. }
  36. }
  37. /*加载JS文件,url:文件路径,success:加载成功回调函数*/
  38. function loadFile(url, success) {
  39. if (!FileIsExt(classcodes, url)) {
  40. var _ThisType = GetFileType(url);
  41. var ThisType = _ThisType.indexOf("?") == -1 ? _ThisType : _ThisType.substring(0,_ThisType.indexOf("?"));
  42. var fileObj = null;
  43. if (ThisType == ".js") {
  44. fileObj = document.createElement('script');
  45. fileObj.src = url;
  46. } else if (ThisType == ".css") {
  47. fileObj = document.createElement('link');
  48. fileObj.href = url;
  49. fileObj.type = "text/css";
  50. fileObj.rel = "stylesheet";
  51. } else if (ThisType == ".less") {
  52. fileObj = document.createElement('link');
  53. fileObj.href = url;
  54. fileObj.type = "text/css";
  55. fileObj.rel = "stylesheet/less";
  56. }
  57. success = success || function() {};
  58. fileObj.onload = fileObj.onreadystatechange = function() {
  59. if (!this.readyState || 'loaded' === this.readyState || 'complete' === this.readyState) {
  60. success();
  61. classcodes.push(url)
  62. }
  63. }
  64. document.getElementsByTagName('head')[0].appendChild(fileObj);
  65. } else {
  66. success();
  67. }
  68. }
  69. /*获取文件类型,后缀名,小写*/
  70. function GetFileType(url) {
  71. if (url != null && url.length > 0) {
  72. return url.substr(url.lastIndexOf(".")).toLowerCase();
  73. }
  74. return "";
  75. }
  76. /*文件是否已加载*/
  77. function FileIsExt(FileArray, _url) {
  78. if (FileArray != null && FileArray.length > 0) {
  79. var len = FileArray.length;
  80. for (var i = 0; i < len; i++) {
  81. if (FileArray[i] == _url) {
  82. return true;
  83. }
  84. }
  85. }
  86. return false;
  87. }
  88. };
  89. //获取页面url后面的参数
  90. Manage.prototype.number = function(variable) {
  91. var query = window.location.search.substring(1);
  92. var vars = query.split("&");
  93. for (var i=0;i<vars.length;i++) {
  94. var pair = vars[i].split("=");
  95. if(pair[0] == variable){return pair[1];}
  96. }
  97. return(false);
  98. };
  99. Manage.prototype.loadWeixin = function() {
  100. var that = this;
  101. this.LoadJs(that.weixinURL+that.time,function(){ });
  102. }
  103. Manage.prototype.loadAudio = function() {
  104. g_bgAudio = new Audio;
  105. g_bgAudio.loop = true;
  106. g_bgAudio.autoplay = true;
  107. g_bgAudio.id = "bgaudio";
  108. g_playAudio = g_bgAudio;
  109. //https://www.cnblogs.com/interdrp/p/4211883.html 部分资料
  110. g_bgAudio.load(); // iOS 9 还需要额外的 load 一下, 否则直接 play 无效
  111. var play = function(){
  112. if(window.tourAudioSta) return;
  113. g_bgAudio.play();
  114. console.log('begin play bgm');
  115. document.removeEventListener("touchstart",play);
  116. document.removeEventListener("click",play);
  117. $('#player')[0].removeEventListener("touchstart", play);
  118. };
  119. g_bgAudio.oncanplay = function() {
  120. g_bgAudio.play();
  121. }
  122. document.addEventListener("WeixinJSBridgeReady", function () {
  123. g_bgAudio.play();
  124. }, false);
  125. document.addEventListener("touchstart", play);//ios需要加个事件才能播放 不能自动播放;如果还有浏览器不行,换成别的交互事件
  126. document.addEventListener("click", play);
  127. $('#player')[0].addEventListener("touchstart", play);
  128. g_bgAudio.addEventListener('ended', function () {
  129. g_bgAudio.play();
  130. });
  131. }
  132. Manage.prototype.weixinShare = function() {
  133. $.ajax({
  134. url:'https://www.4dage.com/Weixin3/wechatconfig/jssdk',
  135. type: "post",
  136. data : {
  137. 'url' : location.href.split('#')[0]
  138. },
  139. dataType:"jsonp",
  140. jsonpCallback:"success_jsonp",
  141. success:function(data,textStatus){
  142. wx.config({
  143. // debug : true,
  144. appId : data.appId,
  145. timestamp : data.timestamp,
  146. nonceStr : data.nonceStr,
  147. signature : data.signature,
  148. jsApiList : [ 'checkJsApi', 'onMenuShareTimeline',
  149. 'onMenuShareAppMessage', 'onMenuShareQQ',
  150. 'onMenuShareWeibo', 'hideMenuItems',
  151. 'showMenuItems', 'hideAllNonBaseMenuItem',
  152. 'showAllNonBaseMenuItem', 'translateVoice',
  153. 'startRecord', 'stopRecord', 'onRecordEnd',
  154. 'playVoice', 'pauseVoice', 'stopVoice',
  155. 'uploadVoice', 'downloadVoice', 'chooseImage',
  156. 'previewImage', 'uploadImage', 'downloadImage',
  157. 'getNetworkType', 'openLocation', 'getLocation',
  158. 'hideOptionMenu', 'showOptionMenu', 'closeWindow',
  159. 'scanQRCode', 'chooseWXPay',
  160. 'openProductSpecificView', 'addCard', 'chooseCard',
  161. 'openCard' ]
  162. });
  163. },
  164. error:function(XMLHttpRequest,textStatus,errorThrown){
  165. console.log("jsonp.error:"+textStatus);
  166. }
  167. });
  168. var success_jsonp = function(json){
  169. console.log(json);
  170. };
  171. wx.ready(function(){
  172. // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行〿
  173. //对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中〿
  174. //分享到朋友圈
  175. wx.onMenuShareTimeline({
  176. title: g_weixinObj.title, // 分享标题
  177. link: g_weixinObj.lineLink, // 分享链接
  178. imgUrl: g_weixinObj.imgUrl, // 分享图标
  179. desc: g_weixinObj.desc
  180. });
  181. //获取“分享给朋友”按钮点击状态及自定义分享内容接叿
  182. wx.onMenuShareAppMessage({
  183. title: g_weixinObj.title, // 分享标题
  184. desc: g_weixinObj.desc, // 分享描述
  185. link: g_weixinObj.lineLink, // 分享链接
  186. imgUrl: g_weixinObj.imgUrl, // 分享图标
  187. type: '', // 分享类型,music、video或link,不填默认为link
  188. dataUrl: '' // 如果type是music或video,则要提供数据链接,默认为空
  189. });
  190. wx.onMenuShareWeibo({
  191. title: g_weixinObj.title, // 分享标题
  192. desc: g_weixinObj.desc, // 分享描述
  193. link: g_weixinObj.lineLink, // 分享链接
  194. imgUrl: g_weixinObj.imgUrl, // 分享图标
  195. success: function () {
  196. // 用户确认分享后执行的回调函数
  197. },
  198. cancel: function () {
  199. // 用户取消分享后执行的回调函数
  200. }
  201. });
  202. wx.onMenuShareQZone({
  203. title: g_weixinObj.title, // 分享标题
  204. desc: g_weixinObj.desc, // 分享描述
  205. link: g_weixinObj.lineLink, // 分享链接
  206. imgUrl: g_weixinObj.imgUrl, // 分享图标
  207. success: function () {
  208. // 用户确认分享后执行的回调函数
  209. },
  210. cancel: function () {
  211. // 用户取消分享后执行的回调函数
  212. }
  213. });
  214. wx.onMenuShareQQ({
  215. title: g_weixinObj.title, // 分享标题
  216. desc: g_weixinObj.desc, // 分享描述
  217. link: g_weixinObj.lineLink, // 分享链接
  218. imgUrl: g_weixinObj.imgUrl, // 分享图标
  219. success: function () {
  220. // 用户确认分享后执行的回调函数
  221. },
  222. cancel: function () {
  223. // 用户取消分享后执行的回调函数
  224. }
  225. });
  226. wx.error(function(res){
  227. // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名〿
  228. });
  229. });
  230. }
  231. var manage = new Manage();
  232. //公用的函数
  233. function getQueryVariable(variable)
  234. {
  235. var query = window.location.search.substring(1);
  236. var vars = query.split("&");
  237. for (var i=0;i<vars.length;i++) {
  238. var pair = vars[i].split("=");
  239. if(pair[0] == variable){return pair[1];}
  240. }
  241. return(false);
  242. }
  243. //隐藏公司Logo
  244. function showLogo(){
  245. $("#myCompany").hide();
  246. $("#loaderCoBrandName").hide();
  247. $("#title-logo").hide();
  248. $(".title-container").css("justify-content","center")
  249. }
  250. //czj 添加随机的时间
  251. function randomTime(){
  252. return new Date()
  253. };
  254. function matcher(data){
  255. if(!data || !g_version ) return data;
  256. delete data.model.vision_version;
  257. var _data = {
  258. files: {
  259. "templates": ["images/images{{number}}/{{filename}}"]
  260. },
  261. model :{
  262. sid :window.number,
  263. camera_start:
  264. data.model.images && data.model.images.length != 0 ?
  265. {
  266. camera: {
  267. zoom: "-1",
  268. quaternion: [
  269. JSON.parse(data.model.images[0].metadata).camera_quaternion.z,
  270. JSON.parse(data.model.images[0].metadata).camera_quaternion.w,
  271. JSON.parse(data.model.images[0].metadata).camera_quaternion.x,
  272. JSON.parse(data.model.images[0].metadata).camera_quaternion.y
  273. ]
  274. },
  275. pano: { uuid: JSON.parse(data.model.images[0].metadata).scan_id },
  276. mode: "0"
  277. }
  278. : ''
  279. },
  280. sid: window.number,
  281. hoticon: {
  282. default: "https://super.4dage.com/images/4dagePoint2.png",
  283. higt: "https://super.4dage.com/images/4dagePoint.png"
  284. },
  285. special: "false",
  286. weixinDesc: ""
  287. };
  288. $.extend(true,data,_data)
  289. return data;
  290. }
  291. function hotMatcher(data){
  292. if(!data || !g_version) return data;
  293. data.tourAudio = data.audio;
  294. return data;
  295. }
  296. //兼容一代的場景
  297. //請求地址統一管理
  298. var g_version = manage.number("version");
  299. g_version === "one" ? g_Prefix = g_onePregix : '';