以下的页面中放了两个div,能够通过鼠标拖拽这两个元素到任何位置。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamFja2ZydWVk/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

实现该效果的HTML页面代码例如以下所看到的:

<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<style type="text/css">
#xixi {
width:200px; height: 200px; position:absolute;
left: 50px; top: 50px; background-color: lightcyan;
}
#haha {
position:absolute; left:300px; top:300px;
background-color: yellow; width:200px; height: 200px;
} </style>
<script type="text/javascript" src="js/mylib.js"></script>
<script type="text/javascript">
window.onload = function() {
var obj1 = createDraggableObject();
var obj2 = createDraggableObject();
obj1.init($('xixi'));
obj2.init($('haha'));
};
</script> </head>
<body>
<div id="xixi">Fuck!</div>
<div id="haha">Shit!</div>
</body>
</html>

外部JavaScript文件代码例如以下所看到的:

/**
* 依据id获取页面元素
* @param id
* @returns {HTMLElement}
*/
function $(id) {
return document.getElementById(id);
} /**
* 创建可拖拽对象的工厂方法
*/
function createDraggableObject() {
return {
obj: null, left: 0, top: 0,
oldX: 0, oldY: 0, isMouseLeftButtonDown: false,
init: function (obj) {
this.obj = obj;
var that = this;
this.obj.onmousedown = function (args) {
var evt = args || event;
this.style.zIndex = 100;
that.isMouseLeftButtonDown = true;
that.oldX = evt.clientX;
that.oldY = evt.clientY;
if (this.currentStyle) {
that.left = parseInt(this.currentStyle.left);
that.top = parseInt(this.currentStyle.top);
}
else {
var divStyle = document.defaultView.getComputedStyle(this, null);
that.left = parseInt(divStyle.left);
that.top = parseInt(divStyle.top);
}
};
this.obj.onmousemove = function (args) {
that.move(args || event);
};
this.obj.onmouseup = function () {
that.isMouseLeftButtonDown = false;
this.style.zIndex = 0;
};
},
move: function (evt) {
if (this.isMouseLeftButtonDown) {
var dx = parseInt(evt.clientX - this.oldX);
var dy = parseInt(evt.clientY - this.oldY);
this.obj.style.left = (this.left + dx) + 'px';
this.obj.style.top = (this.top + dy) + 'px';
}
}
};
}

JavaScript实现网页元素的拖拽效果的更多相关文章

  1. JavaScript实现最简单的拖拽效果

    一.一些无关痛痒的唠叨 拖拽还是挺不错的一个页面效果,我个人认为,其生命力在于可以让用户自己做一些操作,所谓自定义.例如: ①浏览器标签顺序的拖拽切换 现在基本上所有的选项卡式的浏览器都有顺序拖拽切换 ...

  2. 用JavaScript实现div的鼠标拖拽效果

    实现原理鼠标按下时根据onmousemove事件来动态获取鼠标坐标位置以此来更新div的位置,实现的前提时div要有一个定位效果,不然的话是移动不了它的. HTML <div class=&qu ...

  3. JavaScript实现水平进度条拖拽效果

    <html> <head> <meta charset="UTF-8"> <title>Document</title> ...

  4. 使用mousedown、mousemove、mouseup实现拖拽效果

    如何实现一个元素的拖拽效果,使用原生的js实现,习惯了jquery的同学们,你们自己写了吗?N久使用mvvm框架,不写jquery的东西,感觉自己完全不会了. 话不多说,直接上code.本例子以简单的 ...

  5. javascript小实例,PC网页里的拖拽

    几年前,我参与设计开发一个房产网的项目,我负责前端工作,由于项目经理要求比较高,参考了很多房产类网站比较优秀的功能,想把别人比较优秀的设计和想法集合到一起,那时的设计稿和功能实现,简直就是改了又改,今 ...

  6. javascript小实例,PC网页里的拖拽(转)

    这是现在的效果,可能改了一些,原来的效果是,里面的这张图是可以上下左右拖动的,然后房子上面的显示的楼栋号,也跟着图片一起移动,当时js能力还不行,未能实现项目经理的要求,不过后来项目经理又把这个效果推 ...

  7. 拖拽系列一、JavaScript实现简单的拖拽效果

        前端拖拽相关应用汇总 在现实生活中就像男孩子牵着(拖着)女朋友的手穿过马路:从马路的一端走到另一端这种场景很常见: 而在前端开发中拖拽效果也算是前端开发中应用最常见.最普遍的特效:其拖拽涉及知 ...

  8. Javascript实现鼠标框选元素后拖拽被框选的元素

    之前需要做一个框选元素后拖拽被框选中的元素功能,在网上找资料做了一些修改,基本达到了需要的效果,希望对也需要实现框选后拖拽元素功能的人有用. 页面加载后效果 框选后的内容可以拖拽,如下图: 代码下载

  9. 学习笔记---Javascript事件Event、IE浏览器下的拖拽效果

    学习笔记---Javascript事件Event.IE浏览器下的拖拽效果     1. 关于event常用属性有returnValue(是否允许事件处理继续进行, false为停止继续操作).srcE ...

随机推荐

  1. 爬虫:Scrapy6 - Item Loaders

    Item Loaders 提供了一种便捷的方式填充抓取到的:Items.虽然 Items 可以使用自带的类字典形式的 API 填充,但是 Item Loaders 提供了更便捷的 API,可以分析原始 ...

  2. 记一次 pip list --outdated 错误

    在 Windows CMD 执行 pip list --outdated,出现如下错误:" [WinError 10061] 由于目标计算机积极拒绝,无法连接",原因是我之前用的源 ...

  3. Codeforces 954E Water Taps

    题目大意 有 $n$($1\le n\le 200000$)个变量 $x_1, x_2, \dots, x_n$,满足 \begin{equation} 0\le x_i \le a_i \label ...

  4. Surface机制(SurfaceFlinger服务)

    Android系统Surface机制的SurfaceFlinger服务的线程模型分析http://blog.csdn.net/luoshengyang/article/details/8062945

  5. jmeter的参数化方法汇总

    一.User Defined Variable 1.添加的位置 Add->Config Element->User Defined Variable 2.使用 变量phone添加成功后,在 ...

  6. python(6)-- 模块

    python模块: 定义:Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句. 作用:(a) 模块让你能够有逻辑地组织你 ...

  7. bzoj 1367 - sequence

    Description 给定一个序列\(t_1,t_2,\cdots,t_n\),求一个递增序列\(z_1<z_2<...<z_n\), 使得 \(R=|t_1−z_1|+|t_2− ...

  8. pat 团体天梯赛 L2-001. 紧急救援

    L2-001. 紧急救援 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国 ...

  9. Python之Django框架

    1.Django简介 Python下有多款不同的 Web 框架,Django是最有代表性的一种.许多成功的网站和APP都基于Django. Django是一个开源的Web应用框架,由Python写成. ...

  10. 输出前k大的数

    总时间限制: 10000ms单个测试点时间限制:1000ms内存限制:65536kB(noi) 描述 给定一个数组,统计前k大的数并且把这k个数从大到小输出. 输入 第一行包含一个整数n,表示数组的大 ...