【发布时间】:2015-07-15 03:16:14
【问题描述】:
当用户拖动 DIV 时,我需要设置光标的图标(下例中为红色 div)。
我尝试了几次,包括使用 CSS cursor:move 和 event.dataTransfer.dropEffect 都没有成功,因为图标总是显示一个“交叉的圆圈”。
任何想法如何使用 HTML5 拖放 API 解决此问题?
http://jsbin.com/hifidunuqa/1/
<script>
window.app = {
config: {
canDrag: false,
cursorOffsetX: null,
cursorOffsetY: null
},
reset: function () {
this.config.cursorOffsetX = null;
this.config.cursorOffsetY = null;
},
start: function () {
document.getElementById('target').addEventListener('dragstart', function (event) {
console.log('+++++++++++++ dragstart')
this.config.cursorOffsetX = event.offsetX;
this.config.cursorOffsetY = event.offsetY;
this.adjustPostion(event);
event.dataTransfer.effectAllowed = 'move';
event.dataTransfer.dropEffect = 'move';
}.bind(this));
document.getElementById('target').addEventListener('drag', function (event) {
console.log('+++++++++++++ drag')
this.adjustPostion(event);
}.bind(this));
document.getElementById('target').addEventListener('dragend', function (event) {
console.log('+++++++++++++ dragend')
this.reset();
}.bind(this));;
},
adjustPostion: function (event) {
if (event.pageX <= 0 || event.pageY <= 0) {
console.log('skipped');
return;
}
var elm = document.getElementById('target');
elm.style.left = (event.pageX - this.config.cursorOffsetX) + 'px';
elm.style.top = (event.pageY - this.config.cursorOffsetY) + 'px';
console.log(event.pageX);
console.log(event.pageY);
}
};
</script>
【问题讨论】:
-
mousedown 事件呢?
-
是的 jquery 解决方案也可以。谢谢
-
@Pete 这行得通吗?该元素一直都有
cursor: move !important;样式。在拖动时添加这样的样式似乎不太可能改变行为。 -
@lharby 您的示例未使用 HTML5 拖放 API,这是此特定问题的根源。
-
@GibboK this may help you - 请参阅拖动属性部分。它显示您可以在拖动时添加自己的图标,但它似乎与禁止进入的圆圈一起使用(这可能是强制性的,因为它表明您不允许将对象放在您所在的位置)
标签: javascript jquery css html