JS基于面向对象实现的拖拽库实例

JS基于面向对象实现的拖拽库实例,第1张

本文实例讲述了JS基于面向对象实现的拖拽库。分享给大家供大家参考。具体如下:

这是缓棚一个面向对象的JS拖拽库,可设置铅高水平锁定、垂直锁定、锁定位置、锁定范围等,设定槐哪尺这些范围后,只能在设定的模式下拖动,我觉得这是个挺不错的拖拽实例。

运行效果截图如下:

在线演示地址如下:

http://demo.jb51.net/js/2015/js-mxdx-draw-plug-codes/

具体代码如下:

<!DOCTYPE

html

PUBLIC

"-//W3C//DTD

XHTML

1.0

Transitional//EN"

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html

xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta

http-equiv="Content-Type"

content="text/html

charset=utf-8"

/>

<title>拖拽库</title>

<style

type="text/css">

div,h2,p{margin:0padding:0}

body{font:14px/1.5

arial}

#box{width:100pxheight:100pxbackground:#fef4ebpadding:5pxmargin:50pxborder:1px

solid

#f60}

#box

.title{height:25pxbackground:#f60}

#tool{margin-bottom:10px}

</style>

<script

type="text/javascript">

function

Drag()

{

//初始化

this.initialize.apply(this,

arguments)

}

Drag.prototype

=

{

//初始化

initialize

:

function

(drag,

options)

{

this.drag

=

this.$(drag)

this._x

=

this._y

=

0

this._moveDrag

=

this.bind(this,

this.moveDrag)

this._stopDrag

=

this.bind(this,

this.stopDrag)

this.setOptions(options)

this.handle

=

this.$(this.options.handle)

this.maxContainer

=

this.$(this.options.maxContainer)

this.maxTop

=

Math.max(this.maxContainer.clientHeight,

this.maxContainer.scrollHeight)

-

this.drag.offsetHeight

this.maxLeft

=

Math.max(this.maxContainer.clientWidth,

this.maxContainer.scrollWidth)

-

this.drag.offsetWidth

this.limit

=

this.options.limit

this.lockX

=

this.options.lockX

this.lockY

=

this.options.lockY

this.lock

=

this.options.lock

this.onStart

=

this.options.onStart

this.onMove

=

this.options.onMove

this.onStop

=

this.options.onStop

this.handle.style.cursor

=

"move"

this.changeLayout()

this.addHandler(this.handle,

"mousedown",

this.bind(this,

this.startDrag))

},

changeLayout

:

function

()

{

this.drag.style.top

=

this.drag.offsetTop

+

"px"

this.drag.style.left

=

this.drag.offsetLeft

+

"px"

this.drag.style.position

=

"absolute"

this.drag.style.margin

=

"0"

},

startDrag

:

function

(event)

{

var

event

=

event

||

window.event

this._x

=

event.clientX

-

this.drag.offsetLeft

this._y

=

event.clientY

-

this.drag.offsetTop

this.addHandler(document,

"mousemove",

this._moveDrag)

this.addHandler(document,

"mouseup",

this._stopDrag)

event.preventDefault

&&

event.preventDefault()

this.handle.setCapture

&&

this.handle.setCapture()

this.onStart()

},

moveDrag

:

function

(event)

{

var

event

=

event

||

window.event

var

iTop

=

event.clientY

-

this._y

var

iLeft

=

event.clientX

-

this._x

if

(this.lock)

return

this.limit

&&

(iTop

<

0

&&

(iTop

=

0),

iLeft

<

0

&&

(iLeft

=

0),

iTop

>

this.maxTop

&&

(iTop

=

this.maxTop),

iLeft

>

this.maxLeft

&&

(iLeft

=

this.maxLeft))

this.lockY

||

(this.drag.style.top

=

iTop

+

"px")

this.lockX

||

(this.drag.style.left

=

iLeft

+

"px")

event.preventDefault

&&

event.preventDefault()

this.onMove()

},

stopDrag

:

function

()

{

this.removeHandler(document,

"mousemove",

this._moveDrag)

this.removeHandler(document,

"mouseup",

this._stopDrag)

this.handle.releaseCapture

&&

this.handle.releaseCapture()

this.onStop()

},

//参数设置

setOptions

:

function

(options)

{

this.options

=

{

handle:

this.drag,

//事件对象

limit:

true,

//锁定范围

lock:

false,

//锁定位置

lockX:

false,

//锁定水平位置

lockY:

false,

//锁定垂直位置

maxContainer:

document.documentElement

||

document.body,

//指定限制容器

onStart:

function

()

{},

//开始时回调函数

onMove:

function

()

{},

//拖拽时回调函数

onStop:

function

()

{}

//停止时回调函数

}

for

(var

p

in

options)

this.options[p]

=

options[p]

},

//获取id

$

:

function

(id)

{

return

typeof

id

===

"string"

?

document.getElementById(id)

:

id

},

//添加绑定事件

addHandler

:

function

(oElement,

sEventType,

fnHandler)

{

return

oElement.addEventListener

?

oElement.addEventListener(sEventType,

fnHandler,

false)

:

oElement.attachEvent("on"

+

sEventType,

fnHandler)

},

//删除绑定事件

removeHandler

:

function

(oElement,

sEventType,

fnHandler)

{

return

oElement.removeEventListener

?

oElement.removeEventListener(sEventType,

fnHandler,

false)

:

oElement.detachEvent("on"

+

sEventType,

fnHandler)

},

//绑定事件到对象

bind

:

function

(object,

fnHandler)

{

return

function

()

{

return

fnHandler.apply(object,

arguments)

}

}

}

//应用

window.onload

=

function

()

{

var

oBox

=

document.getElementById("box")

var

oTitle

=

oBox.getElementsByTagName("h2")[0]

var

oSpan

=

document.getElementsByTagName("span")[0]

var

oDrag

=

new

Drag(oBox,

{handle:oTitle,

limit:false})

var

aInput

=

document.getElementsByTagName("input")

//锁定范围接口

aInput[0].onclick

=

function

()

{

oDrag.limit

=

!oDrag.limit

this.value

=

oDrag.limit

?

"取消锁定范围"

:

"锁定范围"

}

//水平锁定接口

aInput[1].onclick

=

function

()

{

oDrag.lockX

=

!oDrag.lockX

this.value

=

oDrag.lockX

?

"取消水平锁定"

:

"水平锁定"

}

//垂直锁定接口

aInput[2].onclick

=

function

()

{

oDrag.lockY

=

!oDrag.lockY

this.value

=

oDrag.lockY

?

"取消垂直锁定"

:

"垂直锁定"

}

//锁定位置接口

aInput[3].onclick

=

function

()

{

oDrag.lock

=

!oDrag.lock

this.value

=

oDrag.lock

?

"取消锁定位置"

:

"锁定位置"

}

//开始拖拽时方

oDrag.onStart

=

function

()

{

oSpan.innerHTML

=

"开始拖拽"

}

//开始拖拽时方法

oDrag.onMove

=

function

()

{

oSpan.innerHTML

=

"left:"

+

this.drag.offsetLeft

+

",

top:"

+

this.drag.offsetTop

}

//开始拖拽时方法

oDrag.onStop

=

function

()

{

oSpan.innerHTML

=

"结束拖拽"

}

}

</script>

</head>

<body>

<div

id="tool">

<input

type="button"

value="锁定范围"

/>

<input

type="button"

value="水平锁定"

/>

<input

type="button"

value="垂直锁定"

/>

<input

type="button"

value="锁定位置"

/>

</div>

<p>拖放状态:<span>未开始</span></p>

<div

id="box">

<h2

class="title"></h2>

</div>

</body>

</html>

希望本文所述对大家的JavaScript程序设计有所帮助。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<HTML>

<HEAD>

<TITLE>New Document </TITLE>

<script language="javascript">

<!--//

String.prototype.RandomNumber=function (){var arg=argumentsvar n=1if(arg.length!=0){n=(!isNaN(parseInt(arg[0])))?parseInt(arg[0]):1}var chars=['0','1'洞老,'2','3','4','5','6','7','8','9']var res=""for(var i=0i<ni++){var id=Math.ceil(Math.random()*9)res+=chars[id]}return res}

function getCacNum(){

var ia = []

for (var i=0i<1000i++)

{

if (i!=0 &&i%3==0 &&i%5==0 &&i%7==0)

{

ia.push(i)

}

}

var restr = ""

for (var i=0i<ia.lengthi++)

{

if(i!=0 &&i%6==0){

restr+="\r\n"

restr+=ia[i]

}else{

if (restr == "")

{

restr = ia[i]

}else{

restr+=","+ia[i]

}

}

}

restr = "可以纳橡升被 3,5,7 同时整除的数有:\r\n"+restr

return restr

}

function getLuckNum(luckNum){

var d = {"a":0,"b":0,"c":0}

var re = {"flag":false,"如简msg":"你不够幸运哦 :("}

d.a = "".RandomNumber(1)

d.b = "".RandomNumber(1)

d.c = "".RandomNumber(1)

re.msg = "您获得的3个数字是 :"+d.a+","+d.b+","+d.c

if (d.a == luckNum || d.b == luckNum || d.c == luckNum)

{

re.flag = true

re.msg = re.msg + " 其中包含幸运数字 "+luckNum+" :) 恭喜你了!"

}else{

re.msg = re.msg + " 其中未包含幸运数字 "+luckNum+" :( 继续努力!"

}

return re

}

//--->

</script>

</HEAD>

<BODY>

<TEXTAREA NAME="outText" id="outText" ROWS="15" COLS="40"></TEXTAREA>

<BR>

<input type="button" value="获得被3,5,7整数的数" onclick="document.getElementById('outText').value = getCacNum()">

 

<input type="button" value="幸运数字8" onclick="alert(getLuckNum(8).msg)">

</BODY>

</HTML>


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12561808.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存