index2.js 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427
  1. var isUserInteracting = false,
  2. onMouseDownMouseX = 0,
  3. onMouseDownMouseY = 0,
  4. lon = 0,
  5. onMouseDownLon = 0,
  6. lat = 0,
  7. onMouseDownLat = 0,
  8. phi = 0,
  9. theta = 0;
  10. const house ={
  11. idx:0,
  12. nextId:null,
  13. title:'南京世茂项目',
  14. descript:'世茂天誉为城市综合体项目,主要包括约15万方集八大主题亮点商业、11万方的顶级酒店服务式公寓、15万方5A超甲级写字楼+五星级酒店,以及13万方高端住宅。\
  15. NO.2016G11地块东至云锦路,南至国有空地,西至江东中路,北至集庆门大街,出让面积:62699.92㎡,地下出让面积4472.12㎡,规划用地性质:R21住宅用地,Bb商办混合用地。',
  16. // img:'./panosimages/0.png',
  17. src:[
  18. {id:1,name:"01frontGate",title:'01正门',thumb:"panos/01frontGate_b.jpg",descript:'简介:01正门于俄罗斯北部,波罗的海沿岸...'},
  19. {id:2,name:"02masterBedroom",title:'02主卧',thumb:"panos/02masterBedroom_b.jpg",descript:'简介:02主卧位于俄罗斯北部,波罗的海沿岸...'},
  20. {id:3,name:"03masterBedroom",title:'03主卧',thumb:"panos/03masterBedroom_b.jpg",descript:'简介:03主卧位于俄罗斯北部,波罗的海沿岸...'},
  21. {id:4,name:"04masterBedroom",title:'04主卧',thumb:"panos/04masterBedroom_b.jpg",descript:'简介:04主卧于俄罗斯北部,波罗的海沿岸...'},
  22. {id:5,name:"05masterBedroomToilet",title:'05主卧卫生间',thumb:"panos/05masterBedroomToilet_b.jpg",descript:'简介:05主卧卫生间位于俄罗斯北部,波罗的海沿岸...'},
  23. {id:6,name:"06masterBedroomPorch",title:'06主卧门廊',thumb:"panos/06masterBedroomPorch_b.jpg",descript:'简介:06主卧门廊位于俄罗斯北部,波罗的海沿岸...'},
  24. {id:7,name:"07masterBedroomCloakroom",title:'07主卧衣帽间',thumb:"panos/07masterBedroomCloakroom_b.jpg",descript:'简介:07主卧衣帽间位于俄罗斯北部,波罗的海沿岸...'},
  25. {id:8,name:"08AguestRoom",title:'08客房',home:{T:90,R:100},thumb:"panos/08AguestRoom_b.jpg",descript:'简介:08客房于俄罗斯北部,波罗的海沿岸...'},
  26. {id:9,name:"09guestRoomA",title:'09客房A',home:{T:80,R:90},thumb:"panos/09guestRoomA_b.jpg",descript:'简介:09客房A于俄罗斯北部,波罗的海沿岸...'},
  27. {id:10,name:"10guestRoomAToilet",title:'10客房卫生间',home:{T:70,R:100},thumb:"panos/10guestRoomAToilet_b.jpg",descript:'简介:圣彼得堡位于俄罗斯北部,波罗的海沿岸...'},
  28. {id:11,name:"11guestRoomB",title:'11客房B',home:{T:85,R:70},thumb:"panos/11guestRoomB_b.jpg",descript:'简介:圣彼得堡位于俄罗斯北部,波罗的海沿岸...'},
  29. {id:12,name:"12guestRoomB",title:'12客房B',home:{T:80,R:60},thumb:"panos/12guestRoomB_b.jpg",descript:'简介:圣彼得堡位于俄罗斯北部,波罗的海沿岸...'},
  30. {id:13,name:"13guestRoomB",title:'13客房B',home:{T:95,R:70},thumb:"panos/13guestRoomB_b.jpg",descript:'简介:圣彼得堡位于俄罗斯北部,波罗的海沿岸...'},
  31. {id:14,name:"14livingRoom",title:'14客厅',home:{T:20,R:70},thumb:"panos/14livingRoom_b.jpg",descript:'简介:圣彼得堡位于俄罗斯北部,波罗的海沿岸...'},
  32. {id:15,name:"15livingRoom",title:'15客厅',home:{T:30,R:50},thumb:"panos/15livingRoom_b.jpg",descript:'简介:圣彼得堡位于俄罗斯北部,波罗的海沿岸...'},
  33. {id:16,name:"16livingRoom",title:'16客厅',home:{T:20,R:50},thumb:"panos/16livingRoom_b.jpg",descript:'简介:圣彼得堡位于俄罗斯北部,波罗的海沿岸...'},
  34. {id:17,name:"17livingRoom",title:'17客厅',home:{T:8,R:60},thumb:"panos/17livingRoom_b.jpg",descript:'简介:圣彼得堡位于俄罗斯北部,波罗的海沿岸...'},
  35. {id:18,name:"18livingRoom",title:'18客厅',home:{T:8,R:40},thumb:"panos/18livingRoom_b.jpg",descript:'简介:圣彼得堡位于俄罗斯北部,波罗的海沿岸...'},
  36. {id:19,name:"19livingRoom",title:'19客厅',home:{T:8,R:50},thumb:"panos/19livingRoom_b.jpg",descript:'简介:圣彼得堡位于俄罗斯北部,波罗的海沿岸...'},
  37. {id:20,name:"20livingRoom",title:'20客厅',home:{T:40,R:45},thumb:"panos/20livingRoom_b.jpg",descript:'简介:圣彼得堡位于俄罗斯北部,波罗的海沿岸...'},
  38. {id:21,name:"21livingRoom",title:'21客厅',home:{T:42,R:55},thumb:"panos/21livingRoom_b.jpg",descript:'简介:圣彼得堡位于俄罗斯北部,波罗的海沿岸...'},
  39. {id:22,name:"22livingRoom",title:'22客厅',home:{T:23,R:20},thumb:"panos/22livingRoom_b.jpg",descript:'简介:圣彼得堡位于俄罗斯北部,波罗的海沿岸...'},
  40. {id:23,name:"23kitchen",title:'23厨房',home:{T:-5,R:65},thumb:"panos/23kitchen_b.jpg",descript:'简介:圣彼得堡位于俄罗斯北部,波罗的海沿岸...'},
  41. {id:24,name:"24laundry",title:'24洗衣间',home:{T:-5,R:40},thumb:"panos/24laundry_b.jpg",descript:'简介:圣彼得堡位于俄罗斯北部,波罗的海沿岸...'},
  42. {id:25,name:"25frontGatePorch",title:'25前门门廊',home:{T:65,R:75},thumb:"panos/25frontGatePorch_b.jpg",descript:'简介:圣彼得堡位于俄罗斯北部,波罗的海沿岸...'},
  43. ],
  44. }
  45. init()
  46. function init(){
  47. const queryString = window.location.search;
  48. const urlParams = new URLSearchParams(queryString);
  49. let pano_Id = urlParams.get('id')?urlParams.get('id'):-1
  50. let backurl= urlParams.get('backurl')?urlParams.get('backurl'):'../'
  51. let panoId = pano_Id>house.src.length?house.src.length-1:pano_Id
  52. const descriptContent=document.getElementById("descriptContent");
  53. descriptContent.innerHTML = limitWords(house.descript)
  54. if(panoId!==-1){
  55. // document.getElementById('descriptTitle').innerHTML = house.src[panoId].title
  56. // document.getElementById('descriptContent').innerHTML = limitWords(house.src[panoId].descript)
  57. // update conver
  58. const conver = document.getElementById('cover')
  59. // conver.src='./panos/'+house.src[panoId].name +"4k_f.jpg"
  60. conver.setAttribute('data-id',panoId)
  61. conver.setAttribute('data-backurl',backurl)
  62. }else{
  63. panoId =0
  64. // const descriptTitle=document.getElementById("descriptTitle");
  65. // // descriptTitle.innerHTML = house.src[house.idx].title
  66. // descriptTitle.innerHTML = house.title
  67. const conver = document.getElementById('cover')
  68. // // conver.src='panos/'+house.src[house.idx].name +"4k_f.jpg"
  69. conver.setAttribute('data-id',panoId)
  70. conver.setAttribute('data-backurl',backurl)
  71. }
  72. house.idx = panoId
  73. console.log('panoId',panoId)
  74. const listTitle = document.getElementById('listTitle')
  75. listTitle.innerHTML = "剧集列表("+ house.src.length +"集全)"
  76. var listContent=document.getElementById("listContent");
  77. while (listContent.firstChild) {
  78. listContent.removeChild(listContent.firstChild);
  79. }
  80. let mid = 0
  81. for(let item of house.src){
  82. const dpano = document.createElement("div");
  83. dpano.className = 'pano'
  84. if(item.id-1==pano_Id*1){
  85. dpano.className = 'panoSelect'
  86. }
  87. mid = item.id
  88. if(mid==1){
  89. dpano.style.marginLeft=0
  90. }
  91. dpano.setAttribute('data-id',mid);
  92. const title = document.createElement("div");
  93. title.className = 'title'
  94. title.innerHTML = item.title
  95. const thumb = document.createElement("div");
  96. thumb.className = 'thumb'
  97. // thumb.innerHTML = house.src[i].name
  98. const img=document.createElement("img");
  99. img.src= './panos/'+item.name + '4k_f.jpg';
  100. thumb.appendChild(img);
  101. dpano.appendChild(title);
  102. dpano.appendChild(thumb);
  103. listContent.appendChild(dpano);
  104. }
  105. // const ddiv = document.createElement("div");
  106. // ddiv.innerHTML='.'
  107. // ddiv.className = 'panoEnd'
  108. // listContent.appendChild(ddiv);
  109. if(pano_Id!=-1){
  110. const offset = document.getElementsByClassName("thumb")
  111. const offset_width = offset.length>1&&offset[1].clientWidth?offset[1].clientWidth:180
  112. // document.getElementById('listContent').scrollLeft =offset_width*pano_select;
  113. const fromLeft = document.getElementById('listContent').scrollLeft
  114. const toLeft = offset_width*pano_Id
  115. const coords = {x: fromLeft, y: 0} // Start at (0, 0)
  116. const tween = new TWEEN.Tween(coords) // Create a new tween that modifies 'coords'.
  117. .to({x: toLeft, y: 200}, 1000) // Move to (300, 200) in 1 second.
  118. .easing(TWEEN.Easing.Quadratic.Out) // Use an easing function to make the animation smooth.
  119. .onUpdate(() => {
  120. // Called after tween.js updates 'coords'.
  121. // Move 'box' to the position described by 'coords' with a CSS translation.
  122. document.getElementById('listContent').scrollLeft = coords.x
  123. })
  124. .start() // Start the tween immediately.
  125. }
  126. document.addEventListener('keyup', onKeyUp);
  127. document.getElementById('play').addEventListener('click', enterPano);
  128. // const Jdoc=document.getElementById("Jdoc");
  129. // Jdoc.style.backgroundSize = "1280px 720px";
  130. }
  131. function selectUpnDown(is_down){
  132. const nodess = document.getElementById("listContent").childNodes;
  133. for(let i =0;i<nodess.length-1;i++){
  134. if(nodess[i].className==='panoSelect'){
  135. nodess[i].className = 'pano'
  136. }
  137. }
  138. if(is_down){
  139. const firstChild = document.getElementById('listContent').firstChild
  140. firstChild.className = 'panoSelect'
  141. const playdiv = document.getElementById('play')
  142. // playdiv.className = 'play'
  143. playdiv.style.backgroundImage='url("./nanimages/play4.png")'
  144. document.getElementById('listContent').scrollLeft =0;
  145. let panoId = 0
  146. // document.getElementById('descriptTitle').innerHTML = house.src[panoId].title
  147. // document.getElementById('descriptContent').innerHTML = limitWords(house.src[panoId].descript)
  148. // update conver
  149. // const conver = document.getElementById('cover')
  150. // conver.src='./panos/'+house.src[panoId].name +"4k_f.jpg"
  151. // conver.setAttribute('data-id',panoId)
  152. }else{
  153. const playdiv = document.getElementById('play')
  154. // playdiv.className = 'playSelect'
  155. playdiv.style.backgroundImage='url("./nanimages/play_click.png")'
  156. }
  157. }
  158. function limitWords(txt){
  159. var str = txt;
  160. if(str.length>180){
  161. str = str.substr(0,180) + '...';
  162. }
  163. return str;
  164. }
  165. function selectLeftnRight(is_right){
  166. const nodess = document.getElementById("listContent").childNodes;
  167. for(let i =0;i<nodess.length;i++){
  168. if(nodess[i].className==='panoSelect'){
  169. nodess[i].className = 'pano'
  170. let pano_select = -1
  171. if(is_right){
  172. pano_select = i===nodess.length -1? 0:i+1
  173. }else{
  174. pano_select = i===0? nodess.length -1:i-1
  175. }
  176. house.idx = pano_select
  177. nodess[pano_select].className='panoSelect'
  178. // update description
  179. // document.getElementById('descriptTitle').innerHTML = house.src[house.idx].title
  180. // document.getElementById('descriptContent').innerHTML = limitWords(house.src[house.idx].descript)
  181. // update conver
  182. const conver = document.getElementById('cover')
  183. // conver.src='./panos/'+house.src[pano_select].name +"4k_f.jpg"
  184. conver.setAttribute('data-id',pano_select)
  185. // const descriptTitle=document.getElementById("descriptTitle");
  186. // descriptTitle.innerHTML = house.src[house.idx].title
  187. // const descriptContent=document.getElementById("descriptContent");
  188. // descriptContent.innerHTML = house.src[house.idx].descript
  189. const offset = document.getElementsByClassName("thumb")
  190. const offset_width = offset.length>1&&offset[1].clientWidth?offset[1].clientWidth:180
  191. // document.getElementById('listContent').scrollLeft =offset_width*pano_select;
  192. const fromLeft = document.getElementById('listContent').scrollLeft
  193. const toLeft = offset_width*pano_select
  194. const coords = {x: fromLeft, y: 0} // Start at (0, 0)
  195. const tween = new TWEEN.Tween(coords) // Create a new tween that modifies 'coords'.
  196. .to({x: toLeft, y: 200}, 1000) // Move to (300, 200) in 1 second.
  197. .easing(TWEEN.Easing.Quadratic.Out) // Use an easing function to make the animation smooth.
  198. .onUpdate(() => {
  199. // Called after tween.js updates 'coords'.
  200. // Move 'box' to the position described by 'coords' with a CSS translation.
  201. document.getElementById('listContent').scrollLeft = coords.x
  202. })
  203. .start() // Start the tween immediately.
  204. i = nodess.length
  205. }
  206. }
  207. }
  208. function enterPano(){
  209. const conver = document.getElementById('cover')
  210. const panoId = conver.getAttribute('data-id')
  211. const backurl = conver.getAttribute('data-backurl')
  212. // window.location.href="pano3.html?id="+panoId
  213. const url = "tip.html?id="+panoId + '&backurl='+backurl
  214. console.log('url',url)
  215. window.location.replace(url)
  216. // window.location.href = url
  217. // Var param = “{"vrUrl":"http://112.18.251.84:8090/tv/h5v2/activity2/vtour/tour.html"}”
  218. // const param = '{"vrUrl":"http://112.18.251.84:8090/tv/h5v2/activity2/vtour/tour.html"}'
  219. // UtilToJS.startVrBrowser(param);
  220. }
  221. function onKeyUp(e){
  222. switch(e.keyCode){
  223. case 38://ArrowUp
  224. selectUpnDown(false)
  225. break
  226. case 40://ArrowDown
  227. selectUpnDown(true)
  228. break
  229. case 37: //ArrowLeft
  230. selectLeftnRight(false)
  231. break
  232. case 39://ArrowRight
  233. selectLeftnRight(true)
  234. break
  235. case 13://Enter
  236. enterPano()
  237. case 48: // auto play
  238. break
  239. case 49:
  240. break
  241. default:
  242. break
  243. }
  244. }
  245. animate()
  246. function animate() {
  247. requestAnimationFrame(animate)
  248. TWEEN.update()
  249. }
  250. var btn = new tvSysBtnBind({
  251. id: "Jdoc",
  252. className: "ctrlBtn",
  253. currentClass: "current",
  254. keyRemoveDefault: false,
  255. effect: "base",
  256. currentIndex: 0,
  257. onLoad: function(e) {
  258. },
  259. onPress:function() {
  260. var keyCode = this.event.keyCode;
  261. // alert('tvSysBtnBind:'+keyCode+" - " + this.event.key)
  262. switch (keyCode) {
  263. case 37: // left
  264. // reloadData();
  265. break;
  266. case 39: // right
  267. break;
  268. case 38: //up
  269. break;
  270. case 40: //down
  271. break;
  272. // case 13: //enter
  273. // break;
  274. case 33: //chanel +
  275. break;
  276. case 34: //chanel -
  277. break;
  278. case 48: //0
  279. break;
  280. default:
  281. break;
  282. }
  283. },
  284. onEnterPress: function() {
  285. },
  286. onBack: function() {
  287. // enterPano()
  288. // console.log(window.UtilToJS)
  289. // if(typeof(VrBrowserToJS)!=='undefined'){
  290. // // UtilToJS.appExit();
  291. // // VrBrowserToJS.vrBrowerExit();
  292. // VrBrowserToJS.vrBrowserExit();
  293. // // VrBrowserToJS.appExit()
  294. // }
  295. const conver = document.getElementById('cover')
  296. const backurl = conver.getAttribute('data-backurl')
  297. console.log('backurl')
  298. // window.location.href = url
  299. window.location.replace(backurl)
  300. // window.location.href = backurl
  301. }
  302. });