【问题标题】:How can I trigger modal boxes using the following javascript code?如何使用以下 javascript 代码触发模式框?
【发布时间】:2018-04-17 19:52:46
【问题描述】:

大家好,我需要一点帮助。 所以我的页面上隐藏了模式框,当我使用视频平台 VERSE 点击它们时,它们可以完美运行。

我的问题是:如果我想从页面上的常规链接或按钮调用相同的模式框,如何调用它们。

示例如下: http://digitalfeast.com/clients/nccv/ncc-verse.html

这是我的 Javascript 代码:

(function() {
(function() {
  window.onload = function() {

    var frame = document.getElementsByName("verse-iframe")[0].contentWindow;

    // Variables below (i.e. "menu-1") reference div id from your markup
    function receiveMessage(event) {

      var data = (typeof event.data === "String") ? JSON.parse(event.data) : event
      var modalWindow1 = document.getElementById("ruben-1");
      var modalWindow2 = document.getElementById("ruben-2");
      var modalWindow3 = document.getElementById("menu-3");
      var modalWindow4 = document.getElementById("menu-4");

      // Variables below (i.e. "menu-1") reference the unique callback names entered for your hotspots in the Verse editor
      if (data.data["identifier"] === "ruben-1") {
        modalWindow1.style.display = "block";
      }
      if (data.data["identifier"] === "ruben-2") {
        modalWindow2.style.display = "block";
      }
      if (data.data["identifier"] === "menu-3") {
        modalWindow3.style.display = "block";
      }
      if (data.data["identifier"] === "menu-4") {
        modalWindow4.style.display = "block";
      }
    }

    var closeBtns = document.getElementsByClassName("modal-close");

    for (var i = 0; i < closeBtns.length; i++) {
      var btn = closeBtns[i];
      btn.onclick = function (event) {
        event.target.parentNode.parentNode.style.display = "none";
        frame.postMessage({action: "play"}, "*");
        };
    }

    window.addEventListener('message', receiveMessage);
    var frame = document.getElementsByName("verse-iframe")[0].contentWindow;

  };
}());
}());

【问题讨论】:

  • 双 IIFE 是怎么回事?里面有一个 onload ......在这段代码 sn-p 中,那些 IIFE 没有为你做任何事情。
  • 同时重新声明frame。剪切-粘贴迷你编辑情况?
  • 嘿,兰迪,你是对的!我将删除双 IIFE,“框架”声明也只是从 SublimeText 中剪切和粘贴。

标签: javascript jquery popup simplemodal


【解决方案1】:

根据您的代码,您需要做的就是使用按钮单击处理程序中的消息传递 API 向窗口发送一条消息。 然后,您的事件侦听器将执行 receiveMessage 函数并为 ruben-1 打开您的模型。

window.onload = () => {
  document.querySelector('[data-modal="ruben-1"]').addEventListener("click", (e) => {
    let postData = {
      identifier: e.target.dataset.modal
    };
    window.postMessage(postData, "*");
  });

  window.addEventListener('message', m => {
    alert(m.data.identifier);
  });
}
&lt;button data-modal="ruben-1"&gt;Ruben-1 Video&lt;/button&gt;

【讨论】:

  • 嘿兰迪,我删除了额外的 IIFE 和“框架声明”。我应该把上面的代码放在哪里?我还应该将 ID# 添加到我的 Call Modal 以调用我的模态框吗?
  • 你说你想“点击一个按钮”来启动模式,所以这段代码会进入你的那个按钮的“点击”处理程序。我将更新我的示例以包含一个代表按钮。
  • 感谢兰迪,非常感谢您的帮助! :P
  • 由于某种原因它不起作用,当我输入: document.querySelector('[data-modal="ruben-1"]').addEventListenter("click", (e)=> { let postData = {identifier:e.target.dataset.modal}; window.postMessage(postData, "*"); } 在 window.onload 中它会自动打开弹出窗口,而无需我点击按钮。
  • 我不知道该告诉你什么。请查看我刚刚添加到答案中的示例并比较您的代码。这是您应该期待的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-24
  • 1970-01-01
  • 2017-03-30
  • 1970-01-01
  • 2021-08-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多