BambooBookScene1.vue 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. <script setup>
  2. import { ref, onMounted } from 'vue'
  3. import useSizeAdapt from "@/useFunctions/useSizeAdapt"
  4. const {
  5. windowSizeInCssForRef,
  6. windowSizeWhenDesignForRef,
  7. } = useSizeAdapt()
  8. const lastX = ref(0)
  9. // 开始滑动
  10. const handletouchstart = (event) => {
  11. lastX.value = event.changedTouches[0].pageX
  12. }
  13. // 监听活动
  14. const touchMove = (event) => {
  15. let currentX = event.changedTouches[0].pageX
  16. let tx = currentX - lastX.value
  17. if (tx < 0) {
  18. emit('slide')
  19. }
  20. }
  21. const emit = defineEmits(['slide', 'close'])
  22. const x = window.innerHeight / 1018
  23. const innerWidth = ref((15523 / 33) * x + 'px')
  24. const innerHeight = ref(window.innerHeight + 'px')
  25. </script>
  26. <template>
  27. <div
  28. class="screen-box"
  29. @touchstart="handletouchstart($event)"
  30. @touchmove="touchMove($event)"
  31. >
  32. <!-- 竹叶序列帧 -->
  33. <div class="xuliezheng" />
  34. <div class="screen-box1">
  35. <div class="title-box">
  36. 芥子园画谱
  37. </div>
  38. <div class="zhupu-box">
  39. 竹谱
  40. </div>
  41. <OperationTip
  42. class="operation-h"
  43. text=""
  44. direction="h"
  45. />
  46. <img
  47. class="disc-img"
  48. src="@/assets/images/zhupu-disc.png"
  49. alt=""
  50. >
  51. <div class="system-btns">
  52. <BtnBack
  53. :color="`green`"
  54. @click="emit('close')"
  55. />
  56. </div>
  57. </div>
  58. </div>
  59. </template>
  60. <style lang='less' scoped>
  61. .screen-box {
  62. width: 100%;
  63. height: 100%;
  64. position: relative;
  65. .xuliezheng {
  66. width: v-bind(innerWidth);
  67. height: v-bind(innerHeight);
  68. background-image: url(@/assets/images/zhupu-min.png);
  69. background-size: cover;
  70. position: absolute;
  71. bottom: 0;
  72. right: 0;
  73. background-position-x: 0;
  74. background-repeat: no-repeat;
  75. animation-name: xuliezhen-animation;
  76. animation-timing-function: steps(33);
  77. animation-duration: 4s;
  78. animation-iteration-count: infinite;
  79. transition-property: bottom;
  80. @keyframes xuliezhen-animation {
  81. 0% {
  82. background-position-x: 0;
  83. }
  84. 100% {
  85. background-position-x: calc(100% - v-bind(innerWidth));
  86. }
  87. }
  88. }
  89. .screen-box1 {
  90. width: 100%;
  91. height: 100%;
  92. background-image: url(@/assets/images/bg_zhupu.png);
  93. background-size: 100% 100%;
  94. writing-mode: vertical-rl;
  95. /* 垂直排列,从右向左 */
  96. direction: rtl;
  97. .title-box {
  98. color: #ffffff;
  99. font-size: calc(48 /v-bind('windowSizeWhenDesignForRef')* v-bind('windowSizeInCssForRef'));
  100. line-height: calc(56 /v-bind('windowSizeWhenDesignForRef')* v-bind('windowSizeInCssForRef'));
  101. position: absolute;
  102. font-family: 'KingHwa_OldSong';
  103. letter-spacing: .3em;
  104. top: calc(95 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  105. // right: calc(50 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  106. right: 13%;
  107. }
  108. .zhupu-box {
  109. color: #ffffff;
  110. font-size: calc(24 /v-bind('windowSizeWhenDesignForRef')* v-bind('windowSizeInCssForRef'));
  111. line-height: calc(28 /v-bind('windowSizeWhenDesignForRef')* v-bind('windowSizeInCssForRef'));
  112. position: absolute;
  113. font-family: 'KingHwa_OldSong';
  114. letter-spacing: .3em;
  115. top: 50%;
  116. right: 20%;
  117. // right: calc(75 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  118. }
  119. >.operation-h {
  120. position: absolute;
  121. right: 14%;
  122. // right: calc(55 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  123. bottom: 35%;
  124. width: calc(50 / v-bind('windowSizeWhenDesignForRef')* v-bind('windowSizeInCssForRef'));
  125. }
  126. >.disc-img {
  127. width: calc(151 / v-bind('windowSizeWhenDesignForRef')* v-bind('windowSizeInCssForRef'));
  128. height: calc(456 / v-bind('windowSizeWhenDesignForRef')* v-bind('windowSizeInCssForRef'));
  129. position: absolute;
  130. left: calc(75 / v-bind('windowSizeWhenDesignForRef')* v-bind('windowSizeInCssForRef'));
  131. top: calc(153 / v-bind('windowSizeWhenDesignForRef')* v-bind('windowSizeInCssForRef'));
  132. // left: 12%;
  133. // margin-right: calc(170 /v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  134. // margin-bottom: calc(250 /v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  135. }
  136. >.system-btns {
  137. width: 100%;
  138. padding: 0 calc(20 / v-bind(windowSizeWhenDesignForRef) * v-bind(windowSizeInCssForRef));
  139. display: flex;
  140. flex-direction: column;
  141. justify-content: space-between;
  142. position: absolute;
  143. bottom: calc(20 /v-bind(windowSizeWhenDesignForRef) * v-bind(windowSizeInCssForRef));
  144. z-index: 2;
  145. }
  146. }
  147. }
  148. </style>