掌握Dojo工具包,第4部分:Dojo中的拖拽

Dojo 支持的两种拖拽方式

在开始尝试了解实现 Dojo 拖拽效果的使用方法以前,首先必须明确拖拽具有两种截然不同的表现效果。

第一种表现效果是图标被拖拽到哪里,其就会被直接放到哪里,这个拖拽效果是图标完全紧跟拖拽的动作,与每一个拖拽动作的运动轨迹完全契合,这种效果被称为 “拖动”。第二种表现效果是当图标被拖拽到一个地方,松开鼠标的时候,图标会以当前位置为基础而以其它图标为参照系进行位置的自动调整。这种效果被称为 “拖放”。

Dojo 的拖动

“拖动”与“拖放”相比较,原理更加容易理解,使用更加简单。而且更加贴近于人们直观印象中的“拖拽”效果。

最简单的拖动实例

要在 Dojo 的支持下,实现拖动的效果所需要的只是使用 Dojo 所提供的 Dojo 标签属性标注出希望实现拖动效果的实体。简单的说,就是如果希望一个实体可以拖动,则只需要在这个实体的标签里面加上 dojoType=“dojo.dnd.Moveable”这个属性。例如要实现一个表格的拖动,则只需要在这个表格的声明标签“<table& gt;”里加上 dojoType=“dojo.dnd.Moveable”这个属性。甚至就是在“<tr>”或“<td>”标签中加上 dojoType=“dojo.dnd.Moveable”,也可以实现对应实体的拖动效果。

清单 1

<script type="text/javascript">
dojo.require("dojo.dnd.move"); //引入Dojo的拖动功能模块 
dojo.require("dojo.parser"); //引入解析Dojo标记的功能模块 
</script>

<table dojoType="dojo.dnd.Moveable">
<tbody><tr><td>Haha, I am a good guy.</td></tr></tbody>
</table>
<!--引入dojoType="dojo.dnd.Moveable",让上面的表格可以拖动--> 

需要注意的是静态创建可拖动实体需要引入 dojo.require("dojo.parser") 。

动态实现可拖动实体

在清单 1 中,通过在一些实体的标签里面加上相应的 Dojo 标签属性来实现可拖动实体的创建。这种静态实现可拖动实体的方法简单明了。但是在更多的情况下,往往需要根据一些实际情况运行得到的数据来动态的创建可拖动实体。在这种情况下,静态实现可拖动实体的方法就不能满足当下的需求。值得庆幸的是 Dojo 对于所有静态实现的方法都基本对应有一套相应的动态实现方法。

清单 2

<script type="text/javascript" src="dojo_path/dojo/dnd/move.js"></script>
 <script type="text/javascript">
 dojo.require("dojo.dnd.move");
 var m1;
 var init = function(){
 m1 = new dojo.dnd.Moveable("bad",{});//申明 id 为 "bad" 的实体为可拖动实体 
 };
 dojo.addOnLoad(init);// 表示在页面加载完成以后,执行 init 函数 
 </script>

 <div id="bad">
 You can cop me "Haha, I am a bad guy."
 </div>

需要注意的是 dojo.dnd.Moveable("bad",{}) 中的大括号用来设置可拖动实体“bad”的一些与拖动相关的属性,目前可以暂时设为空,则不设置任何与拖动相关的属性。在后面的讲述中,一些相关的重要属性将被逐步介绍。

时间: 2024-08-31 13:26:35

掌握Dojo工具包,第4部分:Dojo中的拖拽的相关文章

js-将&amp;amp;lt;li&amp;amp;gt;拖拽到openlayers地图中,拖拽功能失效

问题描述 将<li>拖拽到openlayers地图中,拖拽功能失效 我现在有个功能,是将外部的图片拖拽到openlayers地图中.图片是用一个ztree树状菜单来显示的,利用ztree的拖拽功能将节点拖到地图中,然后在地图中生成一个图标. 在拖拽的时候,只要鼠标不进入openlayers里,拖拽功能就没问题,一旦光标进入到openlayers地图里,拖拽就好像被屏蔽了,有的时候也可以拖动到地图里,但是就好像卡主了一样,很难移动,各位js大神,有知道该怎么解决的吗?请帮忙解决一下. 解决方案

