CameraContent-1-2-2.vue 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419
  1. <template>
  2. <div class="camera-content-1-2-2">
  3. <button
  4. class="return"
  5. @click="emit('close')"
  6. />
  7. <div class="content-wrap">
  8. <img
  9. draggable="false"
  10. src="@/assets/images/camera-content-1-1-2-bg.png"
  11. >
  12. <div class="content-wrap-c">
  13. <h1>皇城内的建筑布局</h1>
  14. <div class="tabbar">
  15. <span
  16. :class="{
  17. active: activeTabIdx === 0
  18. }"
  19. @click="activeTabIdx = 0"
  20. >
  21. 建筑区位
  22. </span>
  23. <div class="splitter" />
  24. <span
  25. :class="{
  26. active: activeTabIdx === 1
  27. }"
  28. @click="activeTabIdx = 1"
  29. >
  30. 御苑
  31. </span>
  32. <div class="splitter" />
  33. <span
  34. :class="{
  35. active: activeTabIdx === 2
  36. }"
  37. @click="activeTabIdx = 2"
  38. >
  39. 太液池
  40. </span>
  41. <div class="splitter" />
  42. <span
  43. :class="{
  44. active: activeTabIdx === 3
  45. }"
  46. @click="activeTabIdx = 3"
  47. >
  48. 隆福宫与兴圣宫
  49. </span>
  50. </div>
  51. <div
  52. v-if="activeTabIdx === 0"
  53. class="df-card"
  54. >
  55. <p class="df-card__title card-title both">
  56. 元大都皇城、宫城、太液池之间的位置相互关系
  57. </p>
  58. <div class="df-card__inner">
  59. <p class="text-indent">
  60. 元大都的皇城和宫城是全城的核心,皇城位于全城南部的中央地区,宫城偏在皇城的东部。宫城与皇城围绕太液池规划,宫城位于太液池的东南。宫城里的建筑分南、北两组,南面是以大明殿为主体的前朝,北面是以延春阁为主体的后廷。宫城以北是御苑,以西即是太液池。太液池以西分布着两组建筑,北面为兴圣宫,南面为隆福宫。这几组建筑用萧墙(也称阑马墙)围绕起来,构成了元大都的皇城。皇城的北墙与宫城之间的宫苑区极富草原气。
  61. </p>
  62. <div class="img-wrap">
  63. <img
  64. src="@/assets/images/camera-content-1-2-2-default-content.jpg"
  65. alt=""
  66. draggable="false"
  67. style="cursor: pointer;"
  68. @click="handleFull"
  69. >
  70. <div class="img-title">
  71. 元大都宫殿位置图
  72. </div>
  73. </div>
  74. </div>
  75. </div>
  76. <div
  77. v-if="activeTabIdx === 1"
  78. class="tab-content tab-1-content"
  79. >
  80. <p class="text-indent">
  81. 宫城以北是御苑,主要种植供统治者观赏之用的花草树木,“内有水碾,引水自玄武池灌溉花木”。在花丛中有华丽精致的小殿。此外,还有“熟地八顷”,元朝统治者为了表示自己重视农业,有时要举行仪式,拿着农具做做样子,这些“熟地”就是为此设置的。御苑是禁地,百姓如果闯入御苑的禁墙(即皇城阑马墙),就要以“大不敬”论罪。
  82. </p>
  83. </div>
  84. <div
  85. v-if="activeTabIdx === 2"
  86. class="tab-content tab-2-content"
  87. >
  88. <p class="text-indent">
  89. 宫城以西是太液池,包括现在北海和中海(南海当时尚未开凿)。太液池中满载芙蓉。元朝皇帝专门造了龙船,在太液池内往来游戏。池中有两个小岛,南面的小岛,称为瀛洲,就是今天团城所在地,上有仪天殿(一名圆殿,后改称承光殿);北面的小岛面积较大,就是著名的琼华岛,至元八年(1271)改称万寿山(又称万岁山)。万寿山高数十丈,都是用玲珑石堆砌而成。山顶就是著名的广寒殿,殿中有十二根柱子,刻有云龙,涂以黄金。全殿的左、右、后三面全用香木造成彩云状,上涂黄金。这座坐落于大都城地势最高处的宫殿,光辉灿烂,别具风格。在广寒殿上四望空阔,既可以远眺西山云气,也可以下瞰大都的街衢市井。广寒殿周围,都是杨柳树。万寿山和太液池,山水相映,更增添了光彩。在万寿山和瀛洲之间,有长达二百余尺的白玉石桥,将两者连接起来。瀛洲东西两侧都有长桥,东边是木桥,西边是木吊桥,与陆地相通。太液池的东边有一处灵圃,为皇家动物园,“奇兽珍禽在焉”。
  90. </p>
  91. <img
  92. class=""
  93. src="@/assets/images/camera-content-1-2-2-tab-2-img.jpg"
  94. alt=""
  95. draggable="false"
  96. >
  97. <div class="img-title">
  98. 《广寒宫图》轴
  99. </div>
  100. </div>
  101. <div
  102. v-if="activeTabIdx === 3"
  103. class="tab-content tab-3-content"
  104. >
  105. <p class="text-indent">
  106. 在太液池以西,有两大建筑群,靠南的是隆福宫,靠北的是兴圣宫。隆福宫的主要建筑是光天殿,后有寝殿,用廊柱相连,寝殿两端各有小殿,外有一百余间周庑围绕。其结构与宫城中的大明殿、延春阁大体一致。在光天殿周庑之外,还有东、西鹿顶殿、香殿等建筑。整个隆福宫围有砖墙,呈长方形。隆福宫原为皇太子住所,称东宫或皇太子宫。著名的王著杀阿合马事件就发生在宫前。后来成为皇太后的居所,始改名为隆福宫。
  107. </p>
  108. <p class="text-indent">
  109. 兴圣宫是在元朝中期元武宗当政(1308-1311)时建造的,主要建筑是兴圣殿,也有廊柱和寝殿相连,有砖垣二重,内垣相当于周庑。兴圣殿后有延华阁,还有东、西鹿顶殿、畏吾儿殿及其他附属建筑。专门收藏文物图书的奎章阁,就在兴圣宫内。
  110. </p>
  111. </div>
  112. </div>
  113. </div>
  114. </div>
  115. </template>
  116. <script setup>
  117. import { ref, getCurrentInstance } from "vue"
  118. const {
  119. windowSizeInCssForRef,
  120. windowSizeWhenDesignForRef,
  121. } = useSizeAdapt(1920, 970)
  122. const emit = defineEmits(['close'])
  123. const activeTabIdx = ref(0)
  124. const instance = getCurrentInstance()
  125. const handleFull = () => {
  126. instance.appContext.config.globalProperties.$viewerApi({
  127. options: {},
  128. images: [
  129. require("@/assets/images/camera-content-1-2-2-default-content.jpg")
  130. ]
  131. })
  132. }
  133. </script>
  134. <style lang="less" scoped>
  135. .df-card {
  136. position: absolute;
  137. left: calc(500 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  138. top: calc(86 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  139. width: calc(850 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  140. height: calc(680 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  141. &__title {
  142. margin-bottom: calc(45 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  143. white-space: nowrap;
  144. font-size: calc(28 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef')) !important;
  145. }
  146. &__inner {
  147. display: flex;
  148. align-items: flex-start;
  149. img {
  150. width: calc(430 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  151. }
  152. p {
  153. padding-right: 23px;
  154. height: calc(580 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  155. overflow-y: auto;
  156. }
  157. >.img-wrap {
  158. flex: 0 0 407px;
  159. display: flex;
  160. flex-direction: column;
  161. justify-content: center;
  162. align-items: center;
  163. >.img-title{
  164. margin-top: 0.5em;
  165. }
  166. }
  167. }
  168. }
  169. .camera-content-1-2-2{
  170. position: absolute;
  171. left: 0;
  172. top: 0;
  173. width: 100%;
  174. height: 100%;
  175. background: rgba(0,0,0,0.45);
  176. backdrop-filter: blur(60px);
  177. >button.return{
  178. position: absolute;
  179. width: 58px;
  180. height: 58px;
  181. left: 42px;
  182. top: 68px;
  183. background-image: url(@/assets/images/btn-return.png);
  184. background-size: contain;
  185. background-repeat: no-repeat;
  186. background-position: center center;
  187. }
  188. >.content-wrap{
  189. position: absolute;
  190. left: 50%;
  191. top: 54%;
  192. height: calc(819 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  193. transform: translate(-50%, -50%);
  194. >img {
  195. height: 100%;
  196. }
  197. h1{
  198. position: absolute;
  199. left: calc(163 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  200. top: calc(200 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  201. font-size: calc(40 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  202. font-family: Source Han Serif CN;
  203. color: #FBF7DC;
  204. line-height: calc(47 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  205. writing-mode: vertical-lr;
  206. letter-spacing: 0.3em;
  207. font-family: "SourceHanSerifCN-SemiBold";
  208. }
  209. .tabbar{
  210. position: absolute;
  211. display: flex;
  212. flex-direction: column;
  213. align-items: center;
  214. left: calc(373 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  215. top: calc(42 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  216. >span {
  217. width: calc(46 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  218. padding-top: calc(30 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  219. padding-bottom: calc(30 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  220. writing-mode: vertical-lr;
  221. display: flex;
  222. justify-content: center;
  223. align-items: center;
  224. background: #AC997F;
  225. color: #FFF3C3;
  226. letter-spacing: 8px;
  227. font-size: 19px;
  228. font-family: "SourceHanSerifCN-SemiBold";
  229. box-shadow: 3px 4px 9px 0px rgba(0,0,0,0.25);
  230. }
  231. >span.active{
  232. color: #6A3906;
  233. background: linear-gradient(322deg, #C69D49 0%, #F8E6A9 68%);
  234. }
  235. >.splitter{
  236. // position: absolute;
  237. // left: 50%;
  238. // top: 50%;
  239. // transform: translate(-50%, -50%);
  240. width: calc(34 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  241. height: 1px;
  242. background-color: #FFF3C3;
  243. }
  244. }
  245. .tab-content{
  246. position: absolute;
  247. left: calc(450 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  248. top: calc(42 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  249. width: calc(950 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  250. height: calc(750 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  251. display: flex;
  252. justify-content: center;
  253. align-items: center;
  254. }
  255. .default-content{
  256. padding: calc(40 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'))
  257. }
  258. .tab-1-content{
  259. >p{
  260. width: calc(809 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  261. max-height: 80%;
  262. overflow: auto;
  263. font-size: calc(20 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  264. font-family: Source Han Sans SC, Source Han Sans SC;
  265. font-weight: 300;
  266. color: #000000;
  267. line-height: calc(30 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  268. letter-spacing: calc(4 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  269. padding-right: 0.5em;
  270. }
  271. >div.table{
  272. position: absolute;
  273. left: 0;
  274. top: 0;
  275. width: 100%;
  276. height: 100%;
  277. display: flex;
  278. flex-direction: column;
  279. justify-content: center;
  280. align-items: center;
  281. >h3{
  282. width: calc(528 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  283. height: calc(64 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  284. display: flex;
  285. justify-content: center;
  286. align-items: center;
  287. background-image: url(@/assets/images/camera-content-1-1-2-tab-1-table-title.png);
  288. background-size: cover;
  289. background-repeat: no-repeat;
  290. background-position: center center;
  291. font-size: calc(28 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  292. font-family: Source Han Serif CN;
  293. font-weight: 600;
  294. color: #6A3906;
  295. line-height: calc(33 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  296. letter-spacing: calc(5 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  297. margin-bottom: calc(30 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  298. }
  299. >img.table-img{
  300. width: calc(931 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  301. height: calc(528 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  302. }
  303. }
  304. >button.change-page{
  305. position: absolute;
  306. width: calc(60 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  307. height: calc(60 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  308. right: calc(30 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  309. bottom: calc(50 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  310. background-size: cover;
  311. background-repeat: no-repeat;
  312. background-position: center center;
  313. }
  314. }
  315. .tab-2-content{
  316. padding-top: calc(50 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  317. padding-bottom: calc(50 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  318. display: flex;
  319. flex-direction: column;
  320. justify-content: space-evenly;
  321. align-items: center;
  322. >p{
  323. padding-right: 20px;
  324. width: calc(818 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  325. max-height: calc(250 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  326. overflow: auto;
  327. font-size: calc(20 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  328. color: #000000;
  329. line-height: 30px;
  330. box-sizing: border-box;
  331. }
  332. >img{
  333. width: calc(818 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  334. height: calc(216 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  335. // border: 1px solid #FFE88B;
  336. // padding: calc(22 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  337. background-color: rgba(145,129,117,0.25);
  338. object-fit: cover;
  339. }
  340. }
  341. .tab-3-content{
  342. padding-top: calc(50 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  343. padding-bottom: calc(50 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  344. display: flex;
  345. flex-direction: column;
  346. // justify-content: space-evenly;
  347. align-items: center;
  348. >p{
  349. width: calc(809 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  350. overflow: auto;
  351. font-size: calc(20 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  352. font-family: Source Han Sans CN, Source Han Sans CN;
  353. font-weight: 300;
  354. color: #000000;
  355. line-height: 30px;
  356. // letter-spacing: calc(8 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  357. }
  358. }
  359. }
  360. }
  361. @media screen and (max-height: 480px) {
  362. .camera-content-1-2-2 > .content-wrap {
  363. top: 50%;
  364. height: 100%;
  365. h1 {
  366. top: calc(240 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  367. left: calc(198 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  368. font-size: calc(46 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  369. }
  370. .tabbar {
  371. top: calc(50 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  372. left: calc(440 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  373. span {
  374. width: 60px;
  375. font-size: 24px;
  376. }
  377. }
  378. .df-card {
  379. top: calc(150 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  380. left: calc(550 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  381. width: calc(1100 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  382. &__title {
  383. font-size: 32px !important;
  384. }
  385. }
  386. .tab-content {
  387. top: calc(60 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  388. left: calc(520 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  389. right: calc(200 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  390. bottom: calc(60 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  391. width: unset;
  392. height: unset;
  393. p {
  394. padding: 0 40px;
  395. width: 100%;
  396. box-sizing: border-box;
  397. }
  398. }
  399. .tab-2-content > p {
  400. max-height: calc(450 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  401. }
  402. }
  403. }
  404. </style>