gpt4 book ai didi

dart - 通过拖动Dart移动元素

转载 作者:行者123 更新时间:2023-12-03 02:57:15 24 4
gpt4 key购买 nike

我正在尝试使用拖放来移动元素。我希望能够将元素拖到其他位置,然后将其放到其他位置,元素将移到放置的位置。 super 基础,没什么花哨的。这是我到目前为止所拥有的:

的HTML:

<input type='button' id='drag' class='draggable' value='drag me' draggable='true'>

Dart 代码:
Element drag = querySelector('.draggable');
drag.onDragEnd.listen((MouseEvent e) {
drag.style.left = '${e.client.x}px';
drag.style.top = '${e.client.y}px';
});

这并不能完全满足我的要求。该元素与我放下的位置略有不同。我在javascript中看到带有appendChild,clone(),parentNode的示例,但是我见过的所有示例都无法在Dart中复制。做到这一点的最佳方法是什么?我不想使用DND软件包,因为我实际上是想亲自更好地理解这些概念。

最佳答案

index.html

<!doctype html>
<html>
<head>
<style>
#dropzone {
position: absolute;
top: 50px;
left: 50px;
width: 300px;
height: 150px;
border: solid 1px lightgreen;
}
#dropzone.droptarget {
background-color: lime;
}
</style>
</head>
<body>
<input type='button' id='drag' class='draggable' value='drag me'
draggable='true'>

<div id="dropzone"></div>
<script type="application/dart" src="index.dart"></script>
<script src="packages/browser/dart.js"></script>
</body>
</html>

index.dart
library _template.web;

import 'dart:html' as dom;
import 'dart:convert' show JSON;

main() async {
dom.Element drag = dom.querySelector('.draggable');
drag.onDragStart.listen((event) {
final startPos = (event.target as dom.Element).getBoundingClientRect();
final data = JSON.encode({
'id': (event.target as dom.Element).id,
'x': event.client.x - startPos.left,
'y': event.client.y - startPos.top
});
event.dataTransfer.setData('text', data);
});

dom.Element dropTarget = dom.querySelector('#dropzone');
dropTarget.onDragOver.listen((event) {
event.preventDefault();
dropTarget.classes.add('droptarget');
});

dropTarget.onDragLeave.listen((event) {
event.preventDefault();
dropTarget.classes.remove('droptarget');
});

dropTarget.onDrop.listen((event) {
event.preventDefault();
final data = JSON.decode(event.dataTransfer.getData('text'));
final drag = dom.document.getElementById(data['id']);
event.target.append(drag);
drag.style
..position = 'absolute'
..left = '${event.offset.x - data['x']}px'
..top = '${event.offset.y - data['y']}px';
dropTarget.classes.remove('droptarget');
});
}

关于dart - 通过拖动Dart移动元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33360151/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com