5-2 复制才能拖拽的理解

5-2 复制才能拖拽的理解

实现代码:

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <title>使用拖拽更改支付宝的默认付款方式</title>
    <style type="text/css">
        body {
            background: #eee;
        }
        
        h3 {
            text-align: center;
        }
        
        ul {
            list-style: none;
            position: relative;
            margin-left: -180px;
            left: 50%;
        }
        
        li {
            display: block;
            height: 30px;
            width: 200px;
            border: 1px dashed #bbb;
            line-height: 30px;
        }
        
        .hidden {
            display: none;
        }
    </style>
    <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
</head>

<body>
    <h3>使用拖拽更改支付宝的默认付款方式</h3>
    <ul id="card">
        <li draggrable="true">招商信用卡</li>
        <li draggrable="true">交通信用卡</li>
        <li draggrable="true">中信储蓄卡</li>
        <li draggrable="true">建行储蓄卡</li>
        <li draggrable="true">蚂蚁花呗</li>
        <li draggrable="true">余额宝</li>
        <li draggrable="true">余额</li>
    </ul>
    <img src="http://img1.sycdn.imooc.com/climg//59705a7b0001736902000080.png" class="hidden">
    <script>
        (function($) {
            var dragSrc;
            $('li').each(function(index, ele) {
                $(ele).on('dragstart', function(e) {

                    dragSrc = this;
                    e.originalEvent.dataTransfer.setData('text/html', this.innerHTML);
                    e.originalEvent.dataTransfer.setDragImage($('img').clone().removeClass('hidden')[0], 0, 0);
                }).on('dragover', function(e) {
                    e.preventDefault();
                }).on('drop', function(e) {
                    if (dragSrc != this) {
                        dragSrc.innerHTML = this.innerHTML;
                        this.innerHTML = e.originalEvent.dataTransfer.getData('text/html');
                    }
                });
            })
        })(jQuery);
    </script>
</body>

</html>

代码效果:

http://img1.sycdn.imooc.com//climg/5b21ced500017f0c03280314.jpg

显然,这个最终的实现效果和给出的实例有很大的差别,需要选中要拖拽的文字,才能实现拖拽;

我觉得出现这个问题的原因是,我们实现这个案例借鉴的代码原型是拖拽拼图,在拼图案例中,因为li中的内容是img标签,所以在交换的时候,直接使用innerHTML交换即可实现图片的拖拽的交换;

但是这个案例中li的内容是文字,所以innerHTML获取的必然是文字,所以拖拽的时候才会出现选中才能拖拽的状况;

以上是我的推断,而且我还没有想到该怎么写来实现演示案例;

所以希望写出来的同学可以指点一下;

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

3回答
慕先生2197846 2018-07-05 18:26:20

学习了新东西

小于飞飞 2018-06-29 14:09:31

注意"修改了innerHTML,然后将li上的draggrable="true"去掉,在js中加上.attr('draggable',true)之后,代码成功运行了",是因为拼写错误,应该是 draggable='true'.

http://img1.sycdn.imooc.com//climg/5b35ccf00001d23903030102.jpg

动手实践,希望解答你的疑惑,祝学习愉快。

卡布琦诺 2018-06-14 11:58:33

1、首先建议去掉li中的draggrable="true"

http://img1.sycdn.imooc.com//climg/5b21e7a3000195e810440281.jpg

2、js代码建议调整如下

http://img1.sycdn.imooc.com//climg/5b21e7c60001c76113170682.jpg

将innerHTML修改成innerText

希望可以帮到你~

  • 提问者 BruinK #1
    这个代码在我这不能实现拖拽功能。 您那边可以吗?
    2018-06-14 17:00:37
  • 卡布琦诺 回复 提问者 BruinK #2
    我这里是可以的哦,除了将innerHTML修改成innerText,还有其他的一些修改,建议详细的比较一下代码。
    2018-06-14 17:39:05
  • 我这里修改了innerHTML,然后将li上的draggrable="true"去掉,在js中加上.attr('draggable',true)之后,代码成功运行了。但是,为什么呢,为什么li上的draggrable="true"无效呢?
    2018-06-27 20:42:10
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
组件化思想开发电商网页 18版
  • 参与学习           人
  • 提交作业       467    份
  • 解答问题       4826    个

本路径带你通过系统学习HTML5、JavaScript、jQuery的进阶知识,不仅如此,还会学习如何利用组件化的思想来开发网页,知识点+案例,使得所学可以更好的得到实践。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师