全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

javascript html5轻松实现拖动功能

拖放(drag和drop)是html5标准组成,下面我们从五个方面对其进行叙述,分别是如何成为拖动物体,如何成为拖动目标,拖动物体上拥有的事件,拖动目标上拥有的事件以及拖放物体间如何传递信息。

拖动物体上拥有的事件

  • dragstart (在物体刚被拖动时触发)
  • drag (在dragstart事件触发之后就被触发)
  • dragend (拖动事件结束时触发)

拖动目标上拥有的事件

  • dragenter (当拖拽元素进入放置目标时触发)
  • dragover (当拖拽元素在放置目标中移动时触发,类似于mouseover)
  • drop (当拖拽元素放置在放置目标中时触发)

如何成为拖动物体

在html中img元素默认可以进行拖拽,其它元素需要设置draggable=true,即可对其进行拖拽。

<div draggable="true"></div>

如何成为拖动目标

html中,元素默认不能成为放置目标,只有我们禁止了drapenter和drapover事件的默认行为时,可以称为拖放目标。

droptarget.addEventListener('dragenter', function(event) {
  event.preventDefault();
});
droptarget.addEventListener('dragover', function(event) {
  event.preventDefault();
});

拖放物体间如何传递信息

事件中具有一个dataTransfer对象,它拥有的两个常用方法setData()和getData(),分别用于在存放拖拽信息以及获取拖拽信息。其中,setData()只能在拖拽事件刚开始时设置,即dragstart事件时设置,getData()则一般在放置获取,即drop事件触发时获取。

// drapobj 拖拽元素
// droptarget 放置目标
dragobj.addEventListener('dragstart', function(event) {
  event.dataTransfer.setData('id', dragobj.id);
});
droptarget.addEventListener('drop', function(event) {
  var id = event.dataTransfer.getData('id');
  var obj = document.getElementById(id);
  event.preventDefault();
  this.appendChild(obj);
}); 

完整代码

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <title>HTML5 拖拽</title>
</head>

<body>
  <div draggable="true"></div>
  <div style="height: 150px" id="dragobj" draggable="true">
    <img src="c_06.jpg" alt="">
  </div>
  <div id="droptarget" style="width: 150px; height: 150px;background-color: #eee;"></div>
</body>
<script>
var droptarget = document.getElementById('droptarget');
var dragobj = document.getElementById('dragobj');

// drapobj 拖拽元素
// droptarget 放置目标
dragobj.addEventListener('dragstart', function(event) {
  event.dataTransfer.setData('id', dragobj.id);
});
droptarget.addEventListener('dragenter', function(event) {
  event.preventDefault();
});
droptarget.addEventListener('dragover', function(event) {
  event.preventDefault();
});
droptarget.addEventListener('drop', function(event) {
  var id = event.dataTransfer.getData('id');
  var obj = document.getElementById(id);
  event.preventDefault();
  this.appendChild(obj);
});
</script>

</html>

存在问题

火狐浏览器中拖拽图片默认打开新窗口,根据javascript高级程序设计中在drop事件中禁止默认事件,未解决问题。

解决方法:将图片作为div的背景图片,将div作为拖拽物体,则不存在此问题。

最终代码

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <title>HTML5 拖拽</title>
  <style>
  div {
    width: 120px;
    height: 136px;
  }
  
  #dragobj {
    background: url('c_06.jpg') no-repeat;
  }
  
  #droptarget {
    background-color: #eee;
  }
  </style>
</head>

<body>
  <div id="dragobj" draggable="true">
  </div>
  <div id="droptarget"></div>
</body>
<script>
var droptarget = document.getElementById('droptarget');
var dragobj = document.getElementById('dragobj');

