原生js实现小方块拖拽
需求:实现点击一个小方块 按下拖拽的功能。
实现:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><div class="big"><div class="small"></div></div>
</body>
</html>
<style>.big {width: 500px;height: 500px;left: 50%;top: 50%;transform: translate(-50%, -50%);position: absolute;background-color: #eee;}.small {width: 100px;height: 100px;border: 2px solid black;position: absolute;top: 0;left: 0;background-color: pink;}
</style>
<script>
//获取big
var big = document.querySelector('.big');
var small = document.querySelector('.small');
//监听small的移动
small.onmousedown = function(e) {//鼠标移动事件 必须按下才能触发移动// 当快速的移动鼠标时,由于每移动1px就要重新获取位置的属性值,还需要不停的计算,此时会出现// 计算误差,会造成鼠标移动时不在box事件源上,脱离box,不执行移动事件// 解决方案: 将移动事件绑定在document上,不会出现脱离事件源的现象document.onmousemove=function(e){//计算移动的距离let movex=(e.clientX-big.getBoundingClientRect().left)-small.offsetWidth/2let movey=(e.clientY-big.getBoundingClientRect().top)-small.offsetHeight/2//边界判断movex<0 ? movex=0 : movex>big.offsetWidth-small.offsetWidth ? movex=big.offsetWidth-small.offsetWidth : movex=movexmovey<0 ? movey=0 : movey>big.offsetHeight-small.offsetHeight ? movey=big.offsetHeight-small.offsetHeight : movey=moveysmall.style.left=movex+'px'small.style.top=movey+'px'}//监听鼠标抬起small.onmouseup=function(e){document.onmousemove=null}
}</script>
getBoundingClientRect()使用 可参考:
getBoundingClientRect获取元素位置以及在Vue中的使用 - 水车 - 博客园
原生js实现小方块拖拽相关推荐
- java使用重绘实现拖动_原生JS使用Canvas实现拖拽式绘图功能
一.实现的功能 1.基于oop思想构建,支持坐标点.线条(由坐标点组成,包含方向).多边形(由多个坐标点组成).圆形(包含圆心坐标点和半径)等实体 2.原生JavaScript实现,不依赖任何第三方j ...
- android 浮动按钮拖拽,小程序拖拽浮动按钮
小程序拖拽浮动按钮 2019-5-22 分类: 小程序 小程序 浮动 拖拽 按钮 不借助movable-area自带的组件,实现拖拽效果 wxml + js: var startPoint; ...
- JQuery Dialog(JS模态窗口,可拖拽的DIV)
JQuery Dialog(JS模态窗口,可拖拽的DIV) 吴剑 2012-08-08 原创文章,转载必需注明出处:http://www.cnblogs.com/wu-jian/ 效果图 调用示意图 ...
- JS实现小方块上下移动
**JS实现小方块上下移动 效果图 HTML代码展示 <!DOCTYPE html> <html><head><meta charset="UTF- ...
- android allapp图标拖动,RecyclerView 拖拽移动,长按小图标拖拽,侧滑删除
RecyclerView拖拽移动,长按小图标拖拽,侧滑删除 长按小图标拖拽.gif 侧滑删除.gif Android RecyclerView出来也很多年了,是非常成熟的控件,Github上工具一堆, ...
- 仿炫酷头条小视频拖拽动画
本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 序言 时光荏苒,又是一年高考季,不知不觉中距离高考已经七年过去了,在我眼中依稀能够嗅到那个夏天的味道,朋友的道别,得知成绩后的苦涩, ...
- html矢量图 对画布的拖拽,原生WebGL如何使用鼠标拖拽画布?
如图,我在实现鼠标拖拽画布这个功能时拖拽动作非常不平滑,请问有没有更好的方式用原生WebGL来实现鼠标拖拽画布功能? 拖拽部分代码:gl.canvas.onmousedown = function ( ...
- Js实战之实现方块拖拽功能
实现方块的拖拽 <!DOCTYPE html> <html> <head><meta charset="UTF-8"><tit ...
- JS C22作业:方块拖拽效果
(1)鼠标移动 document.onmousemove = function(e){var event = e || window.event;console.log(e.pageX + " ...
最新文章
- 【NetApp】FC盘不能和装有ATA盘的DS14盘柜接入同一个loop中。
- Java 回调函数的理解
- c# Selenium 如何模拟滑动geetest 验证码
- 强推!十大顶级大数据可视化工具 | 程序员硬核评测
- Redmi K40系列要做旗舰“焊门员”:生死看淡 不服就焊
- iOS开发UI篇--仿射变换(CGAffineTransform)使用小结
- LiveGBS国标GB/T28181|GB35114流媒体服务(LiveSMS)如何配置节点集群
- Hexo Theme NexT 主题个性化配置最佳实践
- android nef转jpg格式文件,nef格式转换成jpg
- PHP家庭账单系统,家庭财务管理系统1.0【PHP版】
- 手机wife修改dns服务器,简单几步DNS设置,让你手机的WiFi速度提升几倍
- Extraneous non-emits event listeners (onJump) were passed to component but could not be automaticall
- java毕业设计诚越园区垃圾分类信息科普系统Mybatis+系统+数据库+调试部署
- U盘和存储卡实际上可以轻松的创建隐藏分区制作PE启动盘
- Java中判断输入错误的,判断验证码输入是否正确有关问题
- linux远程文件拷贝方式,linux远程拷贝文件
- jsp:include flush=true
- 【渝粤教育】 广东开放大学 21秋期末考试物业设备设施管理10121k2
- 《炬丰科技-半导体工艺》清洗含有介电膜的半导体晶片的方法
- 自媒体人平台运营保姆级教程!速看!