在Javascript

时间:2017-10-11 02:29:17

标签: javascript object dom

我点击时实例化一个新的Vimeo对象。这允许我使用事件目标来获取videoUrl,具体取决于单击的元素。然后vimeo api自动创建一个带有视频嵌入的iframe。问题是,一旦创建了Vimeo播放器,我就无法销毁它并使用另一个videoUrl重新创建它。它一直停留在我点击的第一个元素上。如果我刷新并单击另一个元素,它将与新的videoUrl一起使用,这意味着它适用于我选择的任何元素,但只适用于第一次单击。我猜这是一个我不熟悉的JS问题。我习惯使用C ++,我们可以使用指针来解决这类问题。我很感激任何建议。

function openModal(e) {
    var modal = document.getElementById('Modal');
    var videoUrl = e.target.dataset.videoLink;
    //JS Player Code
    alert(e.target.dataset.videoLink);
    var options = {
        url: videoUrl,
        width: 640,
        loop: false
    };
    var player = new Vimeo.Player('Modal', options);
    modal.style.display = "block";
    //Doesn't seem to do anything
    delete player;
}

1 个答案:

答案 0 :(得分:0)

与C ++不同,JavaScript有一个垃圾收集器,您无需管理内存。 JS中的delete运算符与C ++中的delete player运算符完全不同。 JS不使用指针,而是使用“手动”无法销毁的“引用”。

现在,我不太明白你做iframe时会发生什么。但我想你想删除display: none(这没有任何意义。)

但无论如何,你有两个选择。你要么

  1. 通过delete
  2. 隐藏CSS
  3. 用新的元素替换元素。
  4. 顺便说一下,JS中的std::map::erase运算符等同于C ++中的{{1}}方法。