// drapobj 拖拽元素
// droptarget 放置目标
dragobj.addEventListener('dragstart', function(event) {
  event.dataTransfer.setData('id', dragobj.id);
});
droptarget.addEventListener('dragenter', function(event) {
  event.preventDefault();
});
droptarget.addEventListener('dragover', function(event) {
  event.preventDefault();
});
droptarget.addEventListener('drop', function(event) {
  var id = event.dataTransfer.getData('id');
  var obj = document.getElementById(id);
  event.preventDefault();
  this.appendChild(obj);
});
</script>

</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# js  # html5  # 拖动  # js实现鼠标拖动功能  # js实现悬浮窗效果(支持拖动)  # JavaScript拖动层Div代码  # js实现兼容PC端和移动端滑块拖动选择数字效果  # 基于JavaScript实现拖动滑块效果  # js拖动滑块和点击水波纹效果实例代码  # 拖拽  # 拖放  # 对其  # 不存在  # 事件中  # 火狐  # 解决问题  # 刚开始  # 类似于  # 解决方法  # 结束时  # 程序设计  # 大家多多  # 存在问题  # 中时  # 中移动  # 五个方面  # 器中  # 只能在 


相关文章: 建站主机功能解析:服务器选择与快速搭建指南  如何快速生成专业多端适配建站电话?  网站制作需要会哪些技术,建立一个网站要花费多少?  安徽网站建设与外贸建站服务专业定制方案  一键制作网站软件下载安装,一键自动采集网页文档制作步骤?  建站之星IIS配置教程:代码生成技巧与站点搭建指南  怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?  宝塔新建站点为何无法访问?如何排查?  Python lxml的etree和ElementTree有什么区别  如何在万网开始建站?分步指南解析  如何用搬瓦工VPS快速搭建个人网站?  制作销售网站教学视频,销售网站有哪些?  阿里云网站搭建费用解析:服务器价格与建站成本优化指南  如何配置FTP站点权限与安全设置?  黑客如何通过漏洞一步步攻陷网站服务器?  如何在Golang中指定模块版本_使用go.mod控制版本号  成都响应式网站开发,dw怎么把手机适应页面变成网页?  学校建站服务器如何选型才能满足性能需求?  网站代码制作软件有哪些,如何生成自己网站的代码?  建站之星后台密码遗忘如何找回?  阿里云高弹*务器配置方案|支持分布式架构与多节点部署  如何通过虚拟主机快速搭建个人网站?  制作公司内部网站有哪些,内网如何建网站?  成都网站制作公司哪家好,四川省职工服务网是做什么用?  如何通过免费商城建站系统源码自定义网站主题与功能?  如何制作一个表白网站视频,关于勇敢表白的小标题?  在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?  建站之星logo尺寸如何设置最合适?  建站之星后台管理系统如何操作?  香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧  香港服务器建站指南:外贸独立站搭建与跨境电商配置流程  上海网站制作网页,上海本地的生活网站有哪些?最好包括生活的各个方面的?  北京的网站制作公司有哪些,哪个视频网站最好?  建站VPS选购需注意哪些关键参数?  简易网站制作视频教程,使用记事本编写一个简单的网页html文件?  建站之星2.7模板快速切换与批量管理功能操作指南  个人网站制作流程图片大全,个人网站如何注销?  广州美橙建站如何快速搭建多端合一网站?  上海制作企业网站有哪些,上海有哪些网站可以让企业免费发布招聘信息?  佛山企业网站制作公司有哪些,沟通100网上服务官网?  建站之星如何实现PC+手机+微信网站五合一建站?  如何通过智能用户系统一键生成高效建站方案?  制作表格网站有哪些,线上表格怎么弄?  如何快速搭建响应式可视化网站?  招商网站制作流程,网站招商广告语?  建站主机默认首页配置指南:核心功能与访问路径优化  行程制作网站有哪些,第三方机票电子行程单怎么开?  高端企业智能建站程序:SEO优化与响应式模板定制开发  网站网页制作电话怎么打,怎样安装和使用钉钉软件免费打电话?  如何挑选高效建站主机与优质域名? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。