javascript - 调用成功后甚至无法点击 SVG 元素

标签 javascript html css

在获得成功加载事件后,我无法点击 svg。有什么线索吗?我正在控制台记录返回的 SVG 对象,但我没有获得任何点击操作。

https://jsfiddle.net/tz2knqhr/


<embed src="https://www.okcode.pl/img/bg-square.svg" id="embed2" width="15%" height="auto" type="image/svg+xml"></embed>


<script>

function resolveAfter() {
  return new Promise(function(resolve,reject){
      window.addEventListener('load',function(){
        let image = document.getElementById("embed2")
          resolve(image);
      })
  });
}

async function asyncCall() {
  console.log('calling');
  const result = await resolveAfter();
  console.log('result',result);
  result.addEventListener('click',function(event){
    console.log("clicked")
    location.href = "http://google.com"
  })
}

asyncCall();

</script>

最佳答案

您需要将您的 embed 包装在一个 object 中,以便它可以接收点击。为确保该对象始终接收到点击事件,我在 embed 调用后为其所有(最终)子对象设置了 pointer-events: none。另请注意,点击事件设置在函数返回(对象)的parentNode 上,而不是embed

function resolveAfter() {
  return new Promise(function(resolve, reject) {
    window.addEventListener('load', function() {
      let image = document.getElementById("embed2")
      resolve(image);
    })
  });
}

async function asyncCall() {
  console.log('calling');
  const result = await resolveAfter();
  console.log('result', result.parentNode);

  result.parentNode.addEventListener('click', function(event) {
    console.log("made it");
    // location.href = "http://google.com"
  })
}

asyncCall();
* {
  box-sizing: border-box;
}

html,
body {
  height: 100vh;
  width: 100vw;
  padding: 0%;
  margin: 0%;
  background-color: white;
}

object {
  display: inline-flex;
}

object * {
  /* ignore clicks to children */
  pointer-events: none;
}

object embed {
  flex: 1;
}
<object style="width: 15%; height: auto;">
  <embed src="https://www.okcode.pl/img/bg-square.svg" id="embed2" width="15%" height="auto" type="image/svg+xml" />
</object>

jsFiddle

关于javascript - 调用成功后甚至无法点击 SVG 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60514171/

相关文章:

javascript - 点击事件时无法上传 dicom 图像 - webMango

Javascript 复选框切换问题

javascript - 用户登录或注销时刷新导航菜单指令

javascript - 是否可以?当鼠标悬停在你的视频上然后播放该视频当鼠标悬停然后停止视频。它看起来像 facebook

javascript - Jquery 用 % 代替 px 进行偏移 - 可能吗?

jquery - 使用 html 中的按钮启用一组文本框

javascript - 将多条记录添加到本地存储

javascript - 如何缩放 iframe 内容(使用所见即所得编辑器嵌入)?

javascript - 具有垂直行的 HTML 表格

javascript - jQuery 幻灯片代码不能完美运行