代码

<!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>

效果图

js drag drop 收藏夹拖拽移除的简单例子的更多相关文章

  1. 拖拽系列二、利用JS面向对象OOP思想实现拖拽封装

    接着上一篇拖拽系列一.JavaScript实现简单的拖拽效果这一篇博客将接着对上一节实现代码利用JS面向对象(OOP)思维对上一节代码进行封装; 使其模块化.避免全局函数污染.方便后期维护和调用:写到 ...

  2. JS实现漂亮的窗口拖拽效果(可改变大小、最大化、最小化、关闭)

    转自<JS实现漂亮的窗口拖拽效果(可改变大小.最大化.最小化.关闭)>:http://www.jb51.net/article/73157.htm   这篇文章主要介绍了JS实现漂亮的窗口 ...

  3. 基于svg.js实现对图形的拖拽、选择和编辑操作

    本文主要记录如何使用 svg.js 实现对图形的拖拽,选择,图像渲染及各类形状的绘制操作. 1.关于SVG SVG 是可缩放的矢量图形,使用XML格式定义图像,可以生成对应的DOM节点,便于对单个图形 ...

  4. (Demo分享)利用JavaScript(JS)实现一个九宫格拖拽功能

    利用JavaScript(JS)实现一个九宫格拖拽功能   Demo实现了对任意方格进行拖拽,可以交换位置,其中Demo-1利用了勾股定理判断距离! Demo-1整体思路: 1.首先div实现自由移动 ...

  5. D3.js 力导向图的拖拽(drag)与缩放(zoom)

    不知道大家会不会跟我一样遇到这样的问题,在之前做的力导向图的基础上加上缩放功能的时候,拖动节点时整体会平移不再是之前酷炫的效果(失去了拉扯的感觉!).天啊,简直不能接受如此丑X的效果.经过不懈的努力终 ...

  6. 拖拽一个元素如此简单,mouse、drag、touch三兄弟的用处

    最近需要做一个投票活动,上传图片时需要拖拽.缩放来裁剪图片,vue的组件不少,不过自己动手才能丰衣足食,一味使用别人的组件实在难以进步,所以自己研究一番. 一.mouse.drag.touch傻傻分不 ...

  7. 【原创】js实现一个可随意拖拽排序的菜单导航栏

    1.想做这个效果的原因主要是用在UC上看新闻发现他们的导航菜单很有趣.无聊的时候在哪划着玩了很久.所以就干脆自己写一个.原效果如下 2.整体效果如下,在已推荐和未添加里面每个小方块可以触摸移动位置互换 ...

  8. js实现本地图片文件拖拽效果

    如何拖拽图片到指定位置,具体方法如下 在从本地上传图片的时候,如果使用拖拽效果,想想应该是更加的高大上,下面直接上js代码 完整代码: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 ...

  9. JS实现多Div模块拖拽功能

    空闲时间,同事让帮忙整个JS拖拽div模块功能.于是便在网上搜索,总结如下一个可实现多div模块拖拽的功能.一下是整体的HTML代码, 里边可以控制到 拖拽开始(onStart),拖拽时候(onMov ...

随机推荐

  1. dentityServer4(1)- 特性一览

    本地应用只本地客户端应用,例如QQ.微信 IdentityServer4是ASP.NET Core 2的OpenID Connect和OAuth 2.0框架.它可以在您的应用程序中提供以下功能: 它使 ...

  2. 代理-jdk动态代理

    1.基于接口的实现,要jdk动态代理的类必须要实现一个接口: 2.中介类:实现了InvocationHandler,并重写这个接口的 方法(public Object invoke(Object pr ...

  3. 2018-8-9-win-消息

    title author date CreateTime categories win 消息 lindexi 2018-8-9 15:35:4 +0800 2018-2-13 17:23:3 +080 ...

  4. LinkedBlockingQueue 学习

    LinkedBlockingQueue 链表队列,其元素构成为: static class Node<E> { E item; Node<E> next; Node(E x) ...

  5. Employment Planning

    Employment Planning 有n个月,每个月有一个最小需要的工人数量\(a_i\),雇佣一个工人的费用为\(h\),开除一个工人的费用为\(f\),薪水为\(s\),询问满足这n个月正常工 ...

  6. Centos 更改语言设置为中文

    说明 自己装系统时一般都可以自定义选择系统语言.可是云端服务器一般都是安装好的镜像,默认系统语言为英文,对于初学者可能还会有搞不懂的计算机词汇.这里简单说一下centos7怎么修改系统语言为中文. 修 ...

  7. 【JavaWeb项目】一个众筹网站的开发(七)后台用户菜单

    mvn命令不能运行: jar-war-pom之间是可以直接写,优先找这个工程,而不是仓库的位置 pom-pom子父关系,需要去仓库中找,我们需要使用<relativePath>../pro ...

  8. Java中的可变参数和asList方法

    可变参数: List.of

  9. Robot Framework:Excel操作

    robot framework 操作Excel需要安装库 ExcelLibrary pip install robotframework-ExcelLibrary 将ExcelLibrary 导入到r ...

  10. Yii2 使用十一 在设置enablePrettyUrl时候,defaultAction的设置方法

    启用美化Url的功能 'urlManager' => [ 'enablePrettyUrl' => true, 'showScriptName' => false, 'enableS ...