效果图:

可以通过 https://littlehiuman.github.io/06-Dragable/index.html 查看效果。

https://github.com/littleHiuman/littleHiuman.github.io 求点star~~~

CSS:

* {
margin:;
padding:;
} #box {
margin: 10px;
position: relative;
width: 400px;
height: 400px;
background: #ccc;
border: 1px solid #333;
} #dragBox {
width: 50px;
height: 50px;
text-align: center;
line-height: 50px;
position: absolute;
background: blue;
cursor: move;
font-size: 12px;
color: #fff;
}

HTML:

<div id="box">
<div id="dragBox">拖我</div>
</div>

JAVASCRIPT:

var VVG = {};  //命名空间
VVG.DOM = {
$: function (id) { //创建方便的选择符
return typeof id == "string" ? document.getElementById(id) : id;
},
bindEvent: function (node, type, func) { //事件绑定方法
if (node.addEventListener) {
node.addEventListener(type, func, false);
} else if (node.attachEvent) {
node.attachEvent("on" + type, func);
} else {
node["on" + type] = func;
}
},
getEvent: function (event) { //获取事件
return event ? event : window.event;
},
getTarget: function (event) { //获取事件目标
return event.target || event.srcElement;
}
}
var DragDrop = function () { //新建一个返回对象的函数
var box = VVG.DOM.$("box"); //获取外围BOX
var dragBox = VVG.DOM.$("dragBox");//获取需要拖动的BOX
var dragging = null; //初始化对象
function drag(event) { //事件执行函数
event = VVG.DOM.getEvent(event);
var target = VVG.DOM.getTarget(event);
switch (event.type) {//判断事件类型
case "mousedown":
if (target.id == "dragBox") { //当事件对象的ID等于要拖动的BOX的ID时
dragging = target; //赋值到拖动目标
}
break;
case "mousemove":
if (dragging) { //当有拖动目标时执行
sTop = document.documentElement.scrollTop || document.body.scrollTop; //当有滚动条的时候卷去页面的高度
dragging.style.left = (event.clientX - box.offsetLeft - dragBox.offsetWidth / 2) + "px";
dragging.style.top = (event.clientY + sTop - box.offsetTop - dragBox.offsetHeight / 2) + "px";
var left = parseInt(dragging.style.left);
var top = parseInt(dragging.style.top);
//console.log("left:"+left+"-----top:"+top + "-------sTop:"+sTop);
// 比较坐标是否超出外围的BOX
if (left < 0) {
dragging.style.left = 0 + "px";
}
if (top < 0) {
dragging.style.top = 0 + "px";
}
if (left > box.offsetWidth - dragBox.offsetWidth) {
dragging.style.left = (box.offsetWidth - dragBox.offsetWidth - 2) + "px";
}
if (top > box.offsetHeight - dragBox.offsetHeight) {
dragging.style.top = (box.offsetHeight - dragBox.offsetHeight - 2) + "px";
}
}
break;
case "mouseup":
// 清空拖动目标
dragging = null;
break;
}
};
return {
dragStart: function () {
// 绑定事件
VVG.DOM.bindEvent(document, "mousedown", drag);
VVG.DOM.bindEvent(document, "mousemove", drag);
VVG.DOM.bindEvent(document, "mouseup", drag);
}
}
}();
DragDrop.dragStart();

转自:http://www.cnblogs.com/NNUF/archive/2012/04/02/2430132.html

