JS实现文字打印效果(完整代码附效果图)

news2024/11/15 4:48:26

效果图:

完整代码:

<template>
	<view class="page" @touchstart="touchstart" @touchend="touchend">
		<view v-if="showTopBlock">
			<view class="topBlockBg" @click="showTopBlock=false"></view>
			<view class="topBlock">
				<view class="pageNo">
					<text style="color: #009A82;font-size: 26rpx;margin-right: 8rpx;">第{{showIdx+1}}页 </text>
					<text> / 共{{topList.length}}页</text>
				</view>
				<scroll-view class="topImgs" :show-scrollbar="true" scroll-x="true">
					<view class="p_r" style="margin-top: 100rpx;">
						<view class="topItem" @click="showIdx=index" v-for="(item,index) in topList">
							<image class="topImg" :style="{zoom:showIdx===index?1.2:1,top:showIdx===index?'-38rpx':'0'}"
								:src="item" mode="widthFix"></image>
						</view>
					</view>
				</scroll-view>
			</view>
		</view>
		<swiper :current="showIdx" @change="changeSwiper">
			<swiper-item v-for="(item,index) in imgList">

				<view class="xialaBlock" v-if="!showTopBlock&&index!==0&&showXiala" @click="showTopBlock=true">
					<image class="xiala" :src="xiala" mode="widthFix"></image>
				</view>
				<view class="pageItem">
					<image class="pageBg" :src="item" mode="widthFix"></image>
					<view class="" v-if="index==1">
						<view v-show="!show2_video" @click="play2()" class="p2Video">

						</view>
						<video v-show="show2_video" class="p2Video" id="myVideop2" :src="page2Video"></video>
					</view>
					<view class="p3cBlock" v-if="index==2">
						<view class="p_r">
							<view class="" v-for="(itemm,idxx) in p3mune" @click="p3MIdx=idxx">
								<image class="p3mItem" :src="p3MIdx===idxx?itemm.in:itemm.no" mode="widthFix">
								</image>
							</view>
						</view>
						<view class="p3centent">
							<image class="p3cententImg" :src="p3mune[p3MIdx].centent" mode="widthFix"></image>
						</view>
					</view>
					<view class="p4cBlock" v-if="index==3">
						<view v-show="!show4_1_video" @click="play4_1()" class="p4Video1">

						</view>
						<view v-show="!show4_2_video" @click="play4_2()" class="p4Video2">

						</view>
						<video id="myVideo1" v-show="show4_1_video" class="p4Video1" :src="page4_1Video"></video>
						<video id="myVideo2" v-show="show4_2_video" class="p4Video2" :src="page4_2Video"></video>
						<image class="zan zan1" :animation="animationZan1" @click="czan1" :src="isZan1?zan1:zanNo"
							mode="widthFix"></image>
						<view class="zanNumBlock p_r">
							<view class="shuzi1">
								{{sz1}}
							</view>
							<view class="heng1">

							</view>
							<view class="heng2">

							</view>
							<view class="shuzi2">
								{{sz2}}
							</view>
						</view>
						<image class="zan zan2" :animation="animationZan2" @click="czan2" :src="isZan2?zan2:zanNo"
							mode="widthFix"></image>
					</view>

					<view class="p5cBlock" v-if="index==4">
						<text class="txt" v-for="(item,idx) in txts">
							{{item}}
						</text>
					</view>
					<view class="p5cName" v-if="index==4&&!showName">

					</view>

				</view>
			</swiper-item>
		</swiper>
	</view>
</template>

