1. 给个div,给定一些样式

  1. <div class="drag" style="left:0;top:0;width:100px;height:100px">按住拖动</div>
  1. <style>
  2. .drag {
  3. background-color: skyblue;
  4. position: absolute;
  5. line-height: 100px;
  6. text-align: center;
  7. }
  8. </style>

2.js部分

  1. // 获取DOM元素
  2. let dragDiv = document.getElementsByClassName("drag")[0];
  3. // 鼠标按下事件 处理程序
  4. let putDown = function (event) {
  5. dragDiv.style.cursor = "pointer";
  6. let offsetX = parseInt(dragDiv.style.left); // 获取当前的x轴距离
  7. let offsetY = parseInt(dragDiv.style.top); // 获取当前的y轴距离
  8. let innerX = event.clientX - offsetX; // 获取鼠标在方块内的x轴距
  9. let innerY = event.clientY - offsetY; // 获取鼠标在方块内的y轴距
  10. // 按住鼠标时为div添加一个border
  11. dragDiv.style.borderStyle = "solid";
  12. dragDiv.style.borderColor = "red";
  13. dragDiv.style.borderWidth = "3px";
  14. // 鼠标移动的时候不停的修改div的left和top值
  15. document.onmousemove = function (event) {
  16. dragDiv.style.left = event.clientX - innerX + "px";
  17. dragDiv.style.top = event.clientY - innerY + "px";
  18. // 边界判断
  19. if (parseInt(dragDiv.style.left) <= 0) {
  20. dragDiv.style.left = "0px";
  21. }
  22. if (parseInt(dragDiv.style.top) <= 0) {
  23. dragDiv.style.top = "0px";
  24. }
  25. if (parseInt(dragDiv.style.left) >= window.innerWidth - parseInt(dragDiv.style.width)) {
  26. dragDiv.style.left = window.innerWidth - parseInt(dragDiv.style.width) + "px";
  27. }
  28. if (parseInt(dragDiv.style.top) >= window.innerHeight - parseInt(dragDiv.style.height)) {
  29. dragDiv.style.top = window.innerHeight - parseInt(dragDiv.style.height) + "px";
  30. }
  31. }
  32. // 鼠标抬起时,清除绑定在文档上的mousemove和mouseup事件
  33. // 否则鼠标抬起后还可以继续拖拽方块
  34. document.onmouseup = function () {
  35. document.onmousemove = null;
  36. document.onmouseup = null;
  37. // 清除border
  38. dragDiv.style.borderStyle = "";
  39. dragDiv.style.borderColor = "";
  40. dragDiv.style.borderWidth = "";
  41. }
  42. }
  43. // 绑定鼠标按下事件
  44. dragDiv.addEventListener("mousedown", putDown, false);

