用dojo.dnd实现拖放功能 - Dojo中文博客 - CSDN博客

  • 格式:doc
  • 大小:17.75 KB
  • 文档页数:16

用dojo.dnd实现拖放功能 - Dojo中文博客 - CSDN博客

用dojo.dnd实现拖放功能

相信很多人都自己动手写过拖放。DHTML里做拖放的原理很简单,一般有这么三个阶段:mousedown 的时候做一些初始化, mousemove 的时候更新拖放对象的位置,

mouseup 的时候再做一些清理工作。讲起来简单,但做起来总要花一些功夫的。 Dojo 的 dnd 模块提供了通用且功能强大的拖放支持,让我们可以不用自己造轮子,而且用起来也很方便。

废话少说,先来看看它到底有多方便。假设页面上有两个ul ,我们需要对 ul 里的 li 元素实现拖放,让它们可以自由地在两个列表间移动。如果自己手写,虽然不难但也要花点时间吧。用 Dojo 的话,除了加载模块之外,甚至连一行

javascript 语句都不需要:

view plaincopy to clipboardprint?

01.<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML

4.01//EN" "/TR/html4/strict.dtd">

02.<html>

03. <head> 04. <meta http-equiv="Content-Type"

content="text/html; charset=iso-8859-1">

05. <title>Untitled Document</title>

06. <style type="text/css">

07. @import

"/ajax/libs/dojo/1.5/dojo/resources/dojo.css";

08. @import

"/ajax/libs/dojo/1.5/dijit/themes/claro/claro.css";

09.

10. ul{

11. border: 3px solid #ccc;

12. padding: 2em;

13. margin: 5em;

14. float: left;

15. cursor: default;

16. }

17. .dojoDndItemOver{

18. background: #ededed;

19. cursor: pointer;

20. } 21. .dojoDndItemSelected {

22. background: #ccf;

23. }

24. .dojoDndItemAnchor{

25. background: #ccf;

26. }

27. </style>

28. <script type="text/javascript"

src="/ajax/libs/dojo/1.5/dojo/dojo.xd.js" djConfig="parseOnLoad: true"></script>

29. <script type="text/javascript">

30. dojo.require("dojo.dnd.Source");

31. </script>

32. </head>

33. <body class="claro">

34. <ul dojoType="dojo.dnd.Source">

35. <li class="dojoDndItem">Item

1</li>

36. <li class="dojoDndItem">Item

2</li>

37. <li class="dojoDndItem">Item

3</li> 38. <li class="dojoDndItem">Item

4</li>

39. <li class="dojoDndItem">Item

5</li>

40. </ul>

41. <ul dojoType="dojo.dnd.Source">

42. <li class="dojoDndItem">Item

A</li>

43. <li class="dojoDndItem">Item

B</li>

44. <li class="dojoDndItem">Item

C</li>

45. <li class="dojoDndItem">Item

D</li>

46. <li class="dojoDndItem">Item

E</li>

47. </ul>

48. </body>

49.</html>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML

4.01//EN" "/TR/html4/strict.dtd">

<html> <head>

<meta http-equiv="Content-Type" content="text/html;

charset=iso-8859-1">

<title>Untitled Document</title>

<style type="text/css">

@import

"/ajax/libs/dojo/1.5/dojo/resources/dojo.css";

@import

"/ajax/libs/dojo/1.5/dijit/themes/claro/claro.css";

ul{

border: 3px solid #ccc;

padding: 2em;

margin: 5em;

float: left;

cursor: default;

}

.dojoDndItemOver{

background: #ededed;

cursor: pointer; }

.dojoDndItemSelected {

background: #ccf;

}

.dojoDndItemAnchor{

background: #ccf;

}

</style>

<script type="text/javascript"

src="/ajax/libs/dojo/1.5/dojo/dojo.xd.js" djConfig="parseOnLoad: true"></script>

<script type="text/javascript">

dojo.require("dojo.dnd.Source");

</script>

</head>

<body class="claro">

<ul dojoType="dojo.dnd.Source">

<li class="dojoDndItem">Item 1</li>

<li class="dojoDndItem">Item 2</li>

<li class="dojoDndItem">Item 3</li>

<li class="dojoDndItem">Item 4</li>

<li class="dojoDndItem">Item 5</li> </ul>

<ul dojoType="dojo.dnd.Source">

<li class="dojoDndItem">Item A</li>

<li class="dojoDndItem">Item B</li>

<li class="dojoDndItem">Item C</li>

<li class="dojoDndItem">Item D</li>

<li class="dojoDndItem">Item E</li>

</ul>

</body>

</html>

这个例子用了host在google的dojo1.5版本,可以直接运行。这里唯一需要写的javascript 语句就是加载

dojo.dnd.Source 类。剩下的就是在要拖放的对象上做一些标记,用html和 CSS class 就行了。而且 Dojo 为拖放对象添加的 CSS class 非常丰富,让我们能自由定制它们的外观。

Fig.1: Source内部DnD

Fig.2: Source之间DnD