<script>
	let oss = 'https://xxx/demo-slide-h5/'
	export default {
		components: {

		},
		data() {
			return {
				showXiala: true,
				left: '',
				showName: false,
				xiala: oss + 'xiala.png',
				txts: [],
				showIdx: 0,
				showTopBlock: false,
				sz1: 42,
				sz2: 28,
				isZan1: false,
				isZan2: false,
				p3MIdx: 0,
				animationData: false,
				animationZan1: false,
				animationZan2: false,
				page2Video: oss + 'page2Video.mp4?v=1',
				page4_1Video: oss + 'page4_1Video.mp4?v=1',
				page4_2Video: oss + 'page4_2Video.mp4?v=1',
				p3mune: [{
					in: oss + 'bai1In.png',
					no: oss + 'bai1No.png',
					centent: oss + '51.png',
				}, {
					in: oss + 'bai2In.png',
					no: oss + 'bai2No.png',
					centent: oss + '61.png',
				}, {
					in: oss + 'bai3In.png',
					no: oss + 'bai3No.png',
					centent: oss + '51.png',
				}],
				zan1: oss + 'zan1.png',
				zan2: oss + 'zan2.png',
				zanNo: oss + 'zanNo.png',
				topList: [
					oss + '1.jpg?v=1',
					oss + '2.jpg?v=1',
					oss + '31.jpg?v=1',
					oss + '41.jpg?v=1',
					oss + '5.jpg?v=1',
					// oss + '6.jpg?v=1'
				],
				imgList: [
					oss + '1.jpg?v=1',
					oss + '2.jpg?v=1',
					oss + '3.jpg?v=1',
					oss + '4.jpg?v=1',
					oss + '5.jpg?v=1',
					// oss + '6.jpg?v=1'
				],
				videoContext4_1: '',
				videoContext4_2: '',
				videoContext2: '',
				show4_1_video: false,
				show4_2_video: false,
				show2_video:false,
				startClientY: '',
			};
		},
		onLoad(option) {
			this.$common.Init.call(this);
			setTimeout(() => {
				this.showXiala = false;
			}, 20000)
		},
		onShow() {},
		onHide() {},
		methods: {
			changeSwiper(e) {
				console.log('e', e);
				this.showIdx = e.detail.current
				this.show4_1_video = false;
				this.show4_2_video = false;

				if (e.detail.current != 1) {
					if (this.videoContext2) this.videoContext2.pause()
				}
				
				if (e.detail.current != 3) {
					if (this.videoContext4_1) this.videoContext4_1.pause()
					if (this.videoContext4_2) this.videoContext4_2.pause()
				}

				if (e.detail.current == 4) {
					this.txts = [];
					let txt = '期待针对免疫治疗为基础的治疗模式不断研发,能够为患者带来更长生存的同时进一步提升生活质量。'
					let arr = txt.split('')
					console.log('arr', arr);
					this.addArr(arr, 0)
					setTimeout(() => {
						this.showName = true;
					}, (arr.length + 1) * 150)
				} else {
					this.showName = false;
				}
			},
			addArr(arr, idx) {
				if (idx == arr.length || this.showIdx != 4) {
					this.txts.pop()
					return;
				}
				setTimeout(() => {
					this.txts.pop()
					this.txts.push(arr[idx])
					this.txts.push('|')
					this.addArr(arr, idx + 1)
				}, 150)
			},
			anima(pageIdx, type) {
				var animation = uni.createAnimation({
					duration: 500,
					timingFunction: 'ease',
				})

				let zhuan = (pageIdx + 1) * 360
				if (type == 'left') {
					animation.translateX(-375).step()
					// animation.rotate(zhuan).step()
					this.showIdx = pageIdx;
				} else {
					animation.translateX(375).step()
					// animation.rotate(zhuan).step()
					this.showIdx = pageIdx;
				}
				// rotate rotateX rotateY rotateZ
				// animation.rotateZ(zhuan).step()

				this.animationData = animation.export()
				setTimeout(() => {
					this.showIdx = pageIdx;
					animation.translateX(0).step({
						duration: 10
					})
					this.animationData = animation.export()
				}, 500)
			},
			play2() {
				console.log('播放视频2');
				this.show2_video = true;
				this.show4_1_video = false;
				this.show4_2_video = false;
				
				this.videoContext2 = uni.createVideoContext('myVideop2')
				this.videoContext2.play()
			},
			play4_1() {
				console.log('播放视频41');
				this.show4_1_video = true;
				this.show4_2_video = false;
				this.videoContext4_1 = uni.createVideoContext('myVideo1')
				if (this.videoContext4_2) this.videoContext4_2.pause()
				if (this.videoContext2) this.videoContext2.pause()
				this.videoContext4_1.play()
			},
			play4_2() {
				console.log('播放视频42');
				this.show4_2_video = true;
				this.show4_1_video = false;
				this.videoContext4_2 = uni.createVideoContext('myVideo2')
				if (this.videoContext4_1) this.videoContext4_1.pause()
				if (this.videoContext2) this.videoContext2.pause()
				this.videoContext4_2.play()
			},
			czan1() {
				this.isZan1 = !this.isZan1;
				if (this.isZan1) {
					this.sz1 = this.sz1 + 1
				} else {
					this.sz1 = this.sz1 - 1
				}
				this.zananimation(1)
			},
			czan2() {
				this.isZan2 = !this.isZan2;
				if (this.isZan2) {
					this.sz2 = this.sz2 + 1
				} else {
					this.sz2 = this.sz2 - 1
				}
				this.zananimation(2)
			},
			zananimation(idx) {
				var animation = uni.createAnimation({
					duration: 200,
					timingFunction: 'ease',
				})
				animation.scale(1.2).step()
				animation.scale(1).step()
				if (idx == '1') {
					this.animationZan1 = animation.export()
				} else {
					this.animationZan2 = animation.export()
				}
			},
			touchstart(e) {
				this.left = 0
				this.startClientX = e.changedTouches[0].clientX;
				this.startClientY = e.changedTouches[0].clientY;

			},
			touchmove(e) {
				this.left = e.changedTouches[0].clientX - this.startClientX;
				console.log('this.left', this.left);
			},
			touchend(e) {
				this.endClientX = e.changedTouches[0].clientX;
				this.left = 0
				if (e.changedTouches[0].clientY - this.startClientY > 80) {
					console.log('下滑');
					this.showTopBlock = true;
					return
				}
				if (this.startClientX - this.endClientX > 80) {
					console.log('左滑');
					if (this.showIdx < this.imgList.length - 1) {
						// this.showIdx = this.showIdx + 1
						// let pageIdx = this.showIdx + 1
						// this.anima(pageIdx, 'left')
					} else {
						// uni.showToast({
						// 	title: '最后一页拉~',
						// 	icon: "none"
						// })
					}
				}
				if (this.endClientX - this.startClientX > 80) {
					console.log('右滑', 'right');
					if (this.showIdx > 0) {
						// this.showIdx = this.showIdx - 1
						// let pageIdx = this.showIdx - 1
						// this.anima(pageIdx)
					} else {
						// uni.showToast({
						// 	title: '到第一页拉~',
						// 	icon: "none"
						// })
					}
				}
			},
		},
	};
