html5 canvas平移

<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

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

<head>

<metahttp-equiv="Content-Type"content="text/html;charset=utf-8"/>

<title>jsdiv浮动层拖拽效果代码-站长素材</title>

<scripttype="text/javascript">

functionDrag()

{

//初始化

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)

{

varevent=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)

{

varevent=event||window.event;

variTop=event.clientY-this._y;

variLeft=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(varpinoptions)this.options[p]=options[p]

},

//获取id

$:function(id)

{

returntypeofid==="string"?document.getElementById(id):id

},

//添加绑定事件

addHandler:function(oElement,sEventType,fnHandler)

{

returnoElement.addEventListener?oElement.addEventListener(sEventType,fnHandler,false):oElement.attachEvent("on"+sEventType,fnHandler)

},

//删除绑定事件

removeHandler:function(oElement,sEventType,fnHandler)

{

returnoElement.removeEventListener?oElement.removeEventListener(sEventType,fnHandler,false):oElement.detachEvent("on"+sEventType,fnHandler)

},

//绑定事件到对象

bind:function(object,fnHandler)

{

returnfunction()

{

returnfnHandler.apply(object,arguments)

}

}

};

//应用

window.onload=function()

{

varoBox=document.getElementById("box");

varoTitle=document.getElementById("canvas");

varoDrag=newDrag(oBox,{handle:oTitle,limit:false});

varaInput=document.getElementsByTagName("input");

};

</script>

</head>

<body>

<divid="box"style="background:lightblue;padding:5px;margin:50px;border:1pxsolid#f60;">

<canvasid="canvas"width="4000"height="300">

</canvas>

</div>

</body>

</html>

相关推荐