xc-app/pages/index/components/line.vue

163 lines
6.9 KiB
Vue

<template>
<!-- <img :src="currentImgSrc" mode="" class="line-img" /> -->
<div>
<img class="line-img" :src="currentImgSrc" alt="" />
<img class="line-img" v-for="(imgSrc, index) in imgList" :key="index" :src="imgSrc" alt="" style="display: none;" />
</div>
</template>
<script>
export default {
data() {
return {
delay: 40,
currentFrameIndex: 0,
imgList: ['static/an/xian/0.png', 'static/an/xian/1.png', 'static/an/xian/2.png', 'static/an/xian/3.png',
'static/an/xian/4.png', 'static/an/xian/5.png', 'static/an/xian/6.png', 'static/an/xian/7.png',
'static/an/xian/8.png', 'static/an/xian/9.png', 'static/an/xian/10.png', 'static/an/xian/11.png',
'static/an/xian/12.png', 'static/an/xian/13.png', 'static/an/xian/14.png', 'static/an/xian/15.png',
'static/an/xian/16.png', 'static/an/xian/17.png', 'static/an/xian/18.png', 'static/an/xian/19.png',
'static/an/xian/20.png', 'static/an/xian/21.png', 'static/an/xian/22.png', 'static/an/xian/23.png',
'static/an/xian/24.png', 'static/an/xian/25.png', 'static/an/xian/26.png', 'static/an/xian/27.png',
'static/an/xian/28.png', 'static/an/xian/29.png', 'static/an/xian/30.png', 'static/an/xian/31.png',
'static/an/xian/32.png', 'static/an/xian/33.png', 'static/an/xian/34.png', 'static/an/xian/35.png',
'static/an/xian/36.png', 'static/an/xian/37.png', 'static/an/xian/38.png', 'static/an/xian/39.png',
'static/an/xian/40.png', 'static/an/xian/41.png', 'static/an/xian/42.png', 'static/an/xian/43.png',
'static/an/xian/44.png', 'static/an/xian/45.png', 'static/an/xian/46.png', 'static/an/xian/47.png',
'static/an/xian/48.png', 'static/an/xian/49.png', 'static/an/xian/50.png', 'static/an/xian/51.png',
'static/an/xian/52.png', 'static/an/xian/53.png', 'static/an/xian/54.png', 'static/an/xian/55.png',
'static/an/xian/56.png', 'static/an/xian/57.png', 'static/an/xian/58.png', 'static/an/xian/59.png',
'static/an/xian/60.png', 'static/an/xian/61.png', 'static/an/xian/62.png', 'static/an/xian/63.png',
'static/an/xian/64.png', 'static/an/xian/65.png', 'static/an/xian/66.png', 'static/an/xian/67.png',
'static/an/xian/68.png', 'static/an/xian/69.png', 'static/an/xian/70.png', 'static/an/xian/71.png',
'static/an/xian/72.png', 'static/an/xian/73.png', 'static/an/xian/74.png', 'static/an/xian/75.png',
'static/an/xian/76.png', 'static/an/xian/77.png', 'static/an/xian/78.png', 'static/an/xian/79.png',
'static/an/xian/80.png', 'static/an/xian/81.png', 'static/an/xian/82.png', 'static/an/xian/83.png',
'static/an/xian/84.png', 'static/an/xian/85.png', 'static/an/xian/86.png', 'static/an/xian/87.png',
'static/an/xian/88.png', 'static/an/xian/89.png', 'static/an/xian/90.png', 'static/an/xian/91.png',
'static/an/xian/92.png', 'static/an/xian/93.png', 'static/an/xian/94.png', 'static/an/xian/95.png',
'static/an/xian/96.png', 'static/an/xian/97.png', 'static/an/xian/98.png',
'static/an/xian/99.png','static/an/xian/100.png','static/an/xian/101.png','static/an/xian/102.png','static/an/xian/103.png','static/an/xian/104.png','static/an/xian/105.png','static/an/xian/106.png','static/an/xian/107.png','static/an/xian/108.png','static/an/xian/109.png',
],
timer:null
}
},
computed: {
// currentImgSrc() {
// return `${this.basePath}${this.currentFrame}.png`;
// },
currentImgSrc() {
return this.imgList[this.currentFrameIndex];
}
},
mounted() {
// this.animateFrames();
this.startAnimation();
},
methods: {
startAnimation() {
this.timer = setInterval(() => {
this.currentFrameIndex = (this.currentFrameIndex + 1) % this.imgList.length;
}, this.delay);
},
// animateFrames() {
// const img = document.querySelector(".line-img");
// const animation = () => {
// // 切换到下一帧图片
// this.currentFrame = (this.currentFrame + 1) % this.imgCount;
// // 如果当前帧已加载过,则直接跳过
// if (this.loadedFrames.includes(this.currentFrame)) {
// return;
// }
// img.src = `${this.basePath}${this.currentFrame}.png`;
// img.onload = () => {
// // 将已加载的图片索引存入数组
// this.loadedFrames.push(this.currentFrame);
// };
// };
// setInterval(animation, this.delay);
// },
// animateFrames() {
// setInterval(() => {
// this.currentFrame = (this.currentFrame + 1) % this.imgCount;
// }, this.delay);
// },
// animateFrames() {
// const img = document.querySelector(".line-img");
// const animation = () => {
// // 切换到下一帧图片
// this.currentFrame = (this.currentFrame + 1) % this.imgCount;
// // 如果当前帧已加载过,则直接跳过
// if (this.loadedFrames.includes(this.currentFrame)) {
// return;
// }
// img.src = `${this.basePath}${this.currentFrame}.png`;
// img.onload = () => {
// // 将已加载的图片索引存入数组
// this.loadedFrames.push(this.currentFrame);
// };
// };
// // 清除之前的定时器
// clearInterval(this.animationInterval);
// // 启动新的定时器
// this.animationInterval = setInterval(animation, this.delay);
// },
animateFrames() {
const img = document.querySelector(".line-img");
const animation = () => {
// 切换到下一帧图片
this.currentFrame = (this.currentFrame + 1) % this.imgCount;
// 如果当前帧已加载过,则直接跳过
if (this.loadedFrames.includes(this.currentFrame)) {
return;
}
img.onload = () => {
// 将已加载的图片索引存入数组
this.loadedFrames.push(this.currentFrame);
// 等待当前图片加载完成后再启动下一帧动画
this.animationInterval = setTimeout(() => {
animation();
}, this.delay);
};
img.src = `${this.basePath}${this.currentFrame}.png`;
};
// 启动动画
animation();
},
},
onUnload() {
// 在页面离开时清除定时器
clearInterval(this.timer)
},
beforeDestroy() {
// 组件销毁时清除定时器,防止内存泄漏
// clearInterval(this.animationInterval);
},
// mounted() {
// const img = document.getElementsByClassName("line-img")[0]
// const delay = 40
// const imgCount = 109
// const animationLine = (i) => {
// if (i === imgCount) {
// animationLine(0)
// return
// }
// img.src = `static/an/xian/${i}.png`
// img.onload = () => {
// setTimeout(() => {
// animationLine(i + 1)
// }, delay);
// }
// }
// animationLine(0)
// }
}
</script>
<style lang="scss" scoped>
.line-img {
width: 100%;
// height: 500rpx;
object-fit: contain;
}
</style>