</script>

<style lang="scss" scoped>
	swiper,
	swiper-item,
	.page {
		position: absolute;
		top: 0;
		width: 100vw;
		min-height: 100vh;
	}

	.xialaBlock {
		position: absolute;
		top: 30rpx;
		width: 60rpx;
		height: 60rpx;
		left: 50vw;
		margin-left: -30rpx;
		z-index: 3;

		.xiala {
			width: 40rpx;
			animation: mydeamon 1s infinite; //1s值一秒内完成动画
			-webkit-animation: mydeamon 1s infinite;
			/* Safari and Chrome */
		}
	}

	@keyframes mydeamon {
		0% {
			transform: scale(2); //scale代表闪烁的体型变化,其他倾斜等样式自行搜索
			opacity: 1; //透明程度
		}

		100% {
			transform: scale(1);
			opacity: 0;
		}
	}

	.p5cName {
		position: absolute;
		top: 750rpx;
		width: 86vw;
		height: 200rpx;
		left: 7vw;
		z-index: 4;
		background-color: #fff;
		letter-spacing: 8rpx;
		line-height: 80rpx;
	}

	.p5cBlock {
		position: absolute;
		top: 400rpx;
		height: 250rpx;
		width: 86vw;
		left: 7vw;
		z-index: 4;
		background-color: #fff;
		letter-spacing: 8rpx;
		line-height: 80rpx;
		font-family: "Lucida Calligraphy", cursive, serif, sans-serif;

		.txt {
			width: 32rpx;
			height: 32rpx;
			color: #009A82;
			border-bottom: 1px solid #00d4ad;
			padding-bottom: 4rpx;
		}
	}

	.topBlockBg {
		position: fixed;
		height: 100vh;
		width: 100vw;
		z-index: 999;
		background-color: rgba(0, 0, 0, 0.5);
	}

	.topBlock {
		position: fixed;
		top: 0;
		height: 420rpx;
		width: 100vw;
		z-index: 999;
		background-color: #fff;

		.topImgs {
			width: 92vw;
			margin-left: 4vw;
			// border-bottom: 4px solid #f0f0f0;
			// padding-bottom: 20rpx;
			height: 380rpx;
		}

		.topImg {
			width: 120rpx;
			margin-right: 20rpx;
			border: 1px solid #f0f0f0;
			position: relative;
			bottom: 0;
		}

		.pageNo {
			position: absolute;
			right: 40rpx;
			top: 10rpx;
			font-size: 22rpx;
		}
	}

	.zan {
		width: 80rpx;
	}

	.zan1 {
		position: absolute;
		top: 630rpx;
		right: 80rpx;
		z-index: 2;
	}

	.p4Video1 {
		position: absolute;
		z-index: 4;
		// width: 100vw;
		// height: 400rpx;
		// top: 400rpx;
		top: 440rpx;
		left: 80rpx;
		width: 340rpx;
		height: 230rpx;
	}

	.p4Video2 {
		position: absolute;
		z-index: 4;
		// width: 100vw;
		// height: 400rpx;
		top: 990rpx;
		right: 80rpx;
		width: 340rpx;
		height: 230rpx;
	}

	.zanNumBlock {
		position: absolute;
		top: 830rpx;
		left: 80rpx;
		z-index: 2;

		.heng1 {
			width: 190rpx;
			height: 10rpx;
			border-radius: 50rpx;
			background-color: #009A82;
			margin-left: 10rpx;
			margin-top: 20rpx;
		}

		.shuzi1 {
			color: #009A82;
			font-weight: 600;
			font-size: 40rpx;
		}

		.shuzi2 {
			color: #E8B100;
			margin-left: 10rpx;
			font-weight: 600;
			font-size: 40rpx;
		}

		.heng2 {
			width: 190rpx;
			height: 10rpx;
			border-radius: 50rpx;
			background-color: #E8B100;
			margin-left: 90rpx;
			margin-top: 20rpx;
		}
	}

	.zan2 {
		position: absolute;
		top: 988rpx;
		left: 80rpx;
		z-index: 2;
	}

	.pageItem {

		width: 100vw;
		min-height: 100vh;
	}

	.pageBg {
		position: absolute;
		width: 100vw;
	}

	.p3cBlock {
		position: relative;
		top: 220rpx;
		margin-left: 4vw;
		width: 92vw;

		.p3mItem {
			position: relative;
			width: 30vw;
			margin-right: 10rpx;
			z-index: 5;
		}
	}

	.p3centent {
		margin-top: -26rpx;
		width: 92vw;
		position: relative;
		z-index: 4;
		height: 960rpx;
		overflow-x: hidden;
		overflow-y: scroll;

		.p3cententImg {
			width: 92vw;
		}
	}

	.p2Video {
		position: absolute;
		top: 224rpx;
		left: 58rpx;
		width: 364rpx;
		height: 228rpx;
		z-index: 2;
	}
