Javascript 使用硬件层加速并将正确更改
我想使用CSSJavascript 使用硬件层加速并将正确更改,javascript,html,css,dom,hardware-acceleration,Javascript,Html,Css,Dom,Hardware Acceleration,我想使用CSStranslate3d属性和requestAnimationFrame水平拖动时,在视口中设置100多个DOM元素的动画。例子是 由于这是一个相当大的dom节点集合,因此我仅在轮到它们进入场景时才设置它们的动画,否则我将它们设置为display:none,并且不触摸它们 以下是我的初始化代码: makePoints (num) { for (let i = 0; i < num; i += 1) { this.points.push({
translate3d
属性和requestAnimationFrame
水平拖动时,在视口中设置100多个DOM元素的动画。例子是
由于这是一个相当大的dom节点集合,因此我仅在轮到它们进入场景时才设置它们的动画,否则我将它们设置为display:none
,并且不触摸它们
以下是我的初始化代码:
makePoints (num) {
for (let i = 0; i < num; i += 1) {
this.points.push({
x: i * this.spacing,
y: window.innerHeight / 2 + Math.sin(i * this.spacing) * 100 - 80,
scale: 0.5 + Math.random() * 0.5
});
this.totalWidth += this.spacing;
}
}
makePoints(num){
for(设i=0;i
下面是我的帧更新方法:
update (speed) {
this.points.forEach((p, i) => {
let li = this.domCollection[i];
if (p.x > -this.spacing && p.x < this.width) {
$(li).css({
transform: `
translate3d(${p.x}px, ${p.y}px, 0)
scale(${p.scale}, ${p.scale})
`,
display: 'block'
});
} else {
$(li).css({
display: 'none'
})
}
p.x += -speed;
if (p.x <= -this.width) {
p.x += this.totalWidth;
} else if (p.x >= this.totalWidth - this.width) {
p.x -= this.totalWidth;
}
});
}
更新(速度){
this.points.forEach((p,i)=>{
设li=this.domCollection[i];
如果(p.x>-this.space&&p.x
我的问题是:在这种情况下,我是否正确地利用了硬件加速?当元素第一次进入视口时,translate3d
将在其上使用,此时它将被硬件加速?我应该将设置为“将更改:转换”
,还是在更新显示时打开/关闭它
我很难理解这个“加速”的概念,任何帮助都会让我感激不尽。我认为只要你使用translate3d,它就是在使用硬件加速是的,但这不是滥用硬件加速吗?同时将它应用于如此大的dom节点集合是否是最佳的?当然,如果可以应用于较少的元素会更好,但是如果您的代码不允许这样做,那么您还能做什么呢?如果你能将项目包装在一个容器中,那会更好。这样我将失去在项目结束时循环项目的选项。。。但是当元素可见/隐藏时,切换开关会改变吗?我认为只要你使用translate3d,它就是在使用硬件加速是的,但这不是滥用硬件加速吗?同时将它应用于如此大的dom节点集合是否是最佳的?当然,如果可以应用于较少的元素会更好,但是如果您的代码不允许这样做,那么您还能做什么呢?如果你能将项目包装在一个容器中,那会更好。这样我将失去在项目结束时循环项目的选项。。。但是,当元素可见/隐藏时,切换将更改为打开和关闭如何?