前言

在日常开发中,前端中常会使用到拖动的效果,今天就来好好的讲解一下,使用javascript和html实现拖动的效果。

需求分析

要实现的效果很简单,如下图中,我们在蓝色区域内拖动可以使得整个灰色和蓝色的也一起拖动,而在灰色的界面内是无法实现拖动的。

javascript

样式很简单,就不多说。
其中的蓝色部分的id是top,而灰色部分的id是main。

window.onload=function(){var main = document.getElementById('main');
// 拖动
var top = document.getElementById('top');
// 设置点击
top.onmousedown = function(event){  fndown(event,main);}
}

上面部分很简单,首先取到蓝色部分的元素,和主要的元素,为top元素设置鼠标点击事件。点击后调用以下函数:

function fndown(event,main){event = event || window.event;var disX = event.clientX - main.offsetLeft,disY = event.clientY - main.offsetTop;document.onmousemove = function(event){event = event || window.event;fnMove(event,disX,disY,main);}top.onmouseup = function(){document.onmousemove = null;top.onmouseup = null;}
}

在这个函数内,我们首先获取到当前的鼠标位置和main元素相距上左两面的距离,计算得出鼠标在元素内距离元素上左两端的距离。
注意这里的拖动事件只能挂载在document上,否则只有鼠标在元素内才可以拖动,如果鼠标出了元素就无法拖动,用户体验不好。当然鼠标点击的事件onmousedown和鼠标松开的事件onmouseup都是挂载在top元素上的。
下面是鼠标移动的函数:

function fnMove(event,disX,disY,main){var l = event.clientX - disX,t = event.clientY - disY;main.style.left=l+'px';main.style.top=t+'px';
}

这里我们先获取到鼠标移动的位置,本来我们直接设置main距离左边和上边的距离就是鼠标位置可以实现拖动吗?答案是可以的。鼠标位置不断更新,main距离左边和上边的距离也不断变化,是不是就实现了拖动呢。尝试一下就发现这样是 有bug 的。因为对位置的更新默认就是对元素的左上角的位置进行更新,如果这样做,我们一拖动就会发现鼠标的位置变到了main元素的左上角,这样就很不和谐。
因此我们要将鼠标距离元素边界的位置计算出来并减去,减去过后的值就是main元素左上角距离浏览器左上角的距离。

html js 实现拖动效果相关推荐

  1. html实现鼠标移动波纹效果,js实现拖动滑块和点击水波纹效果

    本篇文章就给大家介绍js实现拖动滑块效果和点击水波纹效果的方法.有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助. 拖动滑块效果: 先看看效果图: Document input[type ...

  2. JS实现容器模块左右拖动效果

    JS实现容器模块左右拖动效果 实际效果是 鼠标点击上方颜色模块,左右拖动,根据拖动的距离来显示模块 一共有7个颜色块 代码如下 CSS #box {/*margin: 0 auto;*/width: ...

  3. js仿萤石云的视频回放插件拖动效果-时间标尺timeRuler

    效果如下: 可以调整参数如下: CSDN下载地址: 上传到csdn 不见了 等出现了再贴地址.. js仿萤石云的视频回放插件拖动效果-时间标尺timeRuler-Javascript文档类资源-CSD ...

  4. JS各种各样的拖动效果

    <html> <head><title>拖动效果函数演示 by Longbill.cn</title> <style> body { fon ...

  5. 一行代码轻松实现拖动效果

    写JS实现拖动需要一大堆不便维护的代码,实属麻烦,Google了大半天,发现了一个优秀的Jquery插件EasyDrag,只需要一行代码便可轻松在主流浏览器上      实现拖动效果.       $ ...

  6. jquery div拖动效果示例代码

    jquery div拖动效果示例代码 div拖动效果想必大家都有见到过吧,实现的方法也是有很多的,下面为大家将介绍使用jquery是如何实现的,感兴趣的朋友不要错过 复制代码代码如下: <%@ ...

  7. JS特效代码大全(十一)超炫的js图片展示效果(三)

    在看过上一篇JS特效代码大全(十)超炫的js图片展示效果(二)文章后,相信很多人都想试试把这种效果用到自己的项目中去了.在用的过程当中个性化的需求就来了,比如,想把小图导航放上边去,或者放左边放右边等 ...

  8. 原生JS实现拖动拉开序幕特效

    给大家分享一个用原生JS实现的拖动拉开序幕特效,效果如下: 以下是代码实现,欢迎大家复制粘贴和收藏. <!DOCTYPE html> <html lang="en" ...

  9. 分享112个JS特效动画效果,总有一款适合您

    分享112个JS特效动画效果,总有一款适合您 112个JS特效动画效果下载链接:https://pan.baidu.com/s/1uC61pccye_oYqBnUugIuig?pwd=u21z  提取 ...

最新文章

  1. 微软白皮书:47页报告详解中国芯片设计云技术
  2. 将文件转成byte[]文件属组
  3. 在 SAP BTP 平台 Neo 环境里使用 SAP Cloud SDK 创建应用
  4. 2020年视频号发展白皮书
  5. Turtlebot3调试必看——爬坑笔记
  6. 从大到小输出a、b、c(选择结构)
  7. 内蒙古师范大学计算机与信息工程学院--《大数据存储与处理》期末考试试卷...
  8. 思科、华为、Dell visio图下载
  9. vyos配置dns迭代查询
  10. PDP激活被拒绝原因码表
  11. python实现股票历史数据可视化分析
  12. 计算机桌面有阴影,电脑桌面图标有蓝色阴影怎么去掉
  13. Docker安装mysql遇到ERROR 2002
  14. Encoder-Decoder模型
  15. 让老板满意的工作是:汇报工作说结果、请示工作说方案、总结工作说流程、布置工作说标准
  16. “互联网+“项目路演PPT制作学习笔记分享
  17. Git(分布式版本控制工具)
  18. XML学习笔记——XSL
  19. 电动汽车智能充电桩的设计分析
  20. LaTeX中对矩阵加行属性名称和列属性名称

热门文章

  1. 教你如何安装 Internet 信息服务
  2. c语言static关键字参数
  3. PostgreSQL 源码解读(153)- 后台进程#5(walsender#1)
  4. 数字问题7:股票问题
  5. 大数据助力南海教育决策
  6. 一名即将退休的架构师告诉Java程序员们如何投资自己
  7. C++ ostream源码
  8. 质量管理的八项原则(转载)
  9. 交叉编译器的安装方法
  10. echarts柱形图倒立,两边都是正数