</style>

demo-slide-h5

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1981566.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于k8s集群中kubectl的陈述式资源管理

1、k8s集群资源管理方式分类 &#xff08;1&#xff09;陈述式资源管理方式&#xff1a;增删查比较方便&#xff0c;但是改非常不方便 使用一条kubectl命令和参数选项来实现资源对象管理操作 &#xff08;2&#xff09;声明式资源管理方式&#xff1a;yaml文件管理 使用yam…

mac下载exe后不自动打开虚拟机

看到网上没有相关教程&#xff0c;正好解决了&#xff0c;发一下 场景&#xff1a;Mac环境下下载EXE文件&#xff0c;会导致VM虚拟机自动打开来执行文件&#xff0c;所以很烦。 解决方法&#xff1a; Mac系统-系统设置-隐私与安全-vmfusion-取消掉下载文件夹即可。 还有其他…

沃尔玛1P账号的强悍作用重要反映在那些方面?——WAYLI威利跨境助力商家

沃尔玛作为全球最大的零售商之一&#xff0c;其品牌影响力非常强大。商家通过入驻沃尔玛商超并开设1P账号&#xff0c;能够借助沃尔玛的品牌影响力来提升自身的品牌知名度和美誉度。这种品牌背书的效应&#xff0c;有助于商家吸引更多的消费者关注和购买自己的产品。 一、沃尔玛…

