pc 收藏夹拖拽移除的简单例子drag drop

     代码

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <style type="text/css">
        div > div{
            display: inline-block;
            padding: 10px;
            background-color: #aaa;
            margin: 3px;
        }
    </style>
    <body>
        <div style="width: 600px;border: 1px solid black;" id="like">
            <h2>可将喜欢的拖入收藏夹</h2>
            <div draggable="true" ondragstart="dsHandler(event)" id="zqj">中秋节</div>
            <div draggable="true" ondragstart="dsHandler(event)" id="gqj">国庆节</div>
            <div draggable="true" ondragstart="dsHandler(event)" id="yd">元旦</div>
            <div draggable="true" ondragstart="dsHandler(event)" id="cj">春节</div>
        </div>
        <div id="dest" style="width: 400px;height: 260px;border: 1px solid black;float: left;">
            <h2 ondragleave="return false;">收藏夹</h2>
        </div>
        <div id="gb" draggable="false" style="float: left;width: 58px;height: 120px;border: 1px solid black;">垃圾桶</div>
        <script>
            var like = document.getElementById('like');
            var dest = document.getElementById('dest');
            //开始拖动事件的事件监听器
            var dsHandler = function(evt){
                //将被拖动元素的innerHTML属性值设置成被拖动的数据
                //在进行拖放操作时,dataTransfer 对象用来保存,通过拖放动作,拖动到浏览器的数据。它可以保存一项或多项数据、一种或者多种数据类型
                //
                evt.dataTransfer.setData("text/plain","<item>"+ evt.target.innerHTML)
            }
            // 当把被拖动元素“放”到收藏夹上时激发该方法。
            dest.ondrop = function(evt){
                evt.preventDefault()
                var text = evt.dataTransfer.getData("text/plain")
                //如果text以<item>开头
                if(text.indexOf("<item>") == 0){
                    var newEle = document.createElement('div');
                    //以当前时间为该元素生成一个唯一的ID
                    newEle.id = new Date().getUTCMilliseconds();
                    //该元素内容为“拖”过来的数据
                    newEle.innerHTML = text.substring(6);
                    //设置该元素允许拖动
                    newEle.draggable = 'true'
                    //为该元素的开始拖动事件指定监听器
                    newEle.ondragstart = function(evt){
                        evt.dataTransfer.setData("text/plain","<remove>" + newEle.id)
                    }
                    dest.appendChild(newEle)
                    //移动到收藏夹,同时也把上面的移除可以注释看一下区别
                    let str = document.getElementById(newEle.id).innerHTML
                    switch (str){
                        case '中秋节':
                        like.removeChild(document.getElementById('zqj'))
                        break;
                        case '国庆节':
                        like.removeChild(document.getElementById('gqj'))
                        break;
                        case '元旦':
                        like.removeChild(document.getElementById('yd'))
                        break;
                        case '春节':
                        like.removeChild(document.getElementById('cj'))
                        break;
                    }
                }
            }
            // 当把被拖动元素“放”到垃圾桶上时激发该方法。
            document.getElementById('gb').ondrop = function(evt){
                var id = evt.dataTransfer.getData("text/plain");
                console.log(id)
                if(id.indexOf('<remove>') == 0){
                    console.log(id)
                    var target = document.getElementById(id.substring(8));
                    dest.removeChild(target);
                }
            }
            document.ondragover = function(evt){
                return false;
            }
            document.ondrop = function(evt){
                return false;
            }
        </script>
    </body>
</html>

效果图

 

转载于:https://www.cnblogs.com/yhhBKY/p/11547930.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
安卓中,RecyclerView 是一个常用的列表控件,并且支持拖拽和滑动删除等功能。下面是利用 Drag and Drop 实现 RecyclerView 新增 Item 的步骤: 1. 给 RecyclerView 添加一个 ItemTouchHelper 回调: ```java ItemTouchHelper.Callback callback = new ItemTouchHelper.Callback() { // 是否支持长按拖拽 @Override public boolean isLongPressDragEnabled() { return true; } // 是否支持滑动删除 @Override public boolean isItemViewSwipeEnabled() { return true; } // 拖拽操作回调 @Override public int onDrag(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) { // do something } // 滑动删除回调 @Override public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) { // do something } }; ItemTouchHelper touchHelper = new ItemTouchHelper(callback); touchHelper.attachToRecyclerView(recyclerView); ``` 2. 在 onDrag 回调中处理拖拽操作: ```java @Override public int onDrag(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, @NonNull RecyclerView.ViewHolder target) { // 获取要拖拽的 Item 和目标 Item 的位置 int fromPosition = viewHolder.getAdapterPosition(); int toPosition = target.getAdapterPosition(); // 如果目标位置在当前位置之前,依次向前移动 if (fromPosition > toPosition) { for (int i = fromPosition; i > toPosition; i--) { Collections.swap(dataList, i, i - 1); } } // 如果目标位置在当前位置之后,依次向后移动 else { for (int i = fromPosition; i < toPosition; i++) { Collections.swap(dataList, i, i + 1); } } // 更新数据 adapter.notifyItemMoved(fromPosition, toPosition); return 0; } ``` 3. 在 onSwiped 回调中处理滑动删除操作: ```java @Override public void onSwiped(@NonNull RecyclerView.ViewHolder viewHolder, int direction) { // 获取要删除的 Item 的位置 int position = viewHolder.getAdapterPosition(); // 移除数据 dataList.remove(position); // 更新数据 adapter.notifyItemRemoved(position); } ``` 这样,你就可以在 RecyclerView 上实现拖拽和滑动删除等操作了,具体效果可以参考 Android 官方示例:https://github.com/android/views-widgets-samples/tree/master/RecyclerViewDragAndDrop。如果你想在 RecyclerView 上新增 Item,可以在 onDrag 回调中处理,具体实现方式可以根据你的需求自行编写。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值