index.vue 7.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271
  1. <template>
  2. <div class="page pg-bg pg2-2">
  3. <div class="bk-pd content">
  4. <p class="txt">
  5. 85年前,
  6. <br />日本侵略者制造了惨绝人寰的南京大屠杀, <br />30多万生灵涂炭。
  7. <br />战后的紫金山废墟下,片片紫色小花密密开放。
  8. <br />
  9. <br />
  10. </p>
  11. </div>
  12. <div class="bk-pd content">
  13. <img class="layer-img" src="/images/pg2-2/图层38.png" />
  14. </div>
  15. <div class="bk-pd content">
  16. <img class="mountain-img" src="/images/pg2-2/山.png" />
  17. <img class="group-img" src="/images/pg2-2/组4.png" />
  18. </div>
  19. <div class="bk-pd content">
  20. <p class="txt bottom">
  21. 1939年,一名日本带军医着对战争的反思和忏悔,
  22. <br />把取自南京的花种带回日本,撒遍山野、植满庭院,
  23. <br />并取名“紫金草”。 <br />在他的眼中,当年的紫金山上,
  24. <br />每一朵花就是一个在战争中丧生的灵魂。
  25. <br />此后几十年,这名军医和家人 <br />在各地播种紫金草悼念亡灵,
  26. </p>
  27. </div>
  28. <!-- <div class="bk-pd content-ink"> -->
  29. <!-- <InkEffect src="./images/pg2-2/紫金草行动logo拷贝.png" :active="inkActive" /> -->
  30. <img class="slide-ink" src="/images/pg2-2/照片1.png" alt="">
  31. <Splide
  32. :options="slideOptions"
  33. :has-track="false"
  34. @splide:moved="onSlideChange"
  35. >
  36. <div class="ink-slider-wrapper">
  37. <SplideTrack>
  38. <SplideSlide>
  39. <Ink
  40. class="slide-ink"
  41. :active="slideIndexRef == 0"
  42. src="/images/pg2-2/照片1.png"
  43. />
  44. </SplideSlide>
  45. <SplideSlide>
  46. <Ink
  47. class="slide-ink"
  48. :active="slideIndexRef == 1"
  49. src="/images/pg2-2/照片2.png"
  50. />
  51. </SplideSlide>
  52. <SplideSlide>
  53. <Ink
  54. class="slide-ink"
  55. :active="slideIndexRef == 2"
  56. src="/images/pg2-2/照片3.png"
  57. />
  58. </SplideSlide>
  59. <SplideSlide>
  60. <Ink
  61. class="slide-ink"
  62. :active="slideIndexRef == 3"
  63. src="/images/pg2-2/照片4.png"
  64. />
  65. </SplideSlide>
  66. </SplideTrack>
  67. <div class="splide__arrows abs" style="left: 0; top: 0">
  68. <div class="splide__arrow splide__arrow--prev">
  69. <img
  70. src="/images/pg3/arrow.png"
  71. alt=""
  72. style="transform: rotate(180deg)"
  73. />
  74. </div>
  75. </div>
  76. <div class="splide__arrows abs" style="right: 0; top: 0">
  77. <div class="splide__arrow splide__arrow--next">
  78. <img src="/images/pg3/arrow.png" alt="" />
  79. </div>
  80. </div>
  81. </div>
  82. </Splide>
  83. <!-- <img class="photo-img" src="/images/pg2-2/照片4.png" /> -->
  84. <!-- </div> -->
  85. <div class="bk-pd content">
  86. <p class="txt bottom">
  87. 紫金草,它耐寒、耐旱,
  88. <br />在贫瘠的土地上也能顽强生长, <br />蕴含着无穷的草根力量,
  89. <br />寄托了对战争的反省和对和平的祈愿。 <br />“紫金草行动”由此而来。
  90. <br />小小紫金草,悠悠寄哀思。 <br />让和平中长大的年轻人保持“痛”感,
  91. <br />让更多的人主动追问、不断提起那段历史,
  92. <br />让和平之声传向世界各地, <br />这一直是“紫金草行动”努力的方向。
  93. </p>
  94. </div>
  95. <div class="bk-pd content">
  96. <img class="chart-img" src="/images/pg2-2/图.png" />
  97. </div>
  98. <div class="bk-pd content">
  99. <p class="txt topbottom">
  100. 2014年,在国家首个公祭日来临之际,
  101. <br />为了深切缅怀惨遭日军屠戮遇难同胞,
  102. <br />唤起人们对和平的向往和珍视,
  103. <br />南京广播电视集团发起了“紫金草行动”。 <br />九年了,
  104. <br />“紫金草行动”再启航, <br />让“和平之花”开得更远!
  105. </p>
  106. </div>
  107. <div class="bk-pd content">
  108. <img class="zjclogo-img" src="/images/pg2-2/紫金草行动logo拷贝.png" />
  109. </div>
  110. </div>
  111. </template>
  112. <script steup>
  113. import { onBeforeUnmount, onMounted, ref } from "vue";
  114. import { Splide, SplideSlide, SplideTrack } from '@splidejs/vue-splide';
  115. import Bell from '@/components/Bell.vue';
  116. import Btn from '@/components/Btn.vue';
  117. import Animate from '@/components/Animate.vue';
  118. import Ink from "./Ink.vue";
  119. const inkActive = ref(false);
  120. const slideIndexRef = ref(0);
  121. const slideOptions = {
  122. // arrows: false,
  123. pagination: false,
  124. autoplay: true,
  125. type: "loop",
  126. speed: 1000,
  127. interval: 6000,
  128. };
  129. const onSlideChange = (slide, newIndex) => {
  130. slideIndexRef.value = newIndex;
  131. };
  132. </script>
  133. <style lang="less" scoped>
  134. .pg2-2 {
  135. position: relative;
  136. height: 100vh;
  137. .content {
  138. text-align: center;
  139. }
  140. .content {
  141. .layer-img {
  142. opacity: 0.6;
  143. z-index: 0;
  144. width: 14%;
  145. display: inline-block;
  146. position: absolute;
  147. top: 220px;
  148. left: 35px;
  149. animation: layer-img 1.2s linear alternate;
  150. }
  151. @keyframes layer-img {
  152. from {
  153. opacity: 0;
  154. transform: translateY(-40px);
  155. }
  156. to {
  157. opacity: 1;
  158. transform: translateY(0);
  159. }
  160. }
  161. }
  162. .content {
  163. .mountain-img {
  164. z-index: 0;
  165. position: absolute;
  166. top: 115px;
  167. margin-top: 20px;
  168. margin-left: 20px;
  169. width: 95%;
  170. animation: mountain-img 3s 1;
  171. }
  172. @keyframes mountain-img {
  173. 0% {
  174. opacity: 0;
  175. }
  176. 100% {
  177. opacity: 1;
  178. }
  179. }
  180. .group-img {
  181. z-index: 10;
  182. width: 84%;
  183. position: relative;
  184. margin-top: 70px;
  185. margin-left: -16%;
  186. display: inline-block;
  187. animation-delay: 3s;
  188. animation: group-img 1.8s linear;
  189. }
  190. @keyframes group-img {
  191. 0% {
  192. transform: translateX(-100%);
  193. }
  194. 50% {
  195. transform: translateX(-50%);
  196. }
  197. 100% {
  198. transform: translateX(0);
  199. }
  200. }
  201. }
  202. .content {
  203. .bottom {
  204. margin-bottom: 0;
  205. }
  206. }
  207. .content {
  208. .photo-img {
  209. width: 80%;
  210. display: inline-block;
  211. }
  212. }
  213. .content {
  214. .chart-img {
  215. width: 84%;
  216. display: inline-block;
  217. }
  218. }
  219. .content {
  220. .topbottom {
  221. margin: 0 auto;
  222. }
  223. }
  224. .content {
  225. .zjclogo-img {
  226. margin: 1em auto;
  227. width: 38%;
  228. display: inline-block;
  229. }
  230. }
  231. .content-ink {
  232. }
  233. .ink-slider-wrapper {
  234. position: relative;
  235. z-index: 2;
  236. .slide-ink {
  237. width: 100vw;
  238. height: 54.89vw;
  239. }
  240. .splide__arrows {
  241. position: absolute;
  242. z-index: 10;
  243. width: 48px;
  244. height: 54.89vw;
  245. line-height: 54.89vw;
  246. text-align: center;
  247. img {
  248. width: 12px;
  249. display: inline-block;
  250. }
  251. }
  252. }
  253. }
  254. .txt {
  255. text-align: center;
  256. font-size: 0.9em;
  257. font-weight: 400;
  258. }
  259. </style>