原生js实现拖拽功能的更多相关文章

  1. Js元素拖拽功能实现

    Js元素拖拽功能实现 需要解决的问题 最近项目遇到了一个问题,就是用户某个操作需要弹出一个自定义的内容输入框,但是有个缺点,当浏览太大的时候没办法点击确认和取消按钮,应为这个弹出框是采用绝对定位的,取 ...

  2. JS实现拖拽功能

    本文代码地址(第一节):https://github.com/dirstart/js-exam/blob/master/%E6%8B%96%E6%8B%BDdiv1.html 第二节:https:// ...

  3. 原生js实现拖拽效果

    面向对象 + 原生js拖拽 拖拽div等盒子模型,都是日常操作没有什么问题,如果是拖拽图片的话,会有一点小坑要踩...... 那么我们看代码: var Move_fn = {}; (function( ...

  4. 原生Js实现拖拽(适用于pc和移动端)

    效果: HTML和CSS部分 <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...

  5. 原生js拖拽功能制作滑动条实例教程

    拖拽属于前端常见的功能,很多效果都会用到js的拖拽功能.滑动条的核心功能也就是使用js拖拽滑块来修改位置.一个完整的滑动条包括 滑动条.滑动痕迹.滑块.文本 等元素,先把html代码写出来,如下所示: ...

  6. 通过 JS 实现简单的拖拽功能并且可以在特定元素上禁止拖拽

    前言 关于讲解 JS 的拖拽功能的文章数不胜数,我确实没有必要大费周章再写一篇重复的文章来吸引眼球.本文的重点是讲解如何在某些特定的元素上禁止拖拽.这是我在编写插件时遇到的问题,其实很多插件的拖拽功能 ...

  7. 关于 JS 拖拽功能的冲突问题及解决方法

    前言 我在之前写过关于 JS 拖拽的文章,实现方式和网上能搜到的方法大致相同,别无二致,但是在一次偶然的测试中发现,这种绑定事件的方式可能会和其它的拖拽事件产生冲突,由此产生了对于事件绑定的思考.本文 ...

  8. vuejs2.0使用Sortable.js实现的拖拽功能

    简介 在使用vue1.x之前的版本的时候,页面中的拖拽功能,我在项目中是直接用的jquery ui中的sortable.js,只是在拖拽完成后,在update的回调函数中又重新排序了存放数据的数组.但 ...

  9. vue2.0使用Sortable.js实现的拖拽功能

    简介 在使用vue1.x之前的版本的时候,页面中的拖拽功能,我在项目中是直接用的jQuery ui中的sortable.js,只是在拖拽完成后,在update的回调函数中又重新排序了存放数据的数组.但 ...

随机推荐

  1. 量化投资学习笔记27——《Python机器学习应用》课程笔记01

    北京理工大学在线课程: http://www.icourse163.org/course/BIT-1001872001 机器学习分类 监督学习 无监督学习 半监督学习 强化学习 深度学习 Scikit ...

  2. SpringCloud学习之—Eureka集群搭建

    Eureka集群的搭建 上次说过了在SpringCloud应用中使用Eureka注册中心,用来对服务提供者进行服务注册与发现,但同时,它也是一个"微服务",单个应用使用空间有限,因 ...

  3. JavaScript之DOM基础

    概述 DOM(Document Object Model)文档对象模型,针对Html和XML的文档的对象API,是一项 W3C (World Wide Web Consortium) 标准.文档对象模 ...

  4. 04.JS逻辑结构

    前言:  学习一门编程语言的基本步骤(01)了解背景知识(02)搭建开发环境(03)语法规范(04)常量和变量(05)数据类型(06)数据类型转换(07)运算符(08)逻辑结构8.逻辑结构——logi ...

  5. Leetcode字典树-720:词典中最长的单词

    第一次做leetcode的题目,虽然做的是水题,但是菜鸟太菜,刚刚入门,这里记录一些基本的知识点.大佬看见请直接路过. https://leetcode-cn.com/problems/longest ...

  6. 【USACO】JZOJ,Luogu P2690 接苹果 (dp-线性动规)

    同步于CSDN:戳这里QAQ 来源:Luogu P2690,JZOJ 题目描述 很少有人知道奶牛爱吃苹果.农夫约翰的农场上有两棵苹果树(编号为 \(1\) 和 \(2\)), 每一棵树上都长满了苹果. ...

  7. SpringBoot支持SpringData es

    ElasticSearch CRUD 1.springboot springData es spring data 是spring对数据访问抽象.这些数据可以放入db,index,nosql等包含以下 ...

  8. 使用JDK工具进行Java服务器应用程序故障排除

    Java性能调优指南–有关提高Java代码性能的各种技巧. 最近又学到了很多新知识,感谢优锐课老师细致地讲解,这篇博客记录下自己所学所想. 1. 介绍 在Java世界中,我们大多数人习惯于在Java应 ...

  9. oracle中sql语句的to_date语法

    完整日期:TO_DATE('2009-4-28 00:00:00', 'yyyy-mm-dd hh24:mi:ss'); to_date('2008/09/20','yyyy/mm/dd') 创建视图 ...

  10. 初识Idea,部署Maven项目常见问题解决方案

    一.idea 中项目右键没有run命令选项,没有maven的clean与install选项 解决方案:安装Maven Helper插件 二.Idea不识别java文件(类文件显示橙色) 解决方案: 第 ...