博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
javascript实现简单拖曳功能
阅读量:2072 次
发布时间:2019-04-29

本文共 2377 字,大约阅读时间需要 7 分钟。

javascript实现简单拖曳功能

欢迎访问我的博客,祝码农同胞们早日走上人生巅峰,迎娶白富美~~~

场景:想必大家对这一类场景很熟悉,QQ登陆面板跟着鼠标的拖动,鼠标到哪它到哪,飞机大战小游戏里,鼠标或者手指到哪,飞机到哪,这一类场景用的很多,那么下面来简单实现一下:

思路

  1. 在鼠标移动的时候,计算鼠标位置
  2. 给盒子一个绝对定位,将鼠标位置赋值给盒子

HTML 结构

1 2 3 4 5 6 7 8 9 10
   
想看效果?狠狠的拽我!!

CSS 样式

1 2 3 4 5 6 7 8 9 10 11 12 13 14
#drag{
width: 200px; height: 200px; background: yellow; color: red; font-size: 20px; font-weight: bold; position: absolute;/*这很关键*/ left: 40%; top: 37%; } #drag:active{
cursor: move; }

这时候就有了个黄底红字的大盒子,用 JS 去编写 鼠标按下,鼠标移动,鼠标抬起的事件驱动程序,实现拖曳效果

思路:将鼠标所在位置直接赋值给盒子的绝对定位的位置lefttop

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
var oDrag = document.getElementById("drag") getDarg(oDrag) function getDarg(obj){
//鼠标按下 obj.onmousedown = function(e){
//鼠标移动   document.onmousemove = function(e){
    var event = e || event     obj.style.left = event.clientX + 'px'     obj.style.top = event.clientY + 'px'   } //鼠标放开   document.onmouseup = function(){
   // 鼠标抬起的时候清空事件,有效避免内存泄漏     document.onmousemove = null     document.onmouseup = null   } } }

这样实现了拖曳效果,但是很显然,这样鼠标拖曳按钮一直在黄盒子的左上角,体验很不好,那么就要合理的计算鼠标在盒子中的位置,鼠标在盒子中的位置计算可以用鼠标在可视区域的位置减去盒子绝对定位的位置

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
var oDrag = document.getElementById("drag") getDarg(oDrag) function getDarg(obj){
//鼠标按下 obj.onmousedown = function(e){
// 兼容性处理   var event = e || event // 鼠标在盒子中的位置   var distanceX = event.clientX - this.offsetLeft   var distanceY = event.clientY - this.offsetTop //鼠标移动   document.onmousemove = function(e){
    ...   } //鼠标放开   document.onmouseup = function(){
    ...   } } }

这样就基本实现了需求,但是拖动的时候会不注意选中盒子上的文字,也影响用户体验,借助windowdocument下面的方法在拖曳盒子即移动鼠标的时候取消文本选中

1
window.getSelection ? window.getSelection().removeAllRanges() : document.selection.empty()

这样就好多了

下面上完整代码:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
   
想看效果?狠狠的拽我!!

至此,简单拖曳功能完成,对应的如果开发移动端,只需要改上移动端的事件即可,例如touchstart ,touchmove,touchend, touchcancel

转载地址:http://rxtmf.baihongyu.com/

你可能感兴趣的文章
删除JSONArray中的某个元素
查看>>
Linux下Tomcat重新启动
查看>>
使用HttpClient请求另一个项目接口获取内容
查看>>
HttpClient get和HttpClient Post请求的方式获取服务器的返回数据
查看>>
net.sf.json Maven依赖配置
查看>>
Could not initialize class net.sf.json.JsonConfig错误解决
查看>>
Java编程思想重点笔记(Java开发必看)
查看>>
eclipse 创建maven 项目 动态web工程完整示例
查看>>
前端JSP与Spring MVC交互实用例子
查看>>
使用maven一步一步构建spring mvc项目
查看>>
hadoop map reduce 阶段笔记
查看>>
java jackcess 操作 access
查看>>
Git问题Everything up-to-date解决
查看>>
Hadoop HDFS文件操作的Java代码
查看>>
Hadoop学习笔记—3.Hadoop RPC机制的使用
查看>>
Hadoop学习笔记—22.Hadoop2.x环境搭建与配置
查看>>
JTS Geometry关系判断和分析
查看>>
GIS基本概念
查看>>
Java文件操作①——XML文件的读取
查看>>
java学习总结之文件操作--ByteArrayOutputStream的用法
查看>>