拖拽属性

拖拽属性是H5的新特性:
是指鼠标点击源对象之后,不松手将其拖拽到目标对象,或半途松手(释放)的过程
拖拽 Drag
源对象: 指定的鼠标点击的一个事物,例如: 一个元素,一个图片等
目标对象: 指定是我们拖动源对象后,预计要进入的区域
1. 被拖动的源对象可以触发的方法:
1) ondragstart: 源对象开始被拖动
2) ondrag: 被拖动过程中
3) ondragend: 源对象被拖动结束
2. 源对象进入目标对象可以触发的事件
1) ondragenter: 源对象进入目标对象时触发
2) ondragover: 源对象悬停在目标对象上方时触发
3) ondragleave: 源对象被拖动着离开目标对象时触发
4) ondrop: 源对象在目标对象上松手时 触发
拖拽属性 一共就是这7个方法。 每一个都需要记忆
event.dataTransfer: 数据传递对象
功能: 用于在源对象和目标对象之间传递数据
setData(): 设置数据 参数是 key 和 value(value必须是字符串)
getData(): 获取数据,参数是key 。 通过key去获取对应的value值

标签中自带的属性: draggable 是否可以拖拽, 默认值 false

        <div id="box" draggable="true">哈哈</div>
        <div id="two" draggable="true">嘻嘻</div>
    <script>
        var box = document.getElementById("box");
        var two = document.getElementById("two");
        //定义全局变量,存储鼠标的位置
        var offsetX;
        var offsetY;
        //开始拖动时
        box.ondragstart = function (ev) {
            //获取鼠标在元素上的位置
            offsetX = ev.offsetX;
            offsetY = ev.offsetY;
            ev.dataTransfer.setData("text",this.innerText);
            console.log(typeof this.innerText);
        }
        //源对象被拖动时
        box.ondrag = function (ev) {
            var x = ev.clientX;
            var y = ev.clientY;
            //drag事件最后一刻,无法读取鼠标的坐标, x 和 y 都会变成0
            if(x == 0 && y == 0){
                return false; //直接结束,不赋值给元素
            }
            x -= offsetX;
            y -= offsetY;
            this.style.left = x + "px";
            this.style.top = y + "px";
        }
        //拖动结束时
        box.ondragend = function (ev) {
            // alert("拖完了");
        }
        //源对象进入目标对象时 触发
        two.ondragenter = function (ev) {
            two.style.backgroundColor = "yellow";
        }
        //从目标对象出去时 触发的方法
        two.ondragleave = function (ev) {
            two.style.backgroundColor = "red";
        }
        two.ondragover = function (ev) {
            //为了使ondrop方法生效,阻止默认事件
            // ev.stopPropagation();         阻止冒泡
            // 阻止默认事件的 方式1:
            ev.preventDefault();
             //方式2
             // return false;
        }

在目标对象上松手时触发
直接使用 ondrop方法的时候,是无法触发的,我们需要在ondragover中做一下处理

       two.ondrop = function (ev) {
            // this.innerHTML = "我被释放了·";
            // console.log("触发");
            this.innerHTML = ev.dataTransfer.getData("text");
        }

使用JSON对象中的方法 转换 字符串和对象的数据类型

 var str = new String();
        var obj = {};
        //JSON.stringify(对象) : 可以将对象类型 转换为字符串类型
        // console.log(typeof JSON.stringify(obj));
        //JSON.parse(字符串) :  可以将字符串类型  转换为对象类型
        console.log(typeof JSON.parse(str));
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值