javascript - 为什么 div 没有出现在我右键单击的位置?

标签 javascript html css events mouse

你能告诉我为什么 div 没有出现在我点击的地方吗?它仅出现在左上角。

CSS:

#palette {
    display: none;
    width: 20px;
    height: 20px;
    background-color: red;
}

HTML:

<div id="palette"></div>

Javascript:

window.addEventListener('contextmenu', function(ev) {
  ev.preventDefault();
  document.getElementById('palette').setAttribute('left', ev.pageX);
  document.getElementById('palette').setAttribute('top', ev.pageY);
  document.getElementById('palette').setAttribute('position', 'absolute');
  document.getElementById('palette').style.display = 'block';
  return false;
}, false);

这是 fiddle :

https://jsfiddle.net/0rL9neeL/

编辑:抱歉,好像我还没有解释一个问题:是的,这是右键单击。这就是 div 应该出现的地方。

最佳答案

您可以使用 ev.clientXev.clientY 获取坐标(以 CSS 像素为单位返回相对于视口(viewport)的坐标),然后只需设置使用 javascript 的样式。你可以这样做:

var element = document.getElementById('palette');

window.addEventListener('contextmenu', function(ev) {
  ev.preventDefault();
  var x = ev.clientX;
  var y = ev.clientY;
  element.style.display = 'block';
  element.style.left = x + "px";
  element.style.top = y + "px";

  return false;
}, false);
#palette {
  display: none;
  width: 20px;
  height: 20px;
  background-color: red;
  position: absolute;
}
<div id="palette"></div>

您的代码存在的问题是您使用的是 setAttribute,它将属性设置为 DOM 元素,而不是内联 CSS。

关于javascript - 为什么 div 没有出现在我右键单击的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41251674/

相关文章:

javascript - 是否可以使用 TypeScript 将 HTML 中的 div 设为 "Pre-render"?

jquery 'hover mouseover' 函数跳跃

php - 从数据库中检索时显示多行文本

javascript - React - 像书页一样的 CSS Transition

html - 了解为什么表格单元格不包含其 100% 高度内容

javascript - 类型错误 : props is undefined

javascript - 如何将函数移动到 MVVM 中的单独文件?

javascript - 无法使用方法 : browser. click 和 xpath://input[2] 单击元素

html - 如何使用 flexbox 获得三列两行 (1 x 2 x 2)

使 Gif 在悬停区域外播放的 CSS 代码