前端开发的时候,有好多地方用到拖拽效果,当然 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. 转载:Eclipse下的java工程目录

    原文链接:https://www.cnblogs.com/milantgh/p/4029003.html 对新手来讲,一个Java工程内部的多个文件夹经常会让大家困惑.更可恶的是莫名其妙的路径问题,在 ...

  2. poj 3258:River Hopscotch(二分)

    题目链接 L为N+2块石子中最右边石子位置,0最左,M为可移除块数,求移除后相邻石子可达到的最大距离. #include<iostream> #include<cstdio> ...

  3. springboot2集成pagehelper

    springboot2集成pagehelper超级简单,本示例直接抄袭官方示例,仅将数据库由H2改成MySQL而已. 1. pom.xml <?xml version="1.0&quo ...

  4. 攻防世界 WEB篇

    0x01 ics-06 查看源码发现:index.php 一开始直接用sqlmap跑了下没有发现注入,然后用brupsuite爆破参数 0x02 NewsCenter SQL注入中的POST注入,查阅 ...

  5. 全面质量管理体系运转的基本方法 PDCA

    PDCA管理循环 PDCA循环作为全面质量管理体系运转的基本方法,其实是需要搜集大量数据资料,并综合运用各种管理技术和方法.全面质量管理活动的全部过程,就是质量计划的制订和组织实现的过程,这个过程就是 ...

  6. sublime常用基础插件合集

    插件介绍 Package Control 功能:安装包管理简介:sublime插件控制台,提供添加.删除.禁用.查找插件等功能使用方法:快捷键 Ctrl+Shift+P,输入 install 选中In ...

  7. python中递归函数

    python中的 递归函数,是指的是函数在函数内部调用自己的函数 需要满足两个条件,一,需要有一个明确的终止条件 二,需要函数自己在内部调用自己

  8. python/pandas 正则表达式 re模块

    目录 正则解说 中文字符集 re模块常用方法 1.正则解说 数量词的贪婪模式与非贪婪模式 正则表达式通常用于在文本中查找匹配的字符串.Python里数量词默认是贪婪的(在少数语言里也可能是默认非贪婪) ...

  9. centOS不显示ipv4地址的解决办法

    版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/lx_Frolf/article/deta ...

  10. Linux(Ubuntu)常用命令(一)

    Linux先知: Linux历史: 关于这个我就不再多说了,其实是一个很有意思的故事串,网上找下一大堆. 类Unix系统目录结构: ubuntu没有盘符这个概念,只有一个根目录/,所有文件都在它下面 ...