java swing中实现拖拽功能示例_java

java实现拖拽示例 Swing中实现拖拽功能,代码很简单,都有注释,自己看,运行效果如下图: 复制代码 代码如下: package com; import java.awt.*;import java.awt.datatransfer.DataFlavor;import java.awt.dnd.DnDConstants;import java.awt.dnd.DropTarget;import java.awt.dnd.DropTargetAdapter;import java.awt.dn

Android中RecyclerView拖拽、侧删功能的实现代码

废话不多说,下面展示一下效果. 这是GridView主文件实现. public class GridViewActivity extends AppCompatActivity { RecyclerView mRecyclerView; List<String> mStringList; RecyclerAdapter mRecyAdapter; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { s

Word中直接拖拽表格和文件的几个小技巧

计算机办公应用中,我们经常在页面中直接进行拖拽,非常方便.下面我把拖拽边距.表格.文件的几个小技巧介绍给大家. 1.轻松拖拽边距我们平时都是通过在"文件"菜单项中选择"页面设置"来设置页边距.实际上为了灵活地与页面内容相结合,直接拖拽更直观.比如:你若要在八开纸的页面中做几个居中大字,左右居中只需用格式栏中的居中按钮就可以,但要上下居中,就不是很方便了(如图1),若再打一回车,字就跑到下一页,或者会跑到页面下边距处.假如用"文件→页面设置→页边距"

iOS开发拓展篇—xib中关于拖拽手势的潜在错误

一.错误说明 自定义一个用来封装工具条的类 搭建xib,并添加一个拖拽的手势. 主控制器的代码:加载工具条 封装工具条以及手势拖拽的监听事件 此时运行程序,程序直接崩溃,报错如下: 说明:手势不会有superView方法,superView是UIView的方法,说明我们错误的把手势对象当成是UIView来用了. 调试查看出现问题的原因: 出现问题的原因: 说明:通过lastObject取出来的对象是手势,而不是xib,因此出现上面的错误. 把lastObject换成firstObject即可,必

asp.net中Wpf拖拽滑动效果示例

wpf其实支持拖拽是很简单的.使用drag事件或者自定义鼠标事件都是可以实现的. 今天分享一个用鼠标的点击和up事件实现的拖拽滑动效果. 首先在xaml中定义一个ScrollViewer.  代码如下 复制代码 <Window x:Class="Wpf拖拽滑动效果.MainWindow"  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"  xmlns:x="http:

Javascript实例教程:网页中移动拖拽的JS属性

文章简介:做移动.拖动时常用的js属性. 1.clientHeight, clientWidth: 这两个属性大体上显示了元素内容的象素高度和宽度.理论上说这些测量不考虑任何通过样式表加入 元素中的页边距,边框等. 2.clientLeft,clientTop: 这两个返回的是元素周围边框的厚度,如果不指定一个边框或者不定位改元素,他的值就是0. 3.scrollLeft,scrollTop: 如果元素是可以滚动的,可以通过这俩个属性得到元素在水平和垂直方向上滚动了多远,单位是象素. 对于不可以

C#中 label拖拽到PANEL问题

问题描述 想法是这样的.把LABEL控件拖到PANEL控件中..PANEL好办,可以写DRAGDROP事件.来接收拖动.但LABEL不支持拖动啊.触发不了PANEL控件的DRAGDROP.怎么办...求助. 解决方案 解决方案二: 解决方案三:二楼的Link实现拖动,如果还想想Panel那样触发事件的话,先注册this.label.DragDrop+=newSystem.Windows.Forms.DragEventHandler(this.label_DragDrop); 再实现label_D

TreeView控件中实现拖拽的功能

  #region 节点拖拽事件        //当用户开始拖动节点时        private void tvModel_ItemDrag(object sender, ItemDragEventArgs e)        {            TreeNode selectNode = e.Item as TreeNode;            this.tvModel.SelectedNode = selectNode;             this.form.DoDra