拖拉事件

   var dragged;

    var f = document.getElementById(‘div3‘);

    document.getElementById(‘draggable‘).addEventListener("dragstart", function( event ) {
        // 保存被拖拉节点
        dragged = event.target;
        // 被拖拉节点的背景色变透明
        event.target.style.opacity = 0.5;
        // 兼容Firefox
        event.dataTransfer.setData(‘text/plain‘, ‘anything‘);
    }, false);

    document.getElementById(‘draggable‘).addEventListener(‘dragend‘, function( event ) {
        // 被拖拉节点的背景色恢复正常
        event.target.style.opacity = ‘‘;
    }, false);

    f.addEventListener(‘dragover‘, function( event ) {
        // 防止拖拉效果被重置,允许被拖拉的节点放入目标节点
        event.preventDefault();
    }, false);

    f.addEventListener(‘dragenter‘, function( event ) {
        // 目标节点的背景色变紫色
        // 由于该事件会冒泡,所以要过滤节点
        if ( event.target.className == ‘dropzone‘ ) {
            event.target.style.background = ‘purple‘;
        }
    }, false);

    f.addEventListener(‘dragleave‘, function( event ) {
        // 目标节点的背景色恢复原样
        if ( event.target.className == ‘dropzone‘ ) {
            event.target.style.background = "";
        }
    }, false);

    f.addEventListener(‘drop‘, function( event ) {
        // 防止事件默认行为(比如某些Elment节点上可以打开链接)
        event.preventDefault();
        if ( event.target.className === ‘dropzone‘ ) {
            // 恢复目标节点背景色
            event.target.style.background = ‘‘;
            // 将被拖拉节点插入目标节点
            dragged.parentNode.removeChild( dragged );
            event.target.appendChild( dragged );
        }
    }, false);
<div class="dropzone" id="div1">
       <div id="draggable" draggable="true" style="background-color: yellow">
      该节点可拖拉
  </div>
</div>
<br/>
<br/>
<br/>
<div class="dropzone" id="div2"></div>
<br/>
<br/>
<br/>
<div class="dropzone" id="div3"></div>
<br/>
<br/>
<br/>
 <div class="dropzone" id="div4"></div>

dragover事件:拖拉到当前节点上方时,在当前节点上持续触发,该事件的target属性是当前节点。该事件与dragenter事件基本类似,默认会重置当前的拖拉事件的效果(DataTransfer对象的dropEffect属性)为none,即不允许放下被拖拉的节点,所以如果允许在当前节点drop数据,通常会使用preventDefault方法,取消重置拖拉效果为none。

原文链接:http://javascript.ruanyifeng.com/dom/event-type.html

时间: 2024-12-18 18:25:59

拖拉事件的相关文章

JS如何将拖拉事件与点击事件分离?

帖子:http://bbs.csdn.net/topics/390785395?page=1#post-397369340 如何将拖拉事件跟点击事件分离? 需要做到:拖拉时不触动点击事件 <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title> js拖拽组件1 </title> <script type="text/javascript" src=&qu

javascript高级程序设计---拖拉事件

拖拉事件 拖拉指的是,用户在某个对象上按下鼠标键不放,拖动它到另一个位置,然后释放鼠标键,将该对象放在那里. 拖拉的对象有好几种,包括Element节点.图片.链接.选中的文字等等.在HTML网页中,除了Element节点默认不可以拖拉,其他(图片.链接.选中的文字)都是可以直接拖拉的.为了让Element节点可拖拉,可以将该节点的draggable属性设为true. <div draggable="true"> 此区域可拖拉 </div> draggable属

JS怎样将拖拉事件与点击事件分离?

帖子:http://bbs.csdn.net/topics/390785395?page=1#post-397369340 怎样将拖拉事件跟点击事件分离? 须要做到:拖拉时不触动点击事件 <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title> js拖拽组件1 </title> <script type="text/javascript" src=&qu

JavaScript事件——拖拉事件

拖拉事件的种类 拖拉(drag)指的是,用户在某个对象上按下鼠标键不放,拖动它到另一个位置,然后释放鼠标键,将该对象放在那里. 具体的api可查看 拖拽变色demo <div draggable="true"> 此区域可拖拉 </div> div.addEventListener('dragstart', function (e) { this.style.backgroundColor = 'red'; }, false); div.addEventListe

DOM事件类型详解

一.表单事件: input事件当<input>.<textarea>的值发生变化时触发.此外,打开contenteditable属性的元素,只要值发生变化,也会触发input事件.input事件的一个特点,就是会连续触发,比如用户每次按下一次按键,就会触发一次input事件. select事件当在<input>.<textarea>中选中文本时触发. Change事件当<input>.<select>.<textarea>

每日分享!~ JavaScript(拖拽事件)

浏览器的拖拉事件 拖拉(drag)指的是,用户在某个对象上按下鼠标键不放,拖动它到另一个位置,然后释放鼠标键,将该对象放在那里. 拖拉的对象有好几种,包括元素节点.图片.链接.选中的文字等等.在网页中,除了元素节点默认不可以拖拉,其他(图片.链接.选中的文字)都是可以直接拖拉的.为了让元素节点可拖拉,可以将该节点的draggable属性设为true. 注意这点哦!!!如果需要这个元素具有拖拉功能,必须要设置一个属性draggable=true . 当元素节点或选中的文本被拖拉时,就会持续触发拖拉

*C#(WPF)--矩阵拖动和矩阵动画(拖动展开,不足动画效果)

最近在研发新的项目,遇到了一个桌面模式下的难点--展开动画.之前动画这方面没做过,也许很多人开始做的时候也会遇到相关问题,因此我把几个重点及实际效果图总结展示出来: 我的开发环境是在VS2017下进行的,这个工具条主要功能是:一个工具条,可进行拖拉.可进行拖拉展开,可在拖动之后不足展开并反向继续展开剩下的部分: 一.[拖动]   拖动的核心代码是通过矩阵进行定位和拖动的,定位是以父容器为模板的.以下是核心代码(及效果图): 1 /// <summary> 2 /// 这里TitleBar代指最

单线程 异步 同步 阻塞 非阻塞

Javascript是单线程的深入分析 首先一个引子:为什么JavaScript是单线程的却能让AJAX异步发送和回调请求,还有setTimeout也看起来像是多线程的? 先看例子1: 1 function foo() { 2 console.log( 'first' ); 3 setTimeout( ( function(){ console.log( 'second' ); } ), 5); 4 } 5 for (var i = 0; i < 1000000; i++) { 6 foo();

Javascript是单线程的深入分析(转)

原文: http://blog.csdn.net/talking12391239/article/details/21168489 Javascript是单线程的 因为JS运行在浏览器中,是单线程的,每个window一个JS线程,既然是单线程的,在某个特定的时刻只有特定的代码能够被执行,并阻塞其它的代码.而浏览器是事件驱动的(Event driven),浏览器中很多行为是异步(Asynchronized)的,会创建事件并放入执行队列中.javascript引擎是单线程处理它的任务队列,你可以理解