ToB企服应用市场:ToB评测及商务社交产业平台

标题: vue 3D 翻页效果 [打印本页]

作者: 没腿的鸟    时间: 3 天前
标题: vue 3D 翻页效果



  1. <template>
  2.         <view class="swipe-container" @touchstart="onTouchStart" @touchmove="onTouchMove" @touchend="onTouchEnd">
  3.                 <view class="page">初始页</view>
  4.         </view>
  5. </template>
  6. <script>
  7.         export default {
  8.                 data() {
  9.                         return {
  10.                                 startX: 0, // 触摸开始的 X 坐标
  11.                                 moveX: 0, // 当前移动的 X 坐标
  12.                                 threshold: 100, // 滑动阈值
  13.                         };
  14.                 },
  15.                 methods: {
  16.                         onTouchStart(event) {
  17.                                 this.startX = event.touches[0].clientX;
  18.                         },
  19.                         onTouchMove(event) {
  20.                                 this.moveX = event.touches[0].clientX - this.startX;
  21.                         },
  22.                         onTouchEnd() {
  23.                                 const page = document.getElementsByClassName("page")[0];
  24.                                 if (this.moveX > this.threshold) {
  25.                                         console.log("向右滑动");
  26.                                         page.style.transformOrigin = 'right';
  27.                                        
  28.                                         const animation = page.animate(
  29.                                                 [{
  30.                                                                 transform: 'rotateY(0deg)'
  31.                                                         },
  32.                                                         {
  33.                                                                 transform: 'rotateY(90deg)'
  34.                                                         }
  35.                                                 ], {
  36.                                                         duration: 1000,
  37.                                                         iterations: 1, //循环一次
  38.                                                         //fill: 'forwards'
  39.                                                 }
  40.                                         );
  41.                                         //动态加载数据
  42.                                         animation.onfinish = () => {
  43.                                                 //animation.reverse();
  44.                                                 console.log('动画完成!');
  45.                                                 //数据渲染到.page元素中
  46.                                         };
  47.                                 } else if (this.moveX < -this.threshold) {
  48.                                         console.log("向左滑动");
  49.                                         page.style.transformOrigin = 'left';
  50.                                         const animation = page.animate(
  51.                                                 [{
  52.                                                                 transform: 'rotateY(0deg)'
  53.                                                         },
  54.                                                         {
  55.                                                                 transform: 'rotateY(-90deg)'
  56.                                                         }
  57.                                                 ], {
  58.                                                         duration: 1000,
  59.                                                         iterations: 1, //循环一次
  60.                                                         //fill: 'forwards' // 动画结束后保持最终状态
  61.                                                 }
  62.                                         );
  63.                                         //动态加载数据
  64.                                         animation.onfinish = () => {
  65.                                                 //animation.reverse();
  66.                                                 console.log('动画完成2');
  67.                                                 //数据渲染到.page元素中
  68.                                         };
  69.                                 }
  70.                                 this.moveX = 0; // 重置移动距离
  71.                         },
  72.                 }
  73.         }
  74. </script>
  75. <style scoped lang="scss">
  76.         .swipe-container {
  77.                 width: 100%;
  78.                 height: 500px;
  79.                 display: flex;
  80.                 justify-content: center;
  81.                 align-items: center;
  82.                
  83.                 perspective: 1000px;
  84.         }
  85.         .swipe-container .page {
  86.                 width: 100%;
  87.                 height: 100%;
  88.                 /* 保留 3D 变换 */
  89.                 transform-style: preserve-3d;
  90.                 background-color: red;
  91.                
  92.                 /* 提示浏览器使用硬件加速 */
  93.                 will-change: transform;
  94.         }
  95. </style>
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4