map.js 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240
  1. let rollerShutterConfig;
  2. export function initroller() {
  3. if (rollerShutterConfig) {
  4. return;
  5. }
  6. let windowWidth = document.body.clientWidth; // 窗口宽度
  7. let windowHeight = document.body.clientHeight; // 窗口高度
  8. // 卷帘配置参数,以对象方式实现地址传递
  9. rollerShutterConfig = {
  10. splitDirection: Cesium.SplitDirection.NONE,
  11. verticalSplitPosition: windowWidth / 2,
  12. horizontalSplitPosition: windowHeight / 2,
  13. };
  14. if (!document.getElementById("verticalSlider")) {
  15. let f = document.getElementById("cesiumContainer");
  16. let v = document.createElement("div");
  17. let h = document.createElement("div");
  18. v.classList.add("verticalSlider");
  19. v.id = "verticalSlider";
  20. h.id = "horizontalSlider";
  21. v.style.display = "none";
  22. h.style.display = "none";
  23. f.appendChild(v);
  24. f.appendChild(h);
  25. }
  26. setRollerShutterSplit();
  27. bindSliderEvt();
  28. }
  29. export function setImageryRollerMode() {
  30. console.log(rollerShutterConfig.splitDirection, 'sxsdx')
  31. store.setrollerType(rollerShutterConfig.splitDirection);
  32. // let imageryLayers = viewer.imageryLayers;
  33. // for (let i = 0; i < imageryLayers.length; i++) {
  34. // let imageryLayer = imageryLayers.get(i);
  35. // if (this.imageryRoller) this.setImageryRoller(imageryLayer)
  36. // else this.hideImageryRoller(imageryLayer)
  37. // }
  38. //案例展示
  39. // let imageryLayer = viewer.imageryLayers.get(1);
  40. // if (this.imageryRoller) setImageryRoller(imageryLayer);
  41. // else hideImageryRoller(imageryLayer);
  42. }
  43. export function setImageryRoller(imageryLayer) {
  44. console.log("---", Cesium.SplitDirection.RIGHT)
  45. switch (rollerShutterConfig.splitDirection) {
  46. case Cesium.SplitDirection.LEFT:
  47. imageryLayer.splitDirection = new Cesium.Cartesian2(
  48. Cesium.ImagerySplitDirection.RIGHT,
  49. Cesium.ImagerySplitDirection.NONE
  50. );
  51. break;
  52. case Cesium.SplitDirection.RIGHT:
  53. imageryLayer.splitDirection = new Cesium.Cartesian2(
  54. Cesium.ImagerySplitDirection.LEFT,
  55. Cesium.ImagerySplitDirection.NONE
  56. );
  57. break;
  58. case Cesium.SplitDirection.TOP:
  59. imageryLayer.splitDirection = new Cesium.Cartesian2(
  60. Cesium.ImagerySplitDirection.NONE,
  61. Cesium.ImagerySplitDirection.BOTTOM
  62. );
  63. break;
  64. case Cesium.SplitDirection.BOTTOM:
  65. imageryLayer.splitDirection = new Cesium.Cartesian2(
  66. Cesium.ImagerySplitDirection.NONE,
  67. Cesium.ImagerySplitDirection.TOP
  68. );
  69. break;
  70. default:
  71. imageryLayer.splitDirection = new Cesium.Cartesian2(
  72. Cesium.ImagerySplitDirection.NONE,
  73. Cesium.ImagerySplitDirection.NONE
  74. );
  75. break;
  76. }
  77. }
  78. export function hideImageryRoller(imageryLayer) {
  79. imageryLayer.splitDirection = new Cesium.Cartesian2(
  80. Cesium.ImagerySplitDirection.NONE,
  81. Cesium.ImagerySplitDirection.NONE
  82. );
  83. }
  84. /**
  85. * 注册卷帘分割条的拖拽事件。
  86. */
  87. export function bindSliderEvt() {
  88. let verticalSlider = document.getElementById("verticalSlider");
  89. let horizontalSlider = document.getElementById("horizontalSlider");
  90. verticalSlider.addEventListener("mousedown", mouseDown, false);
  91. horizontalSlider.addEventListener("mousedown", mouseDown, false);
  92. let windowHeight = document.body.clientHeight;
  93. let me = this;
  94. document.addEventListener("mouseup", mouseUp, false);
  95. function mouseUp(e) {
  96. document.removeEventListener("mousemove", sliderMove, false);
  97. }
  98. function mouseDown(e) {
  99. document.addEventListener("mousemove", sliderMove, false);
  100. }
  101. function sliderMove(e) {
  102. // 鼠标拖拽时执行
  103. // 解决拖拽鼠标粘滞的问题
  104. if (e.preventDefault) {
  105. e.preventDefault();
  106. } else {
  107. e.returnValue = false;
  108. }
  109. if (
  110. rollerShutterConfig.splitDirection === Cesium.SplitDirection.LEFT ||
  111. rollerShutterConfig.splitDirection === Cesium.SplitDirection.RIGHT
  112. ) {
  113. verticalSlider.style.left = e.clientX + "px";
  114. rollerShutterConfig.verticalSplitPosition = e.clientX;
  115. } else if (
  116. rollerShutterConfig.splitDirection === Cesium.SplitDirection.TOP ||
  117. rollerShutterConfig.splitDirection === Cesium.SplitDirection.BOTTOM
  118. ) {
  119. let clientY = e.clientY;
  120. if (clientY < 0) {
  121. clientY = 0;
  122. } else if (clientY > windowHeight) {
  123. clientY = windowHeight - document.body.clientHeight;
  124. }
  125. horizontalSlider.style.top = clientY + "px";
  126. rollerShutterConfig.horizontalSplitPosition = windowHeight - clientY;
  127. }
  128. setRollerShutterSplit();
  129. }
  130. }
  131. /**
  132. * 设置卷帘的分割方向及分割条的位置。
  133. *
  134. */
  135. export function setRollerShutterSplit() {
  136. let splitPosition = null;
  137. if (
  138. rollerShutterConfig.splitDirection === Cesium.SplitDirection.LEFT ||
  139. rollerShutterConfig.splitDirection === Cesium.SplitDirection.RIGHT
  140. ) {
  141. splitPosition = rollerShutterConfig.verticalSplitPosition;
  142. viewer.scene.imagerySplitPosition.x =
  143. rollerShutterConfig.verticalSplitPosition / document.body.clientWidth;
  144. } else if (
  145. rollerShutterConfig.splitDirection === Cesium.SplitDirection.TOP ||
  146. rollerShutterConfig.splitDirection === Cesium.SplitDirection.BOTTOM
  147. ) {
  148. splitPosition = rollerShutterConfig.horizontalSplitPosition;
  149. viewer.scene.imagerySplitPosition.y =
  150. rollerShutterConfig.horizontalSplitPosition /
  151. document.body.clientHeight;
  152. }
  153. for (let layer of scene.layers.layerQueue) {
  154. layer.splitDirection = rollerShutterConfig.splitDirection;
  155. if (splitPosition) {
  156. // 如果禁用卷帘就没有必要设置分割位置
  157. layer.splitPosition = splitPosition;
  158. }
  159. }
  160. }
  161. export function useRoller(val, lrtbRoller, lrRoller, tbRoller) {
  162. let verticalSlider = document.getElementById("verticalSlider");
  163. let horizontalSlider = document.getElementById("horizontalSlider");
  164. if (val) {
  165. switch (lrtbRoller) {
  166. case "lrRoller":
  167. verticalSlider.style.display = "block";
  168. horizontalSlider.style.display = "none";
  169. updataLrRoller(lrRoller);
  170. break;
  171. case "tbRoller":
  172. verticalSlider.style.display = "none";
  173. horizontalSlider.style.display = "block";
  174. updaeTbRoller(tbRoller);
  175. break;
  176. default:
  177. break;
  178. }
  179. } else {
  180. rollerShutterConfig.splitDirection = Cesium.SplitDirection.NONE;
  181. verticalSlider.style.display = "none";
  182. horizontalSlider.style.display = "none";
  183. setImageryRollerMode();
  184. setRollerShutterSplit();
  185. }
  186. }
  187. export function lrtbRoller(val, lrRoller, tbRoller) {
  188. let verticalSlider = document.getElementById("verticalSlider");
  189. let horizontalSlider = document.getElementById("horizontalSlider");
  190. switch (val) {
  191. case "lrRoller":
  192. verticalSlider.style.display = "block";
  193. horizontalSlider.style.display = "none";
  194. updataLrRoller(lrRoller);
  195. break;
  196. case "tbRoller":
  197. verticalSlider.style.display = "none";
  198. horizontalSlider.style.display = "block";
  199. updaeTbRoller(tbRoller);
  200. break;
  201. default:
  202. break;
  203. }
  204. }
  205. // 更新卷帘
  206. export function updataLrRoller(lrRoller) {
  207. switch (lrRoller) {
  208. case "leftRoller":
  209. rollerShutterConfig.splitDirection = Cesium.SplitDirection.LEFT;
  210. break;
  211. case "rightRoller":
  212. rollerShutterConfig.splitDirection = Cesium.SplitDirection.RIGHT;
  213. break;
  214. default:
  215. break;
  216. }
  217. setImageryRollerMode();
  218. setRollerShutterSplit();
  219. }
  220. export function updaeTbRoller(tbRoller) {
  221. switch (tbRoller) {
  222. case "topRoller":
  223. rollerShutterConfig.splitDirection = Cesium.SplitDirection.TOP;
  224. break;
  225. case "bomRoller":
  226. rollerShutterConfig.splitDirection = Cesium.SplitDirection.BOTTOM;
  227. break;
  228. default:
  229. break;
  230. }
  231. setImageryRollerMode();
  232. setRollerShutterSplit();
  233. }