Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Vue.js中使用javascript避免克隆节点内存泄漏_Javascript_Html - Fatal编程技术网

如何在Vue.js中使用javascript避免克隆节点内存泄漏

如何在Vue.js中使用javascript避免克隆节点内存泄漏,javascript,html,Javascript,Html,作为标题状态,我想避免我的函数出现内存泄漏,但我对如何实现这一点感到非常困惑。目前,在我的过程中,我在表td中做了一个无限循环,但我刚刚意识到,如果我只使用这个,它可以添加一个无限,我想避免它,我尝试让这样的伪代码实现我想要的: 1. Add An Original Item to a temporary variable 2. Assign it and then destroy the earliest one, so it can only loop in index [1,2,3] wh

作为标题状态,我想避免我的函数出现内存泄漏,但我对如何实现这一点感到非常困惑。目前,在我的过程中,我在
表td
中做了一个无限循环,但我刚刚意识到,如果我只使用这个,它可以添加一个无限
,我想避免它,我尝试让这样的伪代码实现我想要的:

1. Add An Original Item to a temporary variable
2. Assign it and then destroy the earliest one, so it can only loop in index [1,2,3] where
-- index 1 = is a prev
-- index 2 = is what we see
-- index 3 = is a next
3. every cloned aside from this 3 index
但我对如何实现这一目标感到困惑。这是我实现它的javascript代码:

    itemSlider() {
      let autoScroller = document.getElementById("customWrapper");
      let item = autoScroller.getElementsByTagName("td");
      let originalLength = item.length;
      let multiplier = 0;
      let imgScaller = 0;
      let index = 0;
      let temp = [];
      setInterval(function() {
        if (item[imgScaller + 1].classList != undefined) {
          autoScroller.style.transform = `translateX(${-380 * multiplier}px)`;
        }

        if (imgScaller - 1 != -1 && imgScaller != 0) {
          let firstSlide = item[imgScaller - 1];
          let cloneFirst = firstSlide.cloneNode(true);
          autoScroller.appendChild(cloneFirst);
        }

        if (imgScaller) {
          item[imgScaller + 1].classList.add("active");
        }
        if (imgScaller - 1 != -1) {
          item[imgScaller].classList.remove("active");
          item[imgScaller - 1].classList.remove("active");
        }

        multiplier++;
        imgScaller++;

        console.log("Cek before : ", multiplier);
        console.log("Cek original length : ", originalLength);

        if (multiplier % originalLength == 0) {
          // I just wondering maybe I can input the logic after check it with modulo in here
          // But it seems I got confused as how to achieve it
          autoScroller.remove();
        }
      }, 3000);
    }

对于可能认为这是重复的您,作为参考,我已经在这里尝试了几个主题,但仍然未能实现:


  • 有人能帮我解决这个问题吗?

    你可以试试这样的方法:

    函数removeCells(){
    const container=document.querySelector('tr');
    const cells=document.querySelectorAll('td');
    for(设i=0;i<6;i++){
    container.removeChild(单元格[i])
    }
    }
    
    测试
    测试
    测试
    测试
    测试
    测试
    测试
    测试
    测试
    测试
    测试
    测试
    测试
    测试
    测试
    测试
    测试
    测试
    
    删除单元格
    你只是想停止
    setInterval()
    ?不是这样,我还是想让interval工作,只要你还在这个页面上,它只是,
    标记会克隆,只要interval工作,当我看到它时,首先,假设我有大约6个,但我能在达到24个之后删除最早的一个吗?就像每18个一样,它会删除最早的6个,类似的东西,所以当我签入元素开发工具时,它直到数百个
    ,如果用户打开页面很长一段时间,因为它会使组件变得滞后,一旦达到一定数量的
    td
    s,您可以使用
    clearInterval()
    ?但是如果我使用
    clearInterval()
    ,它不会使我的旋转木马停止吗?而不是无限循环哦,我明白你的意思
    clearInterval
    在这种情况下不起作用谢谢你的回答,当我尝试使用它时,我成功地删除了最旧的一个,但另一个问题出现了,我删除它后得到了未定义的
    classList
    这是我的沙盒更新我的答案的链接,如果不是你想要的,请在我尝试你的答案时告诉我,这不完全是我想要的,但在我稍微调整一下之后,我认为它符合您的逻辑,当我尝试它时,它解决了内存泄漏的问题,谢谢^^