实现拖放的步骤,有关的事件,方法

1. 将想要拖放的对象元素的draggable属性设为true(draggable = “true”)。这样才能将元素进行拖放。注意:img元素和a元素(必须指定href)默认允许拖放。

2.编写与拖放有关的事件处理代码。

有关的事件?:

dragstart:网页元素开始拖动时触发。

drag:被拖动的元素在拖动过程中持续触发。dragenter:被拖动的元素进入目标元素时触发,应在目标元素监听该事件。dragleave:被拖 动的元素离开目标元素时触发,应在目标元素监听该事件。dragover:被拖动元素停留在目标元素之中时持续触发,应在目标元素监听该事件。drap: 被拖动元素或从文件系统选中的文件,拖放落下时触发。dragend:网页元素拖动结束时触发。以上这些事件都可以指定回调函数。下面就是一个回调函数的 例子

拖放代码:

每次拖放都会追加一个“我爱你中国”

请拖放

实现init()函数:

function init()

{     var source = document.getElementByIdx_x("dragme");     var dest = document.getElementByIdx_x("text");}

拖放开始:

?source.addEventListener("dragstart", function(ev)

{                // 向dataTransfer对象追加数据                var dt = ev.dataTransfer;                dt.effectAllowed = ‘all‘;                   //(2) 拖动元素为dt.setData("text/plain", this.id);                 dt.setData("text/plain", "我爱你中国");             }, false);

dragend:拖放结束:

? dest.addEventListener("dragend", function(ev)

{       //不执行默认处理(拒绝被拖放)                ev.preventDefault();            }, false);

drop:被拖放:

dest.addEventListener("drop", function(ev)     {

// 从DataTransfer对象那里取得数据                var dt = ev.dataTransfer;                var text = dt.getData("text/plain");                dest.textContent += text;                //(5) 不执行默认处理(拒绝被拖放)                ev.preventDefault();                //停止事件传播                ev.stopPropagation();            }, false);        }

?设置页面属性,不执行默认处理(拒绝被拖放):

document.ondragover = function(e){

e.preventDefault();}; document.ondrop = function(e){                         e.preventDefault();}

?开始拖动(dragstart事件):

把拖动的数据存入DataTransfer(setData()方法)。DataTransfer对象专门用来存储拖放时要携带的数据,它可以被设置为拖放事件对象的dataTransfer属性。

setData有两个参数:第一个参数为携带数据的数据种类的字符串,只能填入类似”text/plain” 或”text/html”的表示MIME类型的文字,不能填入其他文字。第二个参数为要携带的数据

事件对象.preventDefault():

?必须在dragend和dragover事件内调用“事件对象.preventDefault()”方法。因为在默认情况下,拖放的目标元素是不允许接受元素的,为了把元素拖放到其中,必须把默认处理给关掉

目标元素使用getData()方法:

目标元素接受到被拖放的元素后,执行getData()方法从DataTransfer 那里获得数据。

getData()方法的参数为setData()方法中指定的数据类型

注意??

要实现拖放过程,还必须在目标元素的drop事件中关闭默认处理(拒绝被拖放),否则目标元素不能接受被拖放的元素。

要实现拖放过程,还必须设定整个页面为不执行默认处理(拒绝被拖放),否则拖放处理也不能被实现。因为页面是先于其他元素接受拖放的,如果页面拒绝拖放, 那么其他页面上的元素也不能接受拖放。因为这个示例中的数据种类使用了”text.plain”这个MIME类型,也可以从其他使用同样MIME类型的应 用程序中把该类型的数据拖放到目标元素中。

目前支持拖动处理的MIME的类型:text/plain: 文本文字text/html: HTML 文字text/xml: XML文字text/uri-list: URL列表,每个URL为一行

dataTransfer对象:

拖动过程中,回调函数接受的事件参数,有一个dataTransfer属性。它指向一个对象,包含了与拖动相关的各种信息。

draggableElement.addEventListener(‘dragstart‘, function(event) {    event.dataTransfer.setData(‘text‘, ‘Hello World!‘);});上面代码在拖动开始时,在dataTransfer对象上储存一条文本信息,内容为“Hello World”。当拖放结束时,可以用getData方法取出这条信息。

?dataTransfer对象的属性:

dropEffect:拖放的操作类型,决定了浏览器如何显示鼠标形状,可能的值为copy、move、link和none。

effectAllowed:指定所允许的操作,可能的值为copy、move、link、copyLink、copyMove、linkMove、 all、none和uninitialized(默认值,等同于all,即允许一切操作)。files:包含一个FileList对象,表示拖放所涉及的 文件,主要用于处理从文件系统拖入浏览器的文件。types:储存在DataTransfer对象的数据的类型。dataTransfer对象的方 法:setData(format, data):在dataTransfer对象上储存数据。第一个参数format用来指定储存的数据类型,比如text、url、text/html等。 getData(format):从dataTransfer对象取出数据。clearData(format):清除dataTransfer对象所储 存的数据。如果指定了format参数,则只清除该格式的数据,否则清除所有数据。setDragImage(imgElement, x, y):指定拖动过程中显示的图像。默认情况下,许多浏览器显示一个被拖动元素的半透明版本。参数imgElement必须是一个图像元素,而不是指向图像 的路径,参数x和y表示图像相对于鼠标的位置。

?getData,setData方法:

??getData,setData,这两个方法:

1. setData方法在拖放开始时向dataTransfer对象中存入数据,它用types属性来指定数据的MIME 类型。  2. getData方法在拖动结束时读取dataTransfer对象中的数据clearData方法可以用来清除DataTransfer对象内的数据。如果在上面的代码getData() 方法前先加上”dt.clearData();”,那么目标元素内就不会放入任何数据了

时间: 2024-08-07 15:53:16

实现拖放的步骤,有关的事件,方法的相关文章

angular指令监听ng-repeat渲染完成后执行自定义事件方法

今天工作中遇到需要用到ng-repeat遍历渲染完后执行某个操作,angular本身并没有提供监听ng-repeat渲染完成的指令,所以需要自己创建自定义指令. 在ng-repeat模板实例内部会暴露出一些特殊属性$index/$first/$middle/$last/$odd/$even,$index会随着每次遍历(从0开始)递增,当遍历到最后一个时,$last的值为true,所以可以通过判断$last的值来监听ng-repeat的执行状态, 怎么在遍历过程中拿到$last的值:自定义指令 v

jQuery 事件方法

事件方法触发器或添加一个函数到被选元素的事件处理程序. 下面的表格列出了所有用于处理事件的 jQuery 方法. 方法 描述 bind() 向匹配元素附加一个或更多事件处理器 blur() 触发.或将函数绑定到指定元素的 blur 事件 change() 触发.或将函数绑定到指定元素的 change 事件 click() 触发.或将函数绑定到指定元素的 click 事件 dblclick() 触发.或将函数绑定到指定元素的 double click 事件 delegate() 向匹配元素的当前或

(转)NGUI研究院之三种方式监听NGUI的事件方法

NGUI事件的种类很多,比如点击.双击.拖动.滑动等等,他们处理事件的原理几乎万全一样,本文只用按钮来举例. 1.直接监听事件 把下面脚本直接绑定在按钮上,当按钮点击时就可以监听到,这种方法不太好很不灵活. 1 2 3 4 void OnClick() { Debug.Log("Button is Click!!!"); }   2.使用SendMessage 选择按钮后,在Unity导航菜单栏中选择Component->Interaction->Button Messag

继承PagerAdapter类需要重写五个方法和ViewPager的点击事件方法小结

继承PagerAdapter类需要重写五个方法: public int getCount() { return pages.size(); } 返回page的长度 public boolean isViewFromObject(View arg0, Object arg1) { return arg0==arg1; } 判断instantiateItem(ViewGroup container, int position)返回的要加载的pager对象是不是view视图,是则返回true并显示,不

[ExtJS学习笔记]第七节 Extjs的组件components及其模板事件方法学习

本文地址:http://blog.csdn.net/sushengmiyan/article/details/38487519 本文作者:sushengmiyan -------------------------------------------------------------资源链接----------------------------------------------------------------------- 翻译来源  Sencha Cmd官方网站: http://ww

php 中的魔术方法-----“事件方法”

来源:http://lornajane.net/posts/2012/phps-magic-__invoke-method-and-the-callable-typehint php 中的这个对象 ,有时间研究一下: PHP中会有一些魔术方法:PHP 将所有以 __(两个下划线)开头的类方法保留为魔术方法.所以在定义类方法时,除了上述魔术方法,建议不要以 __ 为前缀. 魔术方法有:__construct(), __destruct(), __call(), __callStatic(), __

三种方式监听NGUI的事件方法

NGUI研究院之三种方式监听NGUI的事件方法(七) NGUI事件的种类很多,比如点击.双击.拖动.滑动等等,他们处理事件的原理几乎万全一样,本文只用按钮来举例. 1.直接监听事件 把下面脚本直接绑定在按钮上,当按钮点击时就可以监听到,这种方法不太好很不灵活. 1 2 3 4 void OnClick() { Debug.Log("Button is Click!!!"); }   2.使用SendMessage 选择按钮后,在Unity导航菜单栏中选择Component->In

由 preventDefault()方法 复习jQuery 事件方法

今天看到了 preventDefault() 方法,就复习了一下jQuery 事件方法,记下随记 jQuery 参考手册 - 事件 事件方法会触发匹配元素的事件,或将函数绑定到所有匹配元素的某个事件. 触发实例: $("button#demo").click() 上面的例子将触发 id="demo" 的 button 元素的 click 事件. 绑定实例: $("button#demo").click(function(){$("img

JQ中bind(),live(),delegate()事件方法的区别

[导读] bind(), live(), 和 delegate()这三个方法的区别并不是非常明显.弄清楚这些区别对我们写出简介的代码和预防我们的应用中出现bugs是非常有帮助的. jQuery团队在1 7版本中发布了一个用于绑定事件的新方法叫 bind(), .live(), 和 .delegate()这三个方法的区别并不是非常明显.弄清楚这些区别对我们写出简介的代码和预防我们的应用中出现bugs是非常有帮助的. jQuery团队在1.7版本中发布了一个用于绑定事件的新方法叫做on.这个方法包含