手机
当前位置:查字典教程网 >编程开发 >Javascript教程 >使用js实现的简单拖拽效果
使用js实现的简单拖拽效果
摘要:前端开发的时候,有好多地方用到拖拽效果,当然http://jqueryui.com/draggable/是个不错的选择,but我是个打破砂锅...

前端开发的时候,有好多地方用到拖拽效果,当然 http://jqueryui.com/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实现的简单拖拽效果1

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

}

效果如下:

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

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

【使用js实现的简单拖拽效果】相关文章:

JS实现简单路由器功能的方法

javascript实现淡蓝色的鼠标拖动选择框实例

angular2使用简单介绍

javascript实现带下拉子菜单的导航菜单效果

COOL而实用的动态效果

js实现仿Windows风格选项卡和按钮效果

js实现精美的图片跟随鼠标效果实例

JS实现模拟风力的雪花飘落效果

js+html5实现canvas绘制简单矩形的方法

js实现简单锁屏功能实例

精品推荐
分类导航