如何使我的javascript动画更快?
我制作了一个Vue组件,在X轴上制作一个div循环。但我注意到它使用了大量的CPU。我像我想的那样工作,但我想优化它。如何使我的动画速度更快。galeryItems在x轴上移动,当它们达到其父div的宽度时,它们会移动到另一侧。所以,这个循环一直在循环。我宁愿不使用外部插件如何使我的javascript动画更快?,javascript,html,css,vue.js,css-transitions,Javascript,Html,Css,Vue.js,Css Transitions,我制作了一个Vue组件,在X轴上制作一个div循环。但我注意到它使用了大量的CPU。我像我想的那样工作,但我想优化它。如何使我的动画速度更快。galeryItems在x轴上移动,当它们达到其父div的宽度时,它们会移动到另一侧。所以,这个循环一直在循环。我宁愿不使用外部插件 <template> <div class="placeholder"> <div class="galery" ref="galery"> <
<template>
<div class="placeholder">
<div class="galery" ref="galery">
<div class="galery-item" v-for="i in 10" :key="i" ref="galeryItems" />
</div>
</div>
</template>
<script>
export default {
props:{
xoffset : {
type: Number,
default: 0,
},
speed : {
type: Number,
default: 1,
},
spaceBetween : {
type: Number,
default: 50,
},
},
data() {
return {
}
},
mounted(){
for(let i = 0; i < this.$refs.galeryItems.length; i++)
this.$refs.galeryItems[i].style.transform = 'translateX(' + (this.$refs.galeryItems[i].clientWidth + this.spaceBetween) * i + 'px)';
this.animate();
},
methods:{
animate(){
window.requestAnimationFrame(this.animate);
for(let i = 0; i < this.$refs.galeryItems.length; i++)
{
let galeryItemRect = this.$refs.galeryItems[i].getBoundingClientRect();
if(galeryItemRect.x > this.$refs.galery.clientWidth)
{
this.$refs.galeryItems[i].style.transform = 'translateX(' + -galeryItemRect.width + 'px)';
continue;
}
this.$refs.galeryItems[i].style.transform = 'translateX(' + (galeryItemRect.x + this.speed) + 'px)';
}
}
}
}
</script>
<style lang="scss" scoped>
.placeholder{
height: 100vh;
display: flex;
align-items: center;
}
.galery
{
position: relative;
background-color: green;
height: 100px;
width: 100%;
overflow: hidden;
}
.galery-item{
display: block;
position: absolute;
background-color: black;
height: inherit;
min-width: 100px;
transition: 0s;
}
</style>
导出默认值{
道具:{
xoffset:{
类型:数字,
默认值:0,
},
速度:{
类型:数字,
默认值:1,
},
间隔:{
类型:数字,
默认值:50,
},
},
数据(){
返回{
}
},
安装的(){
对于(设i=0;ithis.$refs.galery.clientWidth)
{
此.refs.galeryItems[i].style.transform='translateX('+-galeryItemRect.width+'px');
继续;
}
this.$refs.galerietems[i].style.transform='translateX(+(galerietemrect.x+this.speed)+'px');
}
}
}
}
.占位符{
高度:100vh;
显示器:flex;
对齐项目:居中;
}
加利先生
{
位置:相对位置;
背景颜色:绿色;
高度:100px;
宽度:100%;
溢出:隐藏;
}
.galery项目{
显示:块;
位置:绝对位置;
背景色:黑色;
身高:继承;
最小宽度:100px;
转换:0s;
}
尝试使用性能和质量更好的外部插件,在vue.js
中使用以下链接中的框架选项,如v-animate
和transition
:
尝试使用性能和质量更好的外部插件,在
vue.js
中使用以下链接中的框架选项,如v-animate
和transition
:
但是如何使用vue.js转换制作无限动画?插入以下内容:动画迭代计数:无限;在enter和leave标记中,但如何使用vue.js转换制作无限动画?插入以下内容:动画迭代计数:无限;进入并离开标签