javascript - 如何隐藏指针事件但仍然能够启动拖动事件?

标签 javascript css

我制作了一个简单的图像裁剪器,您可以将绿色框(要裁剪的区域)移到红色框(原始图像)上。在这里:

var crop = document.querySelector(".image .crop");

crop.addEventListener("drag", function() {
  var mouseoffset = [event.clientX, event.clientY];
  crop.style.left = mouseoffset[0] + "px";
  crop.style.top = mouseoffset[1] + "px";
});
crop.addEventListener("dragend", function() {
  var mouseoffset = [event.clientX, event.clientY];
  crop.style.left = mouseoffset[0] + "px";
  crop.style.top = mouseoffset[1] + "px";
});
.image {
  position:   relative;
  width:      400px;
  height:     400px;
  overflow:   hidden;
  background: #C00;
}

.image .crop {
  position:   absolute;
  width:      150px;
  height:     150px;
  background: rgba(64,168,36,1);
}
<div class="image">
  <div class="crop" draggable="true"></div>
</div>

但是有一个问题:拖动时您会注意到一个淡绿色的框。我可以使用 pointer-events: none 隐藏它,但这会使框不可拖动。有什么方法可以隐藏这个淡绿色框,同时仍然能够拖动裁剪区域吗?

最佳答案

可能有一种方法可以调整您对拖动事件的处理以实现该结果,但我无法让它发挥作用。这里有一些关于相同的事情,但使用 mousedownmouseupmousemove

var crop = document.querySelector(".image .crop");

crop.addEventListener("mousedown", function(event) {
  document.onmousemove = function(event) {
    moveBox(event);
  };
  document.onmouseup = function(event) {
    stopMoving(event);
  }
});

function moveBox(event) {
  event.preventDefault();
  var mouseoffset = [event.clientX, event.clientY];
  crop.style.left = mouseoffset[0] + "px";
  crop.style.top = mouseoffset[1] + "px";
}

function stopMoving(event) {
  document.onmousemove = null;
  document.onmouseup = null;
}
.image {
  position: relative;
  width: 400px;
  height: 400px;
  overflow: hidden;
  background: #C00;
}

.image .crop {
  position: absolute;
  width: 150px;
  height: 150px;
  background: rgba(64, 168, 36, 1);
}
<div class="image">
  <div class="crop" draggable="true"></div>
</div>

关于javascript - 如何隐藏指针事件但仍然能够启动拖动事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54269409/

相关文章:

javascript - 如何找到在浏览器中禁用 JavaScript 的用户数量?

php - 如何创建一个 HTML/PHP 表单,其中文本输入字段并排水平对齐

javascript - Nativescript - 如何禁用返回键以在可编辑的 TextView 中添加换行符

.net - 让 .NET 中的 SlowAES 和 RijndaelManaged 类一起玩

asp.net-mvc - .NET MVC : How to implement different page appearance per user?

javascript - 一种无需为不同 ID 创建不同功能即可访问所有表单元素的方法

html - 在列中打破 UL(为清楚起见进行了编辑)

javascript - 如何动态地为网页中的 svg 图像着色?

javascript - 使用 CSS transition 和 class toggle 显示/隐藏表格行

javascript - JavaScript 客户端 ORM 的框架?