当前位置: 首页 > news >正文

vue 3D 翻页效果

<template>
	<view class="swipe-container" @touchstart="onTouchStart" @touchmove="onTouchMove" @touchend="onTouchEnd">
		<view class="page">初始页</view>
	</view>
</template>

<script>
	export default {
		data() {
			return {
				startX: 0, // 触摸开始的 X 坐标
				moveX: 0, // 当前移动的 X 坐标
				threshold: 100, // 滑动阈值
			};
		},
		methods: {
			onTouchStart(event) {
				this.startX = event.touches[0].clientX;
			},
			onTouchMove(event) {
				this.moveX = event.touches[0].clientX - this.startX;
			},
			onTouchEnd() {
				const page = document.getElementsByClassName("page")[0];
				if (this.moveX > this.threshold) {
					console.log("向右滑动");
					page.style.transformOrigin = 'right';
					
					const animation = page.animate(
						[{
								transform: 'rotateY(0deg)'
							},
							{
								transform: 'rotateY(90deg)'
							}
						], {
							duration: 1000,
							iterations: 1, //循环一次
							//fill: 'forwards'
						}
					);
					//动态加载数据
					animation.onfinish = () => {
						//animation.reverse();
						console.log('动画完成!');
						//数据渲染到.page元素中
					};
				} else if (this.moveX < -this.threshold) {
					console.log("向左滑动");
					page.style.transformOrigin = 'left';
					const animation = page.animate(
						[{
								transform: 'rotateY(0deg)'
							},
							{
								transform: 'rotateY(-90deg)'
							}
						], {
							duration: 1000,
							iterations: 1, //循环一次
							//fill: 'forwards' // 动画结束后保持最终状态
						}
					);
					//动态加载数据
					animation.onfinish = () => {
						//animation.reverse();
						console.log('动画完成2');
						//数据渲染到.page元素中
					};
				}
				this.moveX = 0; // 重置移动距离
			},
		}
	}
</script>

<style scoped lang="scss">
	.swipe-container {
		width: 100%;
		height: 500px;
		display: flex;
		justify-content: center;
		align-items: center;
		
		perspective: 1000px;
	}

	.swipe-container .page {
		width: 100%;
		height: 100%;

		/* 保留 3D 变换 */
		transform-style: preserve-3d;
		background-color: red;
		
		/* 提示浏览器使用硬件加速 */
		will-change: transform;
	}
</style>

http://www.dtcms.com/a/35425.html

相关文章:

  • Vscode编辑器获取更新远程最新分支
  • 新民主主义革命理论的形成依据
  • AdapterBias
  • Rk3568驱动开发_驱动实现流程以及本质_3
  • P4282--高精度加减,进制
  • Debain12.9安装大模型微调基础环境
  • 数据驱动未来!天合光能与永洪科技携手开启数字化新篇章
  • 网络安全-系统层攻击流程及防御措施
  • [创业之路-323]:初创期企业谨慎多元化策略,要聚焦策略、压强策略、力出一孔、利出一孔。
  • 【ROS2】SLAM入门:gmapping建图、导航测试记录
  • Apache Flink CDC (Change Data Capture) mysql Kafka
  • 智慧家居中的视频监控系统-------1、视频监控
  • 通过恒定带宽服务器调度改进时间敏感网络(TSN)流量整形
  • 【Java 多线程基础 - 上篇】
  • fps动作系统4.1:移动系统
  • nginx代理后502
  • 运维Crontab面试题及参考答案
  • linux 编辑器
  • hackmyvm-buster
  • 消息中间件的开源实现
  • 在 MySQL 的 InnoDB 存储引擎中,脏页(Dirty Page)的刷盘(Flush)时机
  • Deepseek开源周第一天:FlashMLA来袭
  • 从单片机的启动说起一个单片机到点灯发生了什么下——使用GPIO点一个灯
  • CentOS 9/10 Stream / RockyLinux 8 上安装 Oracle database 19c
  • C++ day5 练习
  • QT:paintEvent、QPainter、QPaintDevice
  • Matlab——图像保存导出成好看的.pdf格式文件
  • 存储引擎、索引(MySQL笔记第四期)
  • 指令模型VS推理模型
  • 复现win7永恒之蓝漏洞