前端开发的时候,有好多地方用到拖拽效果,当然 http://jqueryui.com/draggable/  是个不错的选择,but 我是个打破砂锅问到底的人,抽点时间用js小小的实现了类似的插件,话不多说。

  1.  first: html和css

    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
    <style>
    * {
    margin: 0;
    padding: 0;
    } #div1 {
    position: absolute;
    width: 100px;
    height: 100px;
    cursor: move;
    background-color: red;
    }
    </style>
    </head>
    <body>
    <div id="div1">
    </div>
    </body>
    </html>

  2. now,先把主要算法实现一下:
     <script>
    window.onload = function () {
    //获取需要拖拽的div
    var div1 = document.getElementById("div1");
    //添加鼠标按下事件
    div1.onmousedown = function (evt) {
    var oEvent = evt || event;
    //获取按下鼠标到div left top的距离
    var distanceX = oEvent.clientX - div1.offsetLeft;
    var distanceY = oEvent.clientX - div1.offsetTop;
    //添加doc滑动时间
    document.onmousemove = function (evt) {
    var oEvent = evt || event;
    //重新计算div的left top值
    var left = oEvent.clientX - distanceX;
    var top = oEvent.clientY - distanceY; //left 当小于等于零时,设置为零 防止div拖出document之外
    if (left <= 0) {
    left = 0;
    }
    //当left 超过文档右边界 设置为右边界
    else if (left >= document.documentElement.clientWidth - div1.offsetWidth) {
    left = document.documentElement.clientWidth - div1.offsetWidth;
    }
    if (top <= 0) {
    top = 0;
    }
    else if (top >= document.documentElement.clientHeight - div1.offsetHeight) {
    top = document.documentElement.clientHeight - div1.offsetHeight;
    } //重新给div赋值
    div1.style.top = top + "px";
    div1.style.left = left + "px";
    }
    //添加鼠标抬起事件
    div1.onmouseup = function () {
    //清空事件
    document.onmousemove = null;
    div1.onmouseup = null;
    }
    }
    } </script>
  3. yeah,使用面向对象实现一下
    <style>
    * {
    margin:0;
    padding:0;
    }
    #div1 {
    width: 100px;
    height: 100px;
    background-color: red;
    }
    #div2 {
    background-color:yellow;
    width:100px;
    height:100px;
    }
    </style> <div id="div1"></div>
    <div id="div2"></div>

    js Draggle class:

     function Drag(id) {
    this.div = document.getElementById(id);
    if (this.div) {
    this.div.style.cursor = "move";
    this.div.style.position = "absolute";
    } this.disX = 0;
    this.disY = 0;
    var _this = this; this.div.onmousedown = function (evt) {
    _this.getDistance(evt); document.onmousemove = function (evt) {
    _this.setPosition(evt);
    } _this.div.onmouseup = function () {
    _this.clearEvent();
    }
    }
    } Drag.prototype.getDistance = function (evt) {
    var oEvent = evt || event;
    this.disX = oEvent.clientX - this.div.offsetLeft;
    this.disY = oEvent.clientY - this.div.offsetTop;
    } Drag.prototype.setPosition = function (evt) {
    var oEvent = evt || event;
    var l = oEvent.clientX - this.disX;
    var t = oEvent.clientY - this.disY;
    if (l <= 0) {
    l = 0;
    }
    else if (l >= document.documentElement.clientWidth - this.div.offsetWidth) {
    l = document.documentElement.clientWidth - this.div.offsetWidth;
    }
    if (t <= 0) {
    t = 0;
    }
    else if (t >= document.documentElement.clientHeight - this.div.offsetHeight) {
    t = document.documentElement.clientHeight - this.div.offsetHeight;
    }
    this.div.style.left = l + "px";
    this.div.style.top = t + "px";
    } Drag.prototype.clearEvent = function () {
    this.div.onmouseup = null;
    document.onmousemove = null;
    }

    at last:最终实现:

      window.onload = function () {
    new Drag("div1");
    new Drag("div2");
    }

    效果如下:

  入园子已经三载有余,平时也爱在各位经营的园子溜达汲取知识。之前也有过想开一个自己的园子,但总因为这样那样的事情把这事遗忘了。最近发现身边的@考拉熊http://home.cnblogs.com/u/rccc/好早已经有了这个习惯。人啊,怎么说呢,总是向比自己强的人看起!加油 ,u can @o(∩_∩)o 哈哈

