使用js实现的简单拖拽效果
来源: 阅读:1008 次 日期:2015-03-19 14:50:32
温馨提示: 小编为您整理了“使用js实现的简单拖拽效果”,方便广大网友查阅!

本文给大家分享的是使用纯JS实现的简单的拖拽效果的插件,算是对自己javascript学习的一个小的检验,如果小伙伴们需要复杂的拖拽效果,还是考虑jQuery的draggable吧,更成熟一些。

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

 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>

使用js实现的简单拖拽效果 三联

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>

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");

}

效果如下:

以上所述就是本文的全部内容了,希望能对大家更加熟练的掌握javascript有所帮助。

更多信息请查看IT技术专栏

更多信息请查看脚本栏目
由于各方面情况的不断调整与变化, 提供的所有考试信息和咨询回复仅供参考,敬请考生以权威部门公布的正式信息和咨询为准!

2025国考·省考课程试听报名

  • 报班类型
  • 姓名
  • 手机号
  • 验证码
关于我们 | 联系我们 | 人才招聘 | 网站声明 | 网站帮助 | 非正式的简要咨询 | 简要咨询须知 | 加入群交流 | 手机站点 | 投诉建议
工业和信息化部备案号:滇ICP备2023014141号-1 云南省教育厅备案号:云教ICP备0901021 滇公网安备53010202001879号 人力资源服务许可证:(云)人服证字(2023)第0102001523号
云南网警备案专用图标
联系电话:0871-65317125(9:00—18:00) 获取招聘考试信息及咨询关注公众号:
咨询QQ:526150442(9:00—18:00)版权所有:
云南网警报警专用图标
Baidu
map