Android网络编程中的Http协议总结

1.Android与互联网交互的三种方式 2.初识Http协议 实际开发中我们和服务端打交道一般用得都是基于Http协议的通信&#xff0c;所以学好Http协议是非常 重要的&#xff0c;当然&#xff0c;我们不用过于考究一些细节的东西&#xff0c;有个大体的了解即可&#xff01;都是一些概…

6181P-12A2SW71DC触摸屏6181P12A2SW71DC面价

6181P-12A2SW71DC触摸屏6181P12A2SW71DC面价 6181P-12A2SW71DC触摸屏6181P12A2SW71DC面价 6181P-12A2SW71DC触摸屏6181P12A2SW71DC面价 6181P-12A2SW71DC触摸屏6181P12A2SW71DC接线图 6181P-12A2SW71DC触摸屏6181P12A2SW71DC线路图 6181P-12A2SW71DC触摸屏6181P12A2SW71D引…

FPGA知识基础之--clocking wizard ip核的使用以及modelsim与vivado联合仿真

目录 前言一、ip核是什么&#xff1f;1.1 定义1.2 分类 二、为什么使用ip核2.1 ip核的优点2.2 ip核的缺点 三、如何使用ip核&#xff08;vivado&#xff09;四、举例&#xff08;clocking wizard ip核&#xff09;4.1 简介4.2 实验任务4.3 程序设计4.3.1 系统模块4.3.2 波形绘制…

csm兼容性支持模块关闭还是开启_打开csm兼容性模式详细教程

现在新电脑中经常有网友看到bios中有一个csm选项&#xff0c;有些网友不知道是什么意思&#xff0c;其实电脑BIOS中的CSM Support英文全称Compatibility Support Module&#xff0c;翻译成中文就是兼容支持模块&#xff0c;主要是为不支持或不完全支持uefi的操作系统和Legacy模…

如何编写和发布 Python 包

编写和发布Python包是软件开发中非常常见的一项任务。通过创建Python包&#xff0c;开发者可以更好地组织代码&#xff0c;促进代码复用&#xff0c;并且便于共享和分发自己的代码库。 一、准备工作 在开始编写Python包之前&#xff0c;确保你已经安装了以下工具&#xff1a;…

Chainlit快速实现AI对话应用的界面定制化教程

前言 本文主要讲解如何自定义chainlit实现的网页界面的中的一些可以自定修改的样式的实现教程。比如修改自己的logo网站图标或者主题等 翻译 chainlit 默认网页界面显示的是英文&#xff0c;如果我们想显示为其他语言可以进行以下操作。 翻译文件位于项目根目录下的.chainli…

02 部署LVS-DR群集

2.1&#xff1a;直接路由模式&#xff08;LVS-DR&#xff09; 实验环境 关闭所有测试环境的防火墙 [rootbogon ~]# systemctl stop firewalld [rootbogon ~]# setenforce 0 1.配置LVS调速器 &#xff08;1&#xff09;配置虚拟IP地址VIP [rootlvs ~]# cd /etc/sysconfig/n…

