Javascript 使用硬件层加速并将正确更改

Javascript 使用硬件层加速并将正确更改,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({

我想使用CSS
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节点集合是否是最佳的?当然,如果可以应用于较少的元素会更好,但是如果您的代码不允许这样做,那么您还能做什么呢?如果你能将项目包装在一个容器中,那会更好。这样我将失去在项目结束时循环项目的选项。。。但是,当元素可见/隐藏时,切换将更改为打开和关闭如何?