js插件-简单拖拽的更多相关文章

  1. 好玩的原生js的简单拖拽

    这个拖拽的图片不是唯一的,拿到代码自己添加一张照片就可以啦 <!DOCTYPE html><html> <head> <meta charset=" ...

  2. js实现简单拖拽效果

    方法如下: var params = { left: 0, top: 0, currentX: 0, currentY: 0, flag: false }; var getCss = function ...

  3. php和js实现文件拖拽上传

    Dropzone.js实现文件拖拽上传 http://www.sucaihuo.com/php/1399.html demo http://www.sucaihuo.com/jquery/13/139 ...

  4. JS Event 鼠标拖拽事件

    <!DOCTYPE html><html> <head>        <meta charset="UTF-8">         ...

  5. 移动端多个DIV简单拖拽功能

    移动端多个DIV简单拖拽功能. 这个demo与之前写的一个例子差不了多少,只是这个多了一层遍历而已. <!DOCTYPE html> <html lang="en" ...

  6. jquery插件-自由拖拽

    最近工作不是很忙,学习之余想整理一些代码出来,首先想到的就是是js拖拽. 两年前去某公司面试的时候,曾经被问过这个问题,如何在页面上拖放元素,尽管现在看起来很简单,但当时的我半点思路都没有,面试想当然 ...

  7. Dropzone.js实现文件拖拽上传

    dropzone.js是一个开源的JavaScript库,提供 AJAX 异步文件上传功能,支持拖拽文件.支持最大文件大小.支持设置文件类型.支持预览上传结果,不依赖jQuery库. 使用Dropzo ...

  8. jQuery插件(拖拽)

    拖曳插件draggable的功能是拖动被绑定的元素,当这个jQuery UI插件与元素绑定后,可以通过调用draggable()方法,实现各种拖曳元素的效果,调用格式如下: $(selector). ...

  9. 纯JS实现可拖拽表单

    转载注明出处!!! 转载注明出处!!! 转载注明出处!!! 因为要用到可拖拽表单,个人要比较喜欢自己动手,不怎么喜欢在不懂实现或者原理的情况下用插件,所以查找资料实现了一个. 思路:放入:用mouse ...

随机推荐

  1. 【leetcode】636. Exclusive Time of Functions

    题目如下: 解题思路:本题和括号匹配问题有点像,用栈比较适合.一个元素入栈前,如果自己的状态是“start”,则直接入栈:如果是end则判断和栈顶的元素是否id相同并且状态是“start”,如果满足这 ...

  2. 因为信仰,油画专业的他自学开发进击阿里技术P9

    大约在1年以前,阿里云视频云团队来了一位热心和气.爱好广泛的老干部新同学,他就是资深技术专家郝冲,花名和招,寓意“和气招财”. 有人说程序员只喜欢安静地写代码,和招偏偏一个户外运动爱好者.他擅长滑雪, ...

  3. spring-boot整合Mybatis案例

    1.运行环境 开发工具:intellij idea JDK版本:1.8 项目管理工具:Maven 3.2.5 2.Maven Plugin管理 <?xml version="1.0&q ...

  4. DOS基础使用专题(强烈推荐)2

    DOS下硬件设备的使用与设置 由于电脑的普及和应用的日益深入,为了满足人们的需要,电脑的功能随着它的发展变得越来越强大,硬件设备也越来越多,如从原来的ISA及PCI声卡.调制解调器等到现在的USB硬盘 ...

  5. git分支merger

  6. vue循环渲染变量类样式

    由于需求的需要,将五种不同的颜色样式通过v-for进行遍历渲染,所以我这里采用绑定类函数进行判断方式.代码: 效果: 灵感来自:https://www.jianshu.com/p/33e181be3d ...

  7. bzoj 4161 Shlw loves matrixI——常系数线性齐次递推

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4161 还是不能理解矩阵…… 关于不用矩阵理解的方法:https://blog.csdn.ne ...

  8. 2018-2019-2 《Java程序设计》第11周学习总结

    20175319 2018-2019-2 <Java程序设计>第11周学习总结 教材学习内容总结 本周学习<Java程序设计>第十三章java网络编程: - URL类 URL类 ...

  9. Cent OS (三)vi文本编辑操作

    序号 命令 命令含义 1 echo            2 vi/vim    编辑 3 cat     cat 命令用于连接文件并打印到标准输出设备上. 4 more   分屏显示文本内容 5 l ...

  10. T1215:迷宫

    [题目描述] 一天Extense在森林里探险的时候不小心走入了一个迷宫,迷宫可以看成是由n * n的格点组成,每个格点只有2种状态,.和#,前者表示可以通行后者表示不能通行.同时当Extense处在某 ...