53 程序控制结构精彩案例

1 输入若干成绩&#xff0c;求所有成绩的平均分。每输入一个成绩后询问是否继续输入下一个成绩&#xff0c;回答 yes 就继续输入下一个成绩&#xff0c;回答 no 就停止输入成绩。 scores [] # 使用列表存放临时数据 while True:x input(score: )try:scores.append(float(x)…

CEP 复杂事件处理引擎入门:初级高频量价因子策略的实现

高频交易&#xff08;High-Frequency Trading, HFT&#xff09;作为现代金融市场中的重要组成部分&#xff0c;以其高速、自动化和复杂的算法交易策略而著称。高频交易策略通过分析大量实时变化的市场数据&#xff0c;利用市场的微小价格波动迅速做出交易决策&#xff0c;从而在…

【游戏引擎之路】登神长阶(九)——《3D游戏编程大师技巧》:我想成为游戏之神!

5月20日-6月4日&#xff1a;攻克2D物理引擎。 6月4日-6月13日&#xff1a;攻克《3D数学基础》。 6月13日-6月20日&#xff1a;攻克《3D图形教程》。 6月21日-6月22日&#xff1a;攻克《Raycasting游戏教程》。 6月23日-7月1日&#xff1a;攻克《Windows游戏编程大师技巧》。 7月…

浅谈如何将本地代码提交至gitee

文章目录 一、下载git工具二、新建文件夹三、输入命令 [默认提交至master分支] 一、下载git工具 git官网 二、新建文件夹 随便在本机的任意位置新建一个文件夹都行。我以我本机的桌面新建一个文件夹为例&#xff0c;此文件夹可随意命名。 点击该文件夹&#xff0c;右键——…

大奖放送 | AI编程达人秀视频文章征集大赛来啦!

AI Coding&#xff0c;可以有多少种打开玩法&#xff1f;腾讯云AI代码助手是一款辅助编码工具&#xff0c;基于混元大模型&#xff0c;提供技术对话、代码补全、代码诊断和优化等能力&#xff0c;为你生成优质代码&#xff0c;帮你解决技术难题&#xff0c;提升编码效率。 我…

elasticsearch的学习(二):Java api操作elasticsearch

简介 使用Java api操作elasticsearch 创建maven项目 pom.xml文件 <?xml version"1.0" encoding"UTF-8"?><project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi…

通过率100%!讯方技术河南经贸职业学院华为云计算HCIE订单班取得阶段性成果!

近日&#xff0c;由讯方技术与河南经贸职业学院计算机工程学院联合打造的华为云计算HCIE订单班传来喜讯。在该订单班中&#xff0c;首批参与HCIE实验考试的9名学生凭借扎实的专业知识和优秀的技能水平&#xff0c;全员顺利通过实验考试&#xff0c;通过率达到100%&#xff0c;体…

yolov8 剪枝

yolov8n 初始&#xff1a; YOLOv8n summary (fused): 185 layers, 3151904 parameters, 31936 gradients, 8.7 GFLOPs

正信晟锦:怎么追回欠债多年的钱

在这个世界上&#xff0c;最轻松的或许就是借钱时的许诺&#xff0c;而最难的&#xff0c;莫过于债务回收时的争取。尤其是在牵涉到追回那些欠债多年的旧账时&#xff0c;我们似乎总能更深地体会到“时间是把杀猪刀”的无奈。如何巧妙地追回这些遥不可及的欠款?这既是一场策略…

CSP - S 2024 模拟赛6补题报告

C S P − S 2024 模拟赛 6 补题报告 2024 年 8 月 5 日 − 2023 年 8 月 5 日 b y 邓时飏 CSP \ - \ S \ \ 2024 \ \ 模拟赛6 \ \ 补题报告 \\ 2024年8月5日 - 2023年8月5日 \\ by \ \ \ 邓时飏 CSP − S 2024 模拟赛6 补题报告2024年8月5日−2023年8月5日by 邓时飏 一、…