javascript简单拖拽(鼠标事件 mousedown mousemove mouseup)的更多相关文章

  1. js 拖拽 鼠标事件,放大镜效果

    设置网站播放视频 只有一个是播放的 //需要引入jquery var v = $("video") v.bind("play",function(){ for( ...

  2. Javascript:简单拖拽效果的实现

    核心代码: /* *完成一个拖拽事件由三大事件组成: *1:onmousedown:选择元素 *2:onmousemove:移动元素 *3:onmouseup:释放元素 */ function dra ...

  3. JavaScript实现拖拽元素对齐到网格(每次移动固定距离)

    这几天在做一个拖拽元素的附加功能,就是对齐到网格,实际上就是确定好元素的初始位置,然后拖拽元素时,每次移动固定的距离.让元素都可以在网格内对齐.先上效果图,然后在详细说明一下细节问题 做了一个gif图 ...

  4. 原生拖拽,拖放事件(drag and drop)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. JavaScript进阶系列07,鼠标事件

    鼠标事件有Keydown, Keyup, Keypress,但Keypress与Keydown和Keyup不同,如果按ctrl, shift, caps lock......等修饰键,不会触发Keyp ...

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

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

  7. [javascript]一种兼容性比较好的简单拖拽

    作为一个马上要找工作.非计算机专业.热爱前端的大四狗,最近开始疯狂写demo.看书,准备九.十月份的校招. 晚上用js实现了一个比较简单(low)的拖拽效果,初步测试兼容性还是不错的,于是写一段小博文 ...

  8. Javascript自由拖拽类

    基本拖拽配置 new Dragdrop({target 拖拽元素 HTMLElemnt 必选bridge 指定鼠标按下哪个元素时开始拖拽,实现模态对话框时用到 dragable 是否可拖拽 (true ...

  9. Unity UGUI 实现简单拖拽功能

    说到拖拽,那必然离不开坐标,UGUI 的坐标有点不一样,它有两种坐标,一种是屏幕坐标,还有一种就是 UI 在Canvas内的坐标(暂时叫做ugui坐标),这两个坐标是不一样的,所以拖拽就需要转换. 因 ...

随机推荐

  1. 19,Ubuntu安装之python开发

      什么??公司要用Ubuntu(乌班图)?不会用??怎么进行python开发??? 乌班图操作系统下载地址:http://releases.ubuntu.com/18.04/ubuntu-18.04 ...

  2. 3437: 小P的牧场

    3437: 小P的牧场 思路 斜率优化. dp[i]表示到第i个点(第i个点按控制台)的最小代价. 代码 #include<cstdio> #include<iostream> ...

  3. Android stadio Switch repository Android stadio切换仓库

    Android stadio 有时候,有很多module. 这些module 都有自己的仓库.也就是不在一块.那么,Android stadio 默认管理的就是根git. 如图,画对号的就是默认的. ...

  4. pdo事务

    $pdo->beginTransaction() $pdo->commit() $pdo->rollback();

  5. 简洁好看的form样式收藏

    本文转载自 http://www.laozuo.org/3495.html 为了方便自己查阅所以搬运过来,如有侵权希望原作者联系我删除不要突然去法院告我呀! 颜色样式啥的都可以根据需求自己调整的,这些 ...

  6. 《Cracking the Coding Interview》——第2章:链表——题目2

    2014-03-18 02:24 题目:给定一个单链表,找出倒数第K个节点. 解法:让一个指针先走K步,然后俩指针一起走到尽头.当然也可以先走到尽头数出链表的长度,然后第二次少走K步.其实耗费的工夫是 ...

  7. USACO刷题之路,开始了

    几天前,重新开始刷题了. 重新刷题有几个原因: 1.曾经的OI经历,如今除了悟性高些.知识多些,大多已经遗忘.不希望真的让之前的OI水平就这么丢了. 2.越来越觉得,刷题真的是一件很开心的事情.大学中 ...

  8. 油田(DFS)

    //DFS:油田问题 #include <iostream> using namespace std; ][]; int n,m; //一个网格的8个方向 ][] = {{-,-},{-, ...

  9. paramiko类Fabric主机管理

    环境:Linux python3.5 要求:类 Fabric 主机管理程序开发:1. 运行程序列出主机组或者主机列表2. 选择指定主机或主机组3. 选择让主机或者主机组执行命令或者向其传输文件(上传/ ...

  10. 孤荷凌寒自学python第四十五天Python初学基础基本结束的下阶段预安装准备

     孤荷凌寒自学python第四十五天Python初学基础基本结束的下阶段预安装准备 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 今天本来应当继续学习Python的数据库操作,但根据过去我自 ...