PaintingDetail.vue 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790
  1. <template>
  2. <div
  3. :id="`${direction ? 'myRowBox' : ''}`"
  4. class="hotspot-detail-2"
  5. >
  6. <div
  7. id="painting-wrap-id"
  8. :class="`painting-wrap ${direction ? 'swiper-no-swiping' : ''} ${
  9. isUping ? 'paintion-wrap-top' : ''
  10. }`"
  11. :style="{
  12. clipPath: `rect(0 100% ${AnimationProgress.value}% 0)`,
  13. top: `${direction && isUping ? '0%' : ''}`,
  14. transform: `${
  15. direction && isUping
  16. ? 'translate(-50%, 0) rotate(-90deg)'
  17. : direction
  18. ? 'translate(-50%, 0) rotate(-90deg)'
  19. : ''
  20. }`,
  21. left: `${direction && isUping ? '50%' : direction ? '26%' : ''}`,
  22. }"
  23. >
  24. <!-- 横向才有的 -->
  25. <div
  26. v-show="direction"
  27. class="myRowBoxImg"
  28. @click="showBigPainting"
  29. >
  30. <div>
  31. <img
  32. :src="props.thumb"
  33. alt=""
  34. >
  35. </div>
  36. </div>
  37. <img
  38. v-show="!direction"
  39. class="painting-border"
  40. src="@/assets/images/painting-border-new.png"
  41. alt=""
  42. draggable="false"
  43. >
  44. <div
  45. v-show="!direction"
  46. ref="paintingWrap2El"
  47. class="painting-wrap-2"
  48. >
  49. <img
  50. ref="paintingEl"
  51. class="painting"
  52. :class="{
  53. oversize: isOversize,
  54. }"
  55. :src="props.thumb"
  56. alt=""
  57. draggable="false"
  58. @click="showBigPainting"
  59. >
  60. </div>
  61. <Transition name="fade-out">
  62. <img
  63. v-show="isAnimating"
  64. class="bottom-border-for-animation"
  65. :style="{
  66. bottom: `${100 - AnimationProgress.value}%`,
  67. }"
  68. src="@/assets/images/painting-border-bottom.png"
  69. alt=""
  70. draggable="false"
  71. >
  72. </Transition>
  73. </div>
  74. <!-- 底部阴影 -->
  75. <div
  76. :class="`desc-text-upShowd ${isUping ? 'desc-text-upShowdShow' : ''}`"
  77. />
  78. <div
  79. ref="descTextEl"
  80. v-touch:swipe.top="onSwipeTop"
  81. v-touch:swipe.bottom="onSwipeDown"
  82. class="desc-text"
  83. :class="{ 'desc-text-up': isUping }"
  84. :style="{
  85. opacity: isAnimating ? AnimationProgress.value / 100 : 1,
  86. }"
  87. >
  88. <div
  89. class="info-title-content"
  90. :class="{ 'info-title-content-up': isUping }"
  91. >
  92. <h1>{{ props.title }}</h1>
  93. <p class="subtitle">
  94. {{ `${props.author} (${props.age})` }}
  95. </p>
  96. <p class="subtitle">
  97. {{ props.subtitle }}
  98. </p>
  99. <p class="subtitle">
  100. {{ props.location }}
  101. </p>
  102. </div>
  103. <div
  104. v-show="isUping"
  105. v-touch:swipe.bottom="
  106. () => {
  107. isUping = true;
  108. }
  109. "
  110. class="info-content"
  111. :class="{ 'info-content-up': isUping }"
  112. >
  113. <h2 v-if="paintingDesc">
  114. 作品简介:
  115. </h2>
  116. <div class="normal-text">
  117. {{ paintingDesc }}
  118. </div>
  119. <h2 v-if="authorDesc">
  120. 作者简介:
  121. </h2>
  122. <div class="normal-text">
  123. {{ authorDesc }}
  124. </div>
  125. </div>
  126. </div>
  127. <OperationTip
  128. v-if="needOperationTip"
  129. class="operation-tip"
  130. text=""
  131. :is-show="isShowOperationTip"
  132. />
  133. <BtnBack
  134. v-if="canClose"
  135. @click="emit('close')"
  136. />
  137. </div>
  138. </template>
  139. <script setup>
  140. import {
  141. ref,
  142. computed,
  143. watch,
  144. onMounted,
  145. inject,
  146. onUnmounted,
  147. onBeforeUnmount,
  148. } from "vue"
  149. import { useRoute, useRouter } from "vue-router"
  150. import { useStore } from "vuex"
  151. import useSizeAdapt from "@/useFunctions/useSizeAdapt"
  152. import TWEEN from "@tweenjs/tween.js"
  153. import { api as viewerApi } from "v-viewer"
  154. const route = useRoute()
  155. const router = useRouter()
  156. const store = useStore()
  157. const $env = inject("$env")
  158. const emit = defineEmits(["close"])
  159. const { windowSizeInCssForRef, windowSizeWhenDesignForRef } = useSizeAdapt()
  160. const props = defineProps({
  161. thumb: {
  162. type: String,
  163. required: true,
  164. },
  165. bigPainting: {
  166. type: String,
  167. required: true,
  168. },
  169. title: {
  170. type: String,
  171. required: true,
  172. },
  173. author: {
  174. type: String,
  175. required: true,
  176. },
  177. // subtitle: {
  178. // type: String,
  179. // required: true,
  180. // },
  181. age: {
  182. type: String,
  183. required: true,
  184. },
  185. location: {
  186. type: String,
  187. required: true,
  188. },
  189. paintingDesc: {
  190. type: String,
  191. default: "",
  192. },
  193. authorDesc: {
  194. type: String,
  195. default: "",
  196. },
  197. canClose: {
  198. type: Boolean,
  199. default: true,
  200. },
  201. size: {
  202. type: Object,
  203. default: () => {
  204. return {
  205. width: 1,
  206. height: 1,
  207. }
  208. },
  209. },
  210. direction: {
  211. type: String,
  212. default: () => {
  213. return
  214. },
  215. },
  216. needOperationTip: {
  217. type: Boolean,
  218. default: false,
  219. },
  220. })
  221. onMounted(() => {
  222. // console.log('pppppppp', props.direction, props.title)
  223. })
  224. /**
  225. * 操作提示
  226. */
  227. const needOperationTip = computed(() => {
  228. return props.needOperationTip
  229. })
  230. const isShowOperationTip = ref(true)
  231. const descTextEl = ref(null)
  232. const descTextElScrollTop = ref(0)
  233. onMounted(() => {
  234. descTextEl.value.addEventListener("scroll", (e) => {
  235. descTextElScrollTop.value = descTextEl.value.scrollTop
  236. })
  237. // 判断图片是否是横向
  238. })
  239. const unwatch = watch(descTextElScrollTop, (v) => {
  240. isShowOperationTip.value = false
  241. unwatch()
  242. })
  243. const isUping = ref(false)
  244. // 上滑
  245. const onSwipeTop = () => {
  246. // console.log('上滑')
  247. // 画作缩小
  248. isUping.value = props.paintingDesc ? true : false
  249. }
  250. // 下滑
  251. const onSwipeDown = () => {
  252. // 看看文字滚动是否到顶部了
  253. const topNum = descTextEl.value.scrollTop
  254. if (topNum <= 0) isUping.value = false
  255. }
  256. onBeforeUnmount(() => {
  257. isUping.value = false
  258. })
  259. const isAnimating = ref(true)
  260. /** 卷轴展开动画的tweening */
  261. const AnimationProgress = ref({
  262. value: 7,
  263. })
  264. const isShowTipTop = ref(false)
  265. watch(AnimationProgress, (v) => {
  266. if (v == 99) {
  267. isShowTipTop.value = true
  268. setTimeout(() => {
  269. isShowTipTop.value = false
  270. }, 1000)
  271. }
  272. })
  273. const tween = new TWEEN.Tween(AnimationProgress.value)
  274. tween.to(
  275. {
  276. value: 100,
  277. },
  278. 3000
  279. )
  280. tween.easing(TWEEN.Easing.Cubic.InOut)
  281. let animationRequestId = null
  282. const animate = () => {
  283. animationRequestId = requestAnimationFrame(animate)
  284. TWEEN.update()
  285. }
  286. // tween.onUpdate(function (object) {
  287. // console.log(object.value)
  288. // })
  289. onMounted(() => {
  290. tween.start()
  291. animate()
  292. })
  293. tween.onComplete(() => {
  294. isAnimating.value = false
  295. cancelAnimationFrame(animationRequestId)
  296. })
  297. onUnmounted(() => {
  298. tween.stop()
  299. cancelAnimationFrame(animationRequestId)
  300. })
  301. /**
  302. * 尺寸相关
  303. */
  304. const paintingWrapWidth = ref(268)
  305. const paintingWrapHeight = ref(426)
  306. let wrapSizeRatio = paintingWrapWidth.value / paintingWrapHeight.value
  307. if (wrapSizeRatio < 1) {
  308. wrapSizeRatio = 1 / wrapSizeRatio
  309. }
  310. let sizeRatio = props.size.width / props.size.height
  311. if (sizeRatio < 1) {
  312. sizeRatio = 1 / sizeRatio
  313. }
  314. const isOversize = ref(sizeRatio > wrapSizeRatio)
  315. const paintingWrap2El = ref(null)
  316. const paintingEl = ref(null)
  317. onMounted(() => {
  318. if (isOversize.value) {
  319. setTimeout(() => {
  320. const y =
  321. (paintingEl.value.clientHeight - paintingWrap2El.value.clientHeight) /
  322. 2
  323. paintingWrap2El.value.scrollTo({
  324. top: y,
  325. // behavior: 'smooth',
  326. })
  327. }, 0)
  328. }
  329. })
  330. function showBigPainting() {
  331. viewerApi({
  332. images: [props.bigPainting],
  333. })
  334. }
  335. </script>
  336. <style lang="less" scoped>
  337. .hotspot-detail-2 {
  338. position: absolute;
  339. left: 0;
  340. top: 0;
  341. width: 100%;
  342. height: 100%;
  343. ::-webkit-scrollbar {
  344. width: 0;
  345. height: 0;
  346. }
  347. .painting-wrapRow {
  348. background-color: red;
  349. z-index: 99;
  350. }
  351. > .painting-wrap {
  352. position: absolute;
  353. left: 50%;
  354. top: calc(
  355. 70 / v-bind("windowSizeWhenDesignForRef") *
  356. v-bind("windowSizeInCssForRef")
  357. );
  358. transform: translate(-50%, 0);
  359. width: calc(
  360. 356 / v-bind("windowSizeWhenDesignForRef") *
  361. v-bind("windowSizeInCssForRef")
  362. );
  363. height: calc(
  364. 602 / v-bind("windowSizeWhenDesignForRef") *
  365. v-bind("windowSizeInCssForRef")
  366. );
  367. overflow: hidden;
  368. transition: top 2s ease, transform 2s ease, left 2s ease;
  369. > img.painting-border {
  370. position: absolute;
  371. left: 0;
  372. top: 0;
  373. width: 100%;
  374. height: 100%;
  375. }
  376. > .painting-wrap-2 {
  377. position: absolute;
  378. left: 50%;
  379. top: calc(
  380. 110 / v-bind("windowSizeWhenDesignForRef") *
  381. v-bind("windowSizeInCssForRef")
  382. );
  383. transform: translate(-50%, 0);
  384. width: calc(
  385. v-bind("paintingWrapWidth") / v-bind("windowSizeWhenDesignForRef") *
  386. v-bind("windowSizeInCssForRef")
  387. );
  388. height: calc(
  389. v-bind("paintingWrapHeight") / v-bind("windowSizeWhenDesignForRef") *
  390. v-bind("windowSizeInCssForRef")
  391. );
  392. overflow: auto;
  393. > img.painting {
  394. position: absolute;
  395. left: 50%;
  396. top: 50%;
  397. transform: translate(-50%, -50%);
  398. width: 100%;
  399. }
  400. > img.painting.oversize {
  401. position: static;
  402. left: initial;
  403. top: initial;
  404. transform: initial;
  405. }
  406. }
  407. > img.bottom-border-for-animation {
  408. position: absolute;
  409. left: 0;
  410. width: 100%;
  411. }
  412. }
  413. // 上滑动画和状态
  414. > .paintion-wrap-top {
  415. animation: paintion-up 2s forwards;
  416. transform: translate(-50%, 0) scale(0.6);
  417. top: calc(
  418. -60 / var(--39efea6f-windowSizeWhenDesignForRef) * var(--39efea6f-windowSizeInCssForRef)
  419. );
  420. // @keyframes paintion-up {
  421. // 0% {
  422. // transform: translate(-50%, 0);
  423. // top: calc(70 / var(--39efea6f-windowSizeWhenDesignForRef) * var(--39efea6f-windowSizeInCssForRef));
  424. // }
  425. // 100% {
  426. // transform: translate(-50%, 0) scale(0.6);
  427. // top: calc(-60 / var(--39efea6f-windowSizeWhenDesignForRef) * var(--39efea6f-windowSizeInCssForRef));
  428. // }
  429. // }
  430. }
  431. > .desc-text {
  432. position: absolute;
  433. left: 50%;
  434. bottom: 2%;
  435. transform: translateX(-50%);
  436. width: calc(
  437. 306 / v-bind("windowSizeWhenDesignForRef") *
  438. v-bind("windowSizeInCssForRef")
  439. );
  440. height: calc(
  441. 130 / v-bind("windowSizeWhenDesignForRef") *
  442. v-bind("windowSizeInCssForRef")
  443. );
  444. overflow: auto;
  445. transition: height 2s ease;
  446. .info-title-content {
  447. transition: all 2s ease;
  448. > h1 {
  449. text-align: center;
  450. font-family: KaiTi, KaiTi;
  451. font-weight: 400;
  452. font-size: calc(
  453. 20 / v-bind("windowSizeWhenDesignForRef") *
  454. v-bind("windowSizeInCssForRef")
  455. );
  456. color: #ffffff;
  457. margin-bottom: calc(
  458. 19 / v-bind("windowSizeWhenDesignForRef") *
  459. v-bind("windowSizeInCssForRef")
  460. );
  461. }
  462. > p.subtitle {
  463. text-align: center;
  464. font-family: KaiTi, KaiTi;
  465. font-weight: 400;
  466. font-size: calc(
  467. 16 / v-bind("windowSizeWhenDesignForRef") *
  468. v-bind("windowSizeInCssForRef")
  469. );
  470. color: rgba(255, 255, 255, 0.8);
  471. line-height: calc(
  472. 19 / v-bind("windowSizeWhenDesignForRef") *
  473. v-bind("windowSizeInCssForRef")
  474. );
  475. margin-bottom: calc(
  476. 6 / v-bind("windowSizeWhenDesignForRef") *
  477. v-bind("windowSizeInCssForRef")
  478. );
  479. }
  480. > h2 {
  481. display: inline-block;
  482. margin-top: calc(
  483. 30 / v-bind("windowSizeWhenDesignForRef") *
  484. v-bind("windowSizeInCssForRef")
  485. );
  486. font-family: KaiTi, KaiTi;
  487. color: #ffffff;
  488. margin-top: 2em;
  489. margin-bottom: 0.5em;
  490. font-weight: 400;
  491. font-size: calc(
  492. 20 / v-bind("windowSizeWhenDesignForRef") *
  493. v-bind("windowSizeInCssForRef")
  494. );
  495. }
  496. > .normal-text {
  497. font-family: KaiTi, KaiTi;
  498. color: #ffffff;
  499. font-weight: 400;
  500. font-size: calc(
  501. 20 / v-bind("windowSizeWhenDesignForRef") *
  502. v-bind("windowSizeInCssForRef")
  503. );
  504. line-height: calc(
  505. 25 / v-bind("windowSizeWhenDesignForRef") *
  506. v-bind("windowSizeInCssForRef")
  507. );
  508. text-align: justify;
  509. white-space: pre-line;
  510. }
  511. }
  512. // 向上滑动
  513. .info-title-content-up {
  514. // animation: title-up 2s forwards;
  515. opacity: 0;
  516. height: 0;
  517. overflow: hidden;
  518. // @keyframes title-up {
  519. // 0% {
  520. // opacity: 1;
  521. // }
  522. // 100% {
  523. // opacity: 0;
  524. // display: none;
  525. // }
  526. // }
  527. }
  528. > .info-content {
  529. > h1 {
  530. text-align: center;
  531. font-family: KaiTi, KaiTi;
  532. font-weight: 400;
  533. font-size: calc(
  534. 20 / v-bind("windowSizeWhenDesignForRef") *
  535. v-bind("windowSizeInCssForRef")
  536. );
  537. color: #ffffff;
  538. margin-bottom: calc(
  539. 19 / v-bind("windowSizeWhenDesignForRef") *
  540. v-bind("windowSizeInCssForRef")
  541. );
  542. }
  543. > p.subtitle {
  544. text-align: center;
  545. font-family: KaiTi, KaiTi;
  546. font-weight: 400;
  547. font-size: calc(
  548. 16 / v-bind("windowSizeWhenDesignForRef") *
  549. v-bind("windowSizeInCssForRef")
  550. );
  551. color: rgba(255, 255, 255, 0.8);
  552. line-height: calc(
  553. 19 / v-bind("windowSizeWhenDesignForRef") *
  554. v-bind("windowSizeInCssForRef")
  555. );
  556. margin-bottom: calc(
  557. 6 / v-bind("windowSizeWhenDesignForRef") *
  558. v-bind("windowSizeInCssForRef")
  559. );
  560. }
  561. > h2 {
  562. display: inline-block;
  563. margin-top: calc(
  564. 30 / v-bind("windowSizeWhenDesignForRef") *
  565. v-bind("windowSizeInCssForRef")
  566. );
  567. font-family: KaiTi, KaiTi;
  568. color: #ffffff;
  569. margin-top: 2em;
  570. margin-bottom: 0.5em;
  571. font-weight: 400;
  572. font-size: calc(
  573. 20 / v-bind("windowSizeWhenDesignForRef") *
  574. v-bind("windowSizeInCssForRef")
  575. );
  576. }
  577. > .normal-text {
  578. font-family: KaiTi, KaiTi;
  579. color: #ffffff;
  580. font-weight: 400;
  581. font-size: calc(
  582. 20 / v-bind("windowSizeWhenDesignForRef") *
  583. v-bind("windowSizeInCssForRef")
  584. );
  585. line-height: calc(
  586. 25 / v-bind("windowSizeWhenDesignForRef") *
  587. v-bind("windowSizeInCssForRef")
  588. );
  589. text-align: justify;
  590. white-space: pre-line;
  591. }
  592. }
  593. > .info-content-up {
  594. animation: info-up 2s forwards;
  595. @keyframes info-up {
  596. 0% {
  597. opacity: 0;
  598. }
  599. 100% {
  600. opacity: 1;
  601. // transform: translateY(-50%);
  602. }
  603. }
  604. }
  605. // >h1 {
  606. // text-align: center;
  607. // font-family: KaiTi, KaiTi;
  608. // font-weight: 400;
  609. // font-size: calc(20 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  610. // color: #FFFFFF;
  611. // margin-bottom: calc(19 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  612. // }
  613. // >p.subtitle {
  614. // text-align: center;
  615. // font-family: KaiTi, KaiTi;
  616. // font-weight: 400;
  617. // font-size: calc(16 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  618. // color: rgba(255, 255, 255, 0.8);
  619. // line-height: calc(19 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  620. // margin-bottom: calc(6 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  621. // }
  622. // >h2 {
  623. // display: inline-block;
  624. // margin-top: calc(30 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  625. // font-family: KaiTi, KaiTi;
  626. // color: #FFFFFF;
  627. // margin-top: 2em;
  628. // margin-bottom: 0.5em;
  629. // font-weight: 400;
  630. // font-size: calc(20 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  631. // }
  632. // >.normal-text {
  633. // font-family: KaiTi, KaiTi;
  634. // color: #FFFFFF;
  635. // font-weight: 400;
  636. // font-size: calc(20 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  637. // line-height: calc(25 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  638. // text-align: justify;
  639. // white-space: pre-line;
  640. // }
  641. }
  642. > .desc-text-up {
  643. height: calc(
  644. 360 / v-bind("windowSizeWhenDesignForRef") *
  645. v-bind("windowSizeInCssForRef")
  646. );
  647. bottom: 0;
  648. padding-bottom: 15px;
  649. // animation: text-up 2s forwards;
  650. // @keyframes text-up {
  651. // 100%{
  652. // height: calc(400 / v-bind('windowSizeWhenDesignForRef') * v-bind('windowSizeInCssForRef'));
  653. // }
  654. // }
  655. }
  656. .desc-text-upShowd {
  657. width: 100%;
  658. height: calc(
  659. 140 / v-bind("windowSizeWhenDesignForRef") *
  660. v-bind("windowSizeInCssForRef")
  661. );
  662. position: fixed;
  663. bottom: 0px;
  664. left: 50%;
  665. transform: translateX(-50%);
  666. z-index: 10;
  667. pointer-events: none;
  668. opacity: 0;
  669. transition: opacity 2s;
  670. background: linear-gradient(
  671. rgba(0, 0, 0, 0),
  672. rgba(0, 0, 0, 0.1),
  673. rgba(0, 0, 0, 0.4)
  674. );
  675. }
  676. .desc-text-upShowdShow {
  677. opacity: 1;
  678. }
  679. > .operation-tip {
  680. position: absolute;
  681. right: calc(
  682. 39 / v-bind("windowSizeWhenDesignForRef") *
  683. v-bind("windowSizeInCssForRef")
  684. );
  685. bottom: calc(
  686. 49 / v-bind("windowSizeWhenDesignForRef") *
  687. v-bind("windowSizeInCssForRef")
  688. );
  689. }
  690. > .operation-tip {
  691. position: absolute;
  692. right: calc(
  693. 49 / v-bind("windowSizeWhenDesignForRef") *
  694. v-bind("windowSizeInCssForRef")
  695. );
  696. bottom: calc(
  697. 39 / v-bind("windowSizeWhenDesignForRef") *
  698. v-bind("windowSizeInCssForRef")
  699. );
  700. }
  701. }
  702. #myRowBox {
  703. #painting-wrap-id {
  704. height: 100vw !important;
  705. left: 50% !important;
  706. // transform: translate(-50%, 0) rotate(-90deg) scale(0.6) !important;
  707. .myRowBoxImg {
  708. height: 100%;
  709. width: 100%;
  710. max-height: 100vh;
  711. overflow-x: auto;
  712. white-space: nowrap;
  713. display: inline-block;
  714. & > div {
  715. padding: 33% 10% 20% 10%;
  716. // width:100%;
  717. background-image: url("../assets/images/img_painting_heng.png");
  718. background-size: 100% 100%;
  719. display: inline-block;
  720. & > img {
  721. display: inline-block;
  722. width: 100%;
  723. }
  724. }
  725. }
  726. .painting-wrap-2 {
  727. overflow: visible;
  728. }
  729. }
  730. }
  731. </style>