html5 canvas pan

<!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>js div浮动层拖拽效果代码 - 站长素材</title>

<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()
},
//parameter setting
setOptions : function (options)
{
this.options =
{
handle: this.drag, //event object
limit: true, //Lock the range
lock: false, //Lock the position
lockX: false, //Lock the horizontal position
lockY: false, //Lock the vertical position
maxContainer: document.documentElement || document.body, //Specify the limit container
onStart: function () {}, //callback function when starting
onMove: function () {}, //callback function when dragging
onStop: function () {} //callback function when stopping
};
for (var p in options ) this.options[p] = options[p]
},
//get id
$ : function (id)
{
return typeof id === "string" ? document.getElementById(id) : id
},
//add binding Event
addHandler : function (oElement, sEventType, fnHandler)
{
return oElement.addEventListener ? oElement.addEventListener(sEventType, fnHandler, false) : oElement.attachEvent("on" + sEventType, fnHandler)
},
//Remove binding event
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 = document.getElementById("canvas");
var oDrag = new Drag(oBox, {handle:oTitle, limit:false});
var aInput = document.getElementsByTagName("input");





};
</script>
</head>
<body>
<div id="box" style="background:lightblue;padding:5px;margin:50px;border:1px solid #f60;">
<canvas id="canvas" width="4000" height="300">
  </canvas>
</div>
</body>
</html>

Guess you like

Origin http://10.200.1.11:23101/article/api/json?id=326988921&siteId=291194637