zoukankan      html  css  js  c++  java
  • html5的拖拽事件

    原生拖放

    一、若要一个元素可以被拖放,首先要为元素添加draggable属性

    true 可以被拖放
    false 不可以被拖放
    auto 除img或url以外都可以被拖放
    其他值 都不可以被拖放

    注释:在火狐中设置draggable属性无用,但可以再dragstart事件中为dataTransfer对象中添加setData()方法后就可以允许被拖拽。支持draggable的属性的浏览器有IE10+、Firefox 4+、Safari 5+,chrome,Opera 11.5+.

    二、拖拽发生过程

         被拖拽元素

    dragstart 按下鼠标键并开始移动鼠标时
    drag

    在dragstart事件之后,在元素被拖动期间会持续触发该事件

    dragend 当拖动停止时,会触发dragend事件

       

     放置目标元素

    dragenter 有元素被拖动到放置目标上
    dragover

    紧随dragenter发生,在被拖动的元素

    还在放置目标范围内移动时,会持续触发该事件

    dragleave 在元素被拖出放置目标时触发
    drop 元素被放到了放置目标中触发

     

    注释:拖拽发生过程:dragstart->drag->dragenter->dragover->dragleave/drop->dragend

    三、自定义放置目标

        原因:所有元素默认是不允许放置的,尽管都支持放置目标事件,当拖放元素经过不允许放置的元素时,就会看到一种特殊光标(圆环中有一条反斜线)。

        解决方法:把任何元素都变成有效的放置目标,重写dragenter和dragover事件的默认行为.如

    function prevent(e){
       var e = e || window.event;
       e.preventDefault(e);
    }
    
    droptarget.dragover = prevent;
    droptarget.dragenter = prevent;

    此时特殊光标会变成允许放置的光标。

    注释:firfox 3.5+中,放置事件的默认行为是打开被放到放置目标上的url,为支持FireFox支持正常的拖放,还要取消drop事件的默认行为,阻止它打开URL.

    四、dataTransfer对象

         IE5引入了dataTransfer对象,它是事件对象的一个属性,用于从被拖动元素向放置目标传递字符串格式的数据。

    setData() 保存值,第一个参数可以是“text/plain"和"text/uri-list"
    getData() 获取在setData()中保存的值。
    dropEffect 属性,知道被拖动的元素能够执行哪种放置行为。搭配effectAllowed属性才有用
    effectAllowed 属性,表示允许拖动元素的哪种dropEffect.

    注意:dataTransfer对象中的数据只能在drop事件处理程序中读取。如果ondrop处理程序中没有读到数据,那就是dataTransfer对象已经被销毁,数据也丢失了。

    dropEffect的值 含义
    none 不能把拖动的元素放在这里
    move 应该把拖动的元素移动到放置目标
    copy 应该把拖动的元素复制到放置目标
    link 表示放置目标会打开拖动的元素(但拖动的元素必须是一个连接,有URL)

     

    effectAllowed值 含义
    uninitialized 没有给被拖动的元素设置任何放置行为
    none

    被拖动的元素不能有任何行为

    copy 只允许值为'copy'的dropEffect
    link 只允许值为'link'的dropEffect
    move 只允许值为'move'的dropEffect
    copyLink 只允许值为'copy'和“link”的dropEffect
    copyMove 只允许值为'copy'和“move”的dropEffect
    linkMove 只允许值为'move'和“link”的dropEffect
    all 允许任意的dropEffect
    在程序媛的路上,越走越用劲儿:)
  • 相关阅读:
    java使用AES加密解密 AES-128-ECB加密
    快速集成iOS基于RTMP的视频推流
    iOS视频直播初窥:高仿<喵播APP>
    直播相关的开源库/项目
    iOS 常见 Crash 及解决方案
    命名规范
    实现UITableView循环利用
    最快让你上手ReactiveCocoa之进阶篇
    最快让你上手ReactiveCocoa之基础篇
    带你走进脚本世界,ijkplayer之【init-ios.sh】脚本分析
  • 原文地址:https://www.cnblogs.com/AliceX-J/p/5269346.html
Copyright © 2011-2022 走看看