大家好,我有以下问题:
每当我拖动一个元素时,它就会闪烁,看起来非常烦人。 我找不到问题的根源。
下面是我的代码片段:
moveElement(element, e) {
let clientX = e.clientX;
let clientY = e.clientY;
let offsetX = e.offsetX;
let offsetY = e.offsetY;
let height = element.getBoundingClientRect().height;
let width = element.getBoundingClientRect().width;
window.requestAnimationFrame(function() {
element.style.setProperty("left", clientX - (width - offsetX) + "px");
element.style.setProperty("top", clientY - (height - offsetY) + "px");
});
}
下面是他的完整代码:
null
class Dragger{
constructor() {
this.drags = [];
this.drops = [];
this.mover = null;
this.collectDragAndDrop();
}
dragItem(element) {
element.style.setProperty("position", "fixed");
this.mover = this.moveElement.bind(null, element);
element.addEventListener("mousemove", this.mover);
}
moveElement(element, e) {
let clientX = e.clientX;
let clientY = e.clientY;
let offsetX = e.offsetX;
let offsetY = e.offsetY;
let height = element.getBoundingClientRect().height;
let width = element.getBoundingClientRect().width;
window.requestAnimationFrame(function() {
element.style.setProperty("left", clientX - (width - offsetX) + "px");
element.style.setProperty("top", clientY - (height - offsetY) + "px");
});
}
dropItem(element) {
element.removeEventListener("mousemove", this.mover);
}
collectDragAndDrop() {
document.querySelectorAll("[drag]").forEach(element => {
let name = element.attributes.drag.nodeValue;
let findDup = this.drags.some(el => el.name === name);
if (findDup) throw Error("Duplicated drag attribute: " + name);
this.drags.push({
element,
name
});
element.addEventListener("mousedown", this.dragItem.bind(this, element));
element.addEventListener("mouseup", this.dropItem.bind(this, element));
});
}
}
new Dragger();
.box1 {
background: black;
width: 100px;
height: 100px;
color: white;
}
.box2 {
background: red;
width: 100px;
height: 100px;
position: fixed;
right: 100px;
}
<div class="box1" drag="test"></div>
<div class="box2" drag="test2"></div>
null
谁能告诉我为什么这个闪烁这么多?
你的数学很不正常。 您只计算当前鼠标的位置,而不是计算已经发生的移动量。 你的盒子移动的唯一原因是因为函数正在等待动画帧,所以在等待的时候这些坐标会发生一些变化。
您还应该考虑到,如果mouseup发生时鼠标不再位于元素上,则元素将不会获得事件,因此当您将鼠标移回到元素上时,元素将继续拖动。 最好设置一个跟踪鼠标状态的标志。
null
var isMouseDown = false;
addEventListener("mousedown", ()=>isMouseDown = true);
addEventListener("mouseup", ()=>isMouseDown = false);
var mouseOffset = null;
document.querySelectorAll("[drag]").forEach(element=>{
element.addEventListener("mousemove", e=>{
if(!isMouseDown) return;
window.requestAnimationFrame(function() {
var rect = element.getBoundingClientRect();
element.style.left = rect.x + e.movementX + "px";
element.style.top = rect.y + e.movementY + "px";
});
});
});
css prettyprint-override">.box1 {
background: black;
width: 100px;
height: 100px;
color: white;
position: absolute
}
.box2 {
background: red;
width: 100px;
height: 100px;
position: fixed;
right: 100px;
}
<div class="box1" drag="test"></div>
<div class="box2" drag="test2"></div>
我有一个非常奇怪的问题,当我把一个项目从计划外的游戏桶拖到一个网格中时,你可以看到可拖动的项目被切断,大约80%的时间都是在这个区域上拖动的。 当计划外游戏中的项目溢出时,滚动条会出现这种情况。否则,拖动时不会切断。在网格中的游戏之间也可以找到拖放工作。 这只发生在Chrome中。Firefox和Edge运行良好。我真的不知道要显示什么JS或CSS,因为它可以是任何东西。 另外,当我像下面的屏幕一
你好,堆栈溢出,目前正在处理一个需要拖动元素的任务;不是本机API所做的图像拖动,而是拖动实际的元素。元素应该显示一个要删除的位置框,并在将其拖过一个区域时更改其自身的内部内容,该区域将在删除时删除该元素。到目前为止,我发现了这个有用的指令,帮助我做到这一点https://xieziyu.github.io/angular2-draggable/#/usage/basic 问题是,一旦元素通过某个
我有以下HTML结构,并将dragenter和dragleave事件附加到
我正在使用本机拖放html5 api开发拖放界面。我们已经在其他部分使用了jQuery拖动,但是它在这个特定部分的表现很差,所以我们使用原始的JavaScript。 本质上,标记看起来像这样... 我为“dragstart”创建一个addEventListener并运行以下函数 它将我的类完美地应用于原始元素,但我似乎不能移动原始元素。浏览器创建克隆/幽灵图像...我看到你可以创建自己的图像显示,
问题内容: 总览 我具有以下HTML结构,并且将和事件附加到了元素上。 问题 当我将文件拖到时,事件将按预期触发。但是,当我将鼠标移到子元素(例如)上时,会为该元素触发该事件,然后为该元素触发该事件。 如果我再次将鼠标悬停在该元素上,则再次触发该事件,这很酷,但是随后为刚刚剩下的子元素触发了该事件,因此执行了该指令,这并不酷。 此行为有问题的原因有两个: 我只附加&,所以我不明白为什么子元素也要附
如何在拖动时更改可拖动元素的文本,我有来自cdk/拖放库的代码片段。它为在拖动时捕捉事件提供参数。我可以通过本机元素进行更改,但它会更改所有样式,而且我还需要在dragover或其他操作上设置另一个事件。如果要在拖动元素上放置随机文本,有哪些选项? 在Html 在TS
我正在玩cdk拖放功能,因为我需要它来创建一个用于工作的POC。我从文档网站开始使用这段代码。我看到每次我把一个元素拖到它的列表之外时,这个元素都是隐藏的,直到我把它放到同一个列表或另一个列表中。 如果我错了,请告诉我,但是拖动的元素似乎不是列表项的副本,而是元素本身。 总之,我希望列表在拖动其中一个元素时不要更改其布局。 长话短说: 我在cdk文档中没有找到任何这样做的内容。
我在一个SVG中有一个text元素,我已将jQuery ui应用到该元素中。每当我试图拖动它时,顶部和左侧的CSS属性就会如您所期望的那样发生变化,然而,元素本身并没有移动--它只是停留在原地。 这违背了我所理解的关于定位的一切。它似乎完全忽视了“上”和“左”的规则。 然而,情节变得更加浓重。 我还在同一svg中对图像应用了ui-draggable,它在这方面工作得很好。当我拖动它的时候,它会像预