午夜视频免费看_日韩三级电影网站_国产精品久久一级_亚洲一级在线播放_人妻体内射精一区二区三区_91夜夜揉人人捏人人添红杏_91福利在线导航_国产又粗又猛又黄又爽无遮挡_欧美日韩一区在线播放_中文字幕一区二区三区四区不卡 _日日夜夜精品视频免费观看_欧美韩日一区二区三区

主頁 > 知識庫 > html5版canvas自由拼圖實例

html5版canvas自由拼圖實例

熱門標簽:呼和浩特外呼電銷系統排名 地圖標注位置能賺錢嗎 南通數據外呼系統推廣 外呼線穩定線路 外呼系統電話怎么投訴 邢臺縣地圖標注app 申請400電話流程簡介 pageadm實現地圖標注 阜陽企業外呼系統

本文實例講述了html5版canvas自由拼圖的實現方法。分享給大家供大家參考。具體方法如下:

代碼運行效果如下圖所示:

 

canvasElement.js代碼如下:


復制代碼
代碼如下:
define('canvasElement', [ '../multi_upload/core' ], function(S) {
var Canvas = window.Canvas || {};
(function () {
Canvas.Element = function() {};
Canvas.Element.prototype.fillBackground = true;
Canvas.Element.prototype.showcorners = false;
Canvas.Element.prototype.photoborder = true;
Canvas.Element.prototype.polaroid = false;
Canvas.Element.prototype._backgroundImg = null;
Canvas.Element.prototype._groupSelector = null;
Canvas.Element.prototype._aImages = null;
Canvas.Element.prototype._oContext = null;
Canvas.Element.prototype._oElement = null;
Canvas.Element.prototype._oConfig = null;
Canvas.Element.prototype._currentTransform = null;
Canvas.Element.prototype._prevTransform = null;
Canvas.Element.prototype.curAngle = null;
Canvas.Element.prototype.init = function(el, oConfig) {
if (el == '') {
return;
}
this._initElement(el);
this._initConfig(oConfig);
this._createCanvasBackground();
this._createContainer();
this._initEvents();
this._initCustomEvents();
};
Canvas.Element.prototype._initElement = function(el) {
this._oElement = document.getElementById(el);
this._oContextTop = this._oElement.getContext('2d');
};
Canvas.Element.prototype._initCustomEvents = function() {
this.onRotateStart = new Canvas.CustomEvent('onRotateStart');
this.onRotateMove = new Canvas.CustomEvent('onRotateMove');
this.onRotateComplete = new Canvas.CustomEvent('onRotateComplete');
this.onDragStart = new Canvas.CustomEvent('onDragStart');
this.onDragMove = new Canvas.CustomEvent('onDragMove');
this.onDragComplete = new Canvas.CustomEvent('onDragComplete');
};
Canvas.Element.prototype._initConfig = function(oConfig) {
this._oConfig = oConfig;
this._oElement.width = this._oConfig.width;
this._oElement.height = this._oConfig.height;
this._oElement.style.width = this._oConfig.width + 'px';
this._oElement.style.height = this._oConfig.height + 'px';
};
Canvas.Element.prototype._initEvents = function() {
var _this=this;
S(this._oElement).on('mousedown',function(e){
_this.onMouseDown(e);
});
S(this._oElement).on( 'mouseup', function(e){
_this.onMouseUp(e);
});
S(this._oElement).on('mousemove', function(e){
_this.onMouseMove(e);
});
};
Canvas.Element.prototype._createContainer = function() {
var canvasEl = document.createElement('canvas');
canvasEl.id = this._oElement.id + '-canvas-container';
var oContainer = this._oElement.parentNode.insertBefore(canvasEl, this._oElement);
oContainer.width = this._oConfig.width;
oContainer.height = this._oConfig.height;
oContainer.style.width = this._oConfig.width + 'px';
oContainer.style.height = this._oConfig.height + 'px';
this._oContextContainer = oContainer.getContext('2d');
};
Canvas.Element.prototype._createCanvasBackground = function() {
var canvasEl = document.createElement('canvas');
canvasEl.id = this._oElement.id + '-canvas-background';
var oBackground = this._oElement.parentNode.insertBefore(canvasEl, this._oElement);
oBackground.width = this._oConfig.width;
oBackground.height = this._oConfig.height;
oBackground.style.width = this._oConfig.width + 'px';
oBackground.style.height = this._oConfig.height + 'px';
this._oContextBackground = oBackground.getContext('2d');
};
Canvas.Element.prototype.setCanvasBackground = function(oImg) {
this._backgroundImg = oImg;
var originalImgSize = oImg.getOriginalSize();
this._oContextBackground.drawImage(oImg._oElement, 0, 0, originalImgSize.width, originalImgSize.height);
};
Canvas.Element.prototype.onMouseUp = function(e) {
if (this._aImages == null) {
return;
}
if (this._currentTransform) {
this._currentTransform.target.setImageCoords();
}
if (this._currentTransform != null && this._currentTransform.action == "rotate") {
this.onRotateComplete.fire(e);
} else if (this._currentTransform != null && this._currentTransform.action == "drag") {
this.onDragComplete.fire(e);
}
this._currentTransform = null;
this._groupSelector = null;
this.renderTop();
};
Canvas.Element.prototype.onMouseDown = function(e) {
var mp = this.findMousePosition(e);
if (this._currentTransform != null || this._aImages == null) {
return;
}
var oImg = this.findTargetImage(mp, false);
if (!oImg) {
this._groupSelector = { ex: mp.ex, ey: mp.ey,
top: 0, left: 0 };
}
else {
var action = (!this.findTargetCorner(mp, oImg)) ? 'drag' : 'rotate';
if (action == "rotate") {
this.onRotateMove.fire(e);
} else if (action == "drag") {
this.onDragMove.fire(e);
}
this._prevTransform=this._currentTransform = {
target: oImg,
action: action,
scalex: oImg.scalex,
offsetX: mp.ex - oImg.left,
offsetY: mp.ey - oImg.top,
ex: mp.ex, ey: mp.ey,
left: oImg.left, top: oImg.top,
theta: oImg.theta
};
$('canvas_menu').style.transform='rotate('+oImg.theta*180/3.14+'deg)';
$('canvas_menu').style.left=oImg.left+"px";
$('canvas_menu').style.top=oImg.top+"px";
$('canvas_menu').style.display="block";
this.renderAll(false,false);
}
};
Canvas.Element.prototype.onMouseMove = function(e) {
var mp = this.findMousePosition(e);
if (this._aImages == null) {
return;
}
if (this._groupSelector != null) {
this._groupSelector.left = mp.ex - this._groupSelector.ex;
this._groupSelector.top = mp.ey - this._groupSelector.ey;
this.renderTop();
}
else if (this._currentTransform == null) {
var targetImg = this.findTargetImage(mp, true);
this.setCursor(mp, targetImg);
}
else {
if (this._currentTransform.action == 'rotate') {
this.rotateImage(mp);
this.scaleImage(mp);
this.onRotateMove.fire(e);
}
else {
this.translateImage(mp);
this.onDragMove.fire(e);
}
this.renderTop();
}
};
Canvas.Element.prototype.translateImage = function(mp) {
this._currentTransform.target.left = mp.ex - this._currentTransform.offsetX;
this._currentTransform.target.top = mp.ey - this._currentTransform.offsetY;
$('canvas_menu').style.left=this._currentTransform.target.left+"px";
$('canvas_menu').style.top=this._currentTransform.target.top +"px";
};
Canvas.Element.prototype.scaleImage = function(mp) {
var lastLen =
Math.sqrt(Math.pow(this._currentTransform.ey - this._currentTransform.top, 2) +
Math.pow(this._currentTransform.ex - this._currentTransform.left, 2));
var curLen =
Math.sqrt(Math.pow(mp.ey - this._currentTransform.top, 2) +
Math.pow(mp.ex - this._currentTransform.left, 2));
var curScalex= this._currentTransform.scalex * (curLen / lastLen);
var curScaley=this._currentTransform.target.scalex;
if(curScalex>0.7&&curScaley>0.7){
this._currentTransform.target.scalex =curScalex;
this._currentTransform.target.scaley = curScaley;
}
};
Canvas.Element.prototype.rotateImage = function(mp) {
var lastAngle = Math.atan2(
this._currentTransform.ey - this._currentTransform.top,
this._currentTransform.ex - this._currentTransform.left
);

var curAngle = Math.atan2(
mp.ey - this._currentTransform.top,
mp.ex - this._currentTransform.left
);
this._currentTransform.target.theta = (curAngle - lastAngle) + this._currentTransform.theta;
this.curAngle=this._currentTransform.target.theta*180/3.14;
$('canvas_menu').style.transform='rotate('+this.curAngle+'deg)';
};
Canvas.Element.prototype.setCursor = function(mp, targetImg) {
if (!targetImg) {
this._oElement.style.cursor = 'default';
}
else {
var corner = this.findTargetCorner(mp, targetImg);
if (!corner)
{
this._oElement.style.cursor = 'default';
}
else
{
if(corner == 'tr') {
this._oElement.style.cursor = 'ne-resize';
}
else if(corner == 'br') {
this._oElement.style.cursor = 'se-resize';
}
else if(corner == 'bl') {
this._oElement.style.cursor = 'sw-resize';
}
else if(corner == 'tl') {
this._oElement.style.cursor = 'nw-resize';
}
else {
this._oElement.style.cursor = 'default';
}
}
}
};
Canvas.Element.prototype.addImage = function(oImg) {
if(S.isEmptyObject(this._aImages)) {
this._aImages = [];
}
this._aImages.push(oImg);
this.renderAll(false,true);</p> <p> };
Canvas.Element.prototype.renderAll = function(allOnTop,allowCorners) {
var containerCanvas = (allOnTop) ? this._oContextTop : this._oContextContainer;
this._oContextTop.clearRect(0,0,parseInt(this._oConfig.width), parseInt(this._oConfig.height));
containerCanvas.clearRect(0,0,parseInt(this._oConfig.width), parseInt(this._oConfig.height));
if (allOnTop) {
var originalImgSize = this._backgroundImg.getOriginalSize();
this._oContextTop.drawImage(this._backgroundImg._oElement, 0, 0, originalImgSize.width, originalImgSize.height);
}
for (var i = 0, l = this._aImages.length-1; i < l; i += 1) {
this.drawImageElement(containerCanvas, this._aImages[i],allowCorners);
}
this.drawImageElement(this._oContextTop, this._aImages[this._aImages.length-1],allowCorners);
};
Canvas.Element.prototype.renderTop = function() {
this._oContextTop.clearRect(0,0,parseInt(this._oConfig.width), parseInt(this._oConfig.height));
this.drawImageElement(this._oContextTop, this._aImages[this._aImages.length-1],true);
if (this._groupSelector != null) {
this._oContextTop.fillStyle = "rgba(0, 0, 200, 0.5)";
this._oContextTop.fillRect(
this._groupSelector.ex - ((this._groupSelector.left > 0) ?
0 : - this._groupSelector.left),
this._groupSelector.ey - ((this._groupSelector.top > 0) ?
0 : - this._groupSelector.top),
Math.abs(this._groupSelector.left),
Math.abs(this._groupSelector.top)
);
this._oContextTop.strokeRect(
this._groupSelector.ex - ((this._groupSelector.left > 0) ?
0 : Math.abs(this._groupSelector.left)),
this._groupSelector.ey - ((this._groupSelector.top > 0) ?
0 : Math.abs(this._groupSelector.top)),
Math.abs(this._groupSelector.left),
Math.abs(this._groupSelector.top)
);
}
};
Canvas.Element.prototype.drawImageElement = function(context, oImg,allowCorners) {
oImg.cornervisibility=allowCorners;
var offsetY = oImg.height / 2;
var offsetX = oImg.width / 2;
context.save();
context.translate(oImg.left, oImg.top);
context.rotate(oImg.theta);
context.scale(oImg.scalex, oImg.scaley);
this.drawBorder(context, oImg, offsetX, offsetY);
var originalImgSize = oImg.getOriginalSize();
var polaroidHeight = ((oImg.height - originalImgSize.height) - (oImg.width - originalImgSize.width))/2;
context.drawImage(
oImg._oElement,
- originalImgSize.width/2,
((- originalImgSize.height)/2 - polaroidHeight),
originalImgSize.width,
originalImgSize.height
);
if (oImg.cornervisibility) {
this.drawCorners(context, oImg, offsetX, offsetY);
}
context.restore();
};
Canvas.Element.prototype._getImageLines = function(oCoords) {
return {
topline: {
o: oCoords.tl,
d: oCoords.tr
},
rightline: {
o: oCoords.tr,
d: oCoords.br
},
bottomline: {
o: oCoords.br,
d: oCoords.bl
},
leftline: {
o: oCoords.bl,
d: oCoords.tl
}
};
};
Canvas.Element.prototype.findTargetImage = function(mp, hovering) {
for (var i = this._aImages.length-1; i >= 0; i -= 1) {
var iLines = this._getImageLines(this._aImages[i].oCoords);
var xpoints = this._findCrossPoints(mp, iLines);
if (xpoints % 2 == 1 && xpoints != 0) {
var target = this._aImages[i];
if (!hovering) {
this._aImages.splice(i, 1);
this._aImages.push(target);
}
return target;
}
}
return false;
};
Canvas.Element.prototype._findCrossPoints = function(mp, oCoords) {
var b1, b2, a1, a2, xi, yi;
var xcount = 0;
var iLine = null;
for (lineKey in oCoords) {
iLine = oCoords[lineKey];
if ((iLine.o.y < mp.ey) && (iLine.d.y < mp.ey)) {
continue;
}
if ((iLine.o.y >= mp.ey) && (iLine.d.y >= mp.ey)) {
continue;
}
if ((iLine.o.x == iLine.d.x) && (iLine.o.x >= mp.ex)) {
xi = iLine.o.x;
yi = mp.ey;
}
else {
b1 = 0;
b2 = (iLine.d.y-iLine.o.y)/(iLine.d.x-iLine.o.x);
a1 = mp.ey-b1*mp.ex;
a2 = iLine.o.y-b2*iLine.o.x;
xi = - (a1-a2)/(b1-b2);
yi = a1+b1*xi;
}
if (xi >= mp.ex) {
xcount += 1;
}
if (xcount == 2) {
break;
}
}
return xcount;
};
Canvas.Element.prototype.findTargetCorner = function(mp, oImg) {
var xpoints = null;
var corners = ['tl','tr','br','bl'];
for (var i in oImg.oCoords) {
xpoints = this._findCrossPoints(mp, this._getImageLines(oImg.oCoords[i].corner));
if (xpoints % 2 == 1 && xpoints != 0) {
return i;
}
}
return false;
};
Canvas.Element.prototype.findMousePosition = function(e) {
var parentNode = (e.srcElement) ? e.srcElement.parentNode : e.target.parentNode;
var isSafari2 = !S.support.ie&&!S.support.firefox;
var scrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft;
var scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
var safariOffsetLeft = (isSafari2) ? e.target.ownerDocument.body.offsetLeft + scrollLeft : 0;
var safariOffsetTop = (isSafari2) ? e.target.ownerDocument.body.offsetTop + scrollTop : 0;
return {
ex: e.clientX + scrollLeft - parentNode.offsetLeft - safariOffsetLeft,
ey: e.clientY + scrollTop - parentNode.offsetTop - safariOffsetTop,
screenX: e.screenX,
screenY: e.screenY
};
};
Canvas.Element.prototype.drawBorder = function(context, oImg, offsetX, offsetY) {
var outlinewidth = 2;
context.fillStyle = 'rgba(0, 0, 0, .3)';
context.fillRect(-2 - offsetX, -2 - offsetY, oImg.width + (2 * outlinewidth), oImg.height + (2 * outlinewidth));
context.fillStyle = '#fff';
context.fillRect(-offsetX, -offsetY, oImg.width, oImg.height);
};
Canvas.Element.prototype.drawCorners = function(context, oImg, offsetX, offsetY) {
context.fillStyle = "rgba(0, 200, 50, 0.5)";
context.fillRect(-offsetX, -offsetY, oImg.cornersize, oImg.cornersize);
context.fillRect(oImg.width - offsetX - oImg.cornersize, -offsetY, oImg.cornersize, oImg.cornersize);
context.fillRect(-offsetX, oImg.height - offsetY - oImg.cornersize, oImg.cornersize, oImg.cornersize);
context.fillRect(oImg.width - offsetX - oImg.cornersize, oImg.height - offsetY - oImg.cornersize, oImg.cornersize, oImg.cornersize);
};
Canvas.Element.prototype.clearCorners = function(context, oImg, offsetX, offsetY) {
context.clearRect(-offsetX, -offsetY, oImg.cornersize, oImg.cornersize);
context.clearRect(oImg.width - offsetX - oImg.cornersize, -offsetY, oImg.cornersize, oImg.cornersize);
context.clearRect(-offsetX, oImg.height - offsetY - oImg.cornersize, oImg.cornersize, oImg.cornersize);
context.clearRect(oImg.width - offsetX - oImg.cornersize, oImg.height - offsetY - oImg.cornersize, oImg.cornersize, oImg.cornersize);
context.restore();
};
Canvas.Element.prototype.canvasTo = function(format) {
this.renderAll(true,false);
var containerCanvas =this._oContextTop;
for (var i = 0, l = this._aImages.length; i < l; i += 1) {
var offsetY = this._aImages[i].height / 2;
var offsetX = this._aImages[i].width / 2;
this.clearCorners(containerCanvas, this._aImages[i], offsetX, offsetY);
}
if (format == 'jpeg' || format == 'png') {
return this._oElement.toDataURL('image/'+format);
}
};
Canvas.CustomEvent = function(type) {
this.type = type;
this.scope = null;
this.handler = null;
var self = this;
this.fire = function(e) {
if(this.handler != null) {
self.handler.call(self.scope, e);
}
};
};
}());
return Canvas;
});

canvasImg.js代碼如下:


復制代碼
代碼如下:
define('canvasImg', [ '../multi_upload/core' ], function(S) {
var Canvas = window.Canvas || {};
(function () {
Canvas.Img = function(el, oConfig) {
this._initElement(el);
this._initConfig(oConfig);
this.setImageCoords();
};
Canvas.Img.CSS_CANVAS = "canvas-img";
var DEFAULT_CONFIG = {
"TOP": {
key: "top",
value: 10
},
"LEFT": {
key: "left",
value: 10
},
"ANGLE": {
key: "angle",
value: 0
},
"THETA": {
key: "theta",
value: 0
},
"SCALE-X": {
key: "scalex",
value: 1
},
"SCALE-Y": {
key: "scaley",
value: 1
},
"CORNERSIZE": {
key: "cornersize",
value:10
},
"BORDERWIDTH": {
key: "borderwidth",
value: 10
},
"POLAROIDHEIGHT": {
key: "polaroidheight",
value: 40
},
"RANDOMPOSITION": {
key: "randomposition",
value: true
}
};
Canvas.Img.prototype._oElement = null;
Canvas.Img.prototype.top = null;
Canvas.Img.prototype.left = null;
Canvas.Img.prototype.maxwidth = null;
Canvas.Img.prototype.maxheight = null;
Canvas.Img.prototype.oCoords = null;
Canvas.Img.prototype.angle = null;
Canvas.Img.prototype.theta = null;
Canvas.Img.prototype.scalex = null;
Canvas.Img.prototype.scaley = null;
Canvas.Img.prototype.cornersize = null;
Canvas.Img.prototype.polaroidheight = null;
Canvas.Img.prototype.randomposition = null;
Canvas.Img.prototype.selected = false;
Canvas.Img.prototype.bordervisibility = false;
Canvas.Img.prototype.cornervisibility = false;
Canvas.Img.prototype._initElement = function(el) {
this._oElement = el;
};
Canvas.Img.prototype._initConfig = function(oConfig) {
var sKey;
for (sKey in DEFAULT_CONFIG) {
var defaultKey = DEFAULT_CONFIG[sKey].key;
if (!oConfig.hasOwnProperty(defaultKey)) { // = !(defaultKey in oConfig)
this[defaultKey] = DEFAULT_CONFIG[sKey].value;
}
else {
this[defaultKey] = oConfig[defaultKey];
}
}
if (this.bordervisibility) {
this.currentBorder = this.borderwidth;
}
else {
this.currentBorder = 0;
}
var normalizedSize = this.getNormalizedSize(this._oElement, parseInt(oConfig.maxwidth), parseInt(oConfig.maxheight));
this._oElement.width = normalizedSize.width;
this._oElement.height = normalizedSize.height;
this.width = normalizedSize.width + (2 * this.currentBorder);
this.height = normalizedSize.height + (2 * this.currentBorder);
if (this.randomposition) {
this._setRandomProperties(oConfig);
}
this.theta = this.angle * (Math.PI/180);
};
Canvas.Img.prototype.getNormalizedSize = function(oImg, maxwidth, maxheight) {
if (maxheight && maxwidth && (oImg.width > oImg.height && (oImg.width / oImg.height) < (maxwidth / maxheight))) {
normalizedWidth = Math.floor((oImg.width * maxheight) / oImg.height);
normalizedHeight = maxheight;
}
else if (maxheight && ((oImg.height == oImg.width) || (oImg.height > oImg.width) || (oImg.height > maxheight))) {
normalizedWidth = Math.floor((oImg.width * maxheight) / oImg.height);
normalizedHeight = maxheight;
}
else if (maxwidth && (maxwidth < oImg.width)){
normalizedHeight = Math.floor((oImg.height * maxwidth) / oImg.width);
normalizedWidth = maxwidth;
}
else {
normalizedWidth = oImg.width;
normalizedHeight = oImg.height;
}
return { width: normalizedWidth, height: normalizedHeight }
},
Canvas.Img.prototype.getOriginalSize = function() {
return { width: this._oElement.width, height: this._oElement.height }
};
Canvas.Img.prototype._setRandomProperties = function(oConfig) {
if (oConfig.angle == null) {
this.angle = (Math.random() * 90);
}
if (oConfig.top == null) {
this.top = this.height / 2 + Math.random() * 450;
}
if (oConfig.left == null) {
this.left = this.width / 2 + Math.random() * 600;
}
};
Canvas.Img.prototype.setCornersVisibility = function(visible) {
this.cornervisibility = visible;
};
Canvas.Img.prototype.setImageCoords = function() {
this.left = parseInt(this.left);
this.top = parseInt(this.top);
this.currentWidth = parseInt(this.width) * this.scalex;
this.currentHeight = parseInt(this.height) * this.scalex;
this._hypotenuse = Math.sqrt(Math.pow(this.currentWidth / 2, 2) + Math.pow(this.currentHeight / 2, 2));
this._angle = Math.atan(this.currentHeight / this.currentWidth);
var offsetX = Math.cos(this._angle + this.theta) * this._hypotenuse;
var offsetY = Math.sin(this._angle + this.theta) * this._hypotenuse;
var theta = this.theta;
var sinTh = Math.sin(theta);
var cosTh = Math.cos(theta);
var tl = {
x: this.left - offsetX,
y: this.top - offsetY
};
var tr = {
x: tl.x + (this.currentWidth * cosTh),
y: tl.y + (this.currentWidth * sinTh)
};
var br = {
x: tr.x - (this.currentHeight * sinTh),
y: tr.y + (this.currentHeight * cosTh)
};
var bl = {
x: tl.x - (this.currentHeight * sinTh),
y: tl.y + (this.currentHeight * cosTh)
};
this.oCoords = { tl: tl, tr: tr, br: br, bl: bl };
this.setCornerCoords();
};
Canvas.Img.prototype.setCornerCoords = function() {
var coords = this.oCoords;
var theta = this.theta;
var cosOffset = this.cornersize * this.scalex * Math.cos(theta);
var sinOffset = this.cornersize * this.scalex * Math.sin(theta);
coords.tl.corner = {
tl: {
x: coords.tl.x,
y: coords.tl.y
},
tr: {
x: coords.tl.x + cosOffset,
y: coords.tl.y + sinOffset
},
bl: {
x: coords.tl.x - sinOffset,
y: coords.tl.y + cosOffset
}
};
coords.tl.corner.br = {
x: coords.tl.corner.tr.x - sinOffset,
y: coords.tl.corner.tr.y + cosOffset
};

coords.tr.corner = {
tl: {
x: coords.tr.x - cosOffset,
y: coords.tr.y - sinOffset
},
tr: {
x: coords.tr.x,
y: coords.tr.y
},
br: {
x: coords.tr.x - sinOffset,
y: coords.tr.y + cosOffset
}
};
coords.tr.corner.bl = {
x: coords.tr.corner.tl.x - sinOffset,
y: coords.tr.corner.tl.y + cosOffset
};

coords.bl.corner = {
tl: {
x: coords.bl.x + sinOffset,
y: coords.bl.y - cosOffset
},
bl: {
x: coords.bl.x,
y: coords.bl.y
},
br: {
x: coords.bl.x + cosOffset,
y: coords.bl.y + sinOffset
}
};
coords.bl.corner.tr = {
x: coords.bl.corner.br.x + sinOffset,
y: coords.bl.corner.br.y - cosOffset
};

coords.br.corner = {
tr: {
x: coords.br.x + sinOffset,
y: coords.br.y - cosOffset
},
bl: {
x: coords.br.x - cosOffset,
y: coords.br.y - sinOffset
},
br: {
x: coords.br.x,
y: coords.br.y
}
};
coords.br.corner.tl = {
x: coords.br.corner.bl.x + sinOffset,
y: coords.br.corner.bl.y - cosOffset
};
};
}());
return Canvas;
});

puzzle.html代碼如下:


復制代碼
代碼如下:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<link type="text/css" href="html5_puzzle.css" rel="stylesheet" />
<script type="text/javascript" src="../multi_upload/seed.js"></script>
<script type="text/javascript" src='html5_puzzle.js'></script>
</head>
<body>
<div id='html5_puzzle'>
<div id='puzzle_left'>
<div class='puzzle_column'>
<ul>
<li><img src='small_img/1.jpg' data-index='1' /></li>
<li><img src='small_img/2.jpg' data-index='2' /></li>
<li><img src='small_img/3.jpg' data-index='3' /></li>
<li><img src='small_img/4.jpg' data-index='4' /></li>
<li><img src='small_img/5.jpg' data-index='5' /></li>
</ul>
</div>
<div class='puzzle_column'>
<ul>
<li><img src='small_img/6.jpg' data-index='6' /></li>
<li><img src='small_img/7.jpg' data-index='7' /></li>
<li><img src='small_img/8.jpg' data-index='8' /></li>
<li><img src='small_img/9.jpg' data-index='9' /></li>
<li><img src='small_img/10.jpg' data-index='10' /></li>
</ul>
</div>
</div>
<div id='puzzle_right'>
<div id='puzzle_canvas'>
<canvas id="canvid1"></canvas>
<div id='canvas_menu'>
<a href='javascript:void(0)' id='photo_delete'>刪除</a> <a
href='javascript:void(0)' id='photo_update'>更改圖片</a>
</div>
</div>
<img id="bg" src="big_img/1.jpg" width='600' height='450' />
</div>
<div id='puzzle_bottom'>
<a href='javascript:void(0)' id='add_img'><span>添加圖片</span><input
type="file" multiple="" id='fileImage'> </a> <a
href='javascript:void(0)' id='upload_btn'>上傳</a> <a>點擊圖片可以旋轉,拖拽,
縮放哦!</a>
</div>
</div>
<input type="file" id='test'>
<canvas id='test_canvas'></canvas>
</body>
</html>

html5_puzzle.css代碼如下:


復制代碼
代碼如下:
@CHARSET "UTF-8";</p> <p>#html5_puzzle {
font-size: 0;
}</p> <p>canvas {
background-color: transparent;
left: 0;
position: absolute;
top: 0;
}</p> <p>.puzzle_column,#puzzle_left,#puzzle_right,#add_img {
display: inline-block;
}</p> <p>.puzzle_column li {
display: block;
margin: 5px;
border: 1px solid #ffffff;
}</p> <p>.puzzle_column li:hover {
border: 1px solid #3B5998;
cursor: pointer;
}</p> <p>.puzzle_column {
font-size: 0;
}</p> <p>#puzzle_left,#puzzle_right {
border: 1px solid #3B5998;
}</p> <p>#puzzle_right,#puzzle_bottom a {
font-size: 14px;
margin: 10px 0 0 10px;
}</p> <p>#puzzle_bottom {
margin: 5px 0;
}</p> <p>#puzzle_canvas img {

}</p> <p>#puzzle_canvas {
overflow: hidden;
width: 600px;
height: 450px;
position: relative;
}</p> <p>#add_img input {
position: absolute;
font-size: 100px;
right: 0;
top: 0;
opacity: 0;
}</p> <p>#add_img {
position: relative;
display: inline-block;
background: #3B5998;
border-radius: 4px;
padding: 4px 12px;
overflow: hidden;
color: #ffffff;
}</p> <p>#bg,#show_list {
display: none;
}</p> <p>#canvas_menu {
border: 1px solid red;
position: absolute;
z-index: 5;
top: 0;
left: 0;
display: none;
}</p> <p>#canvas_menu a {
display: inline-block;
}</p> <p>#test_canvas {
top: 700px;
}

html5_puzzle.js代碼如下:


復制代碼
代碼如下:
require([ 'img_upload', '../puzzle/canvasImg', '../puzzle/canvasElement' ], function(
S, canvasImg, canvasElement) {
var img=[];
var canvas = new canvasElement.Element();
canvas.init('canvid1', {
width : 600,
height : 450
});
S('.puzzle_column img').on('click',function(e){
var index=this.getAttribute('data-index');
$('bg').onload = function() {
var ctx=$('canvid1-canvas-background').getContext('2d');
ctx.clearRect(0, 0,600,450);
img[0]=new canvasImg.Img($('bg'), {});
canvas.setCanvasBackground(img[0]);
};
$('bg').setAttribute('src','medium_img/'+index+'.jpg');
e.stopPropagation();
});
var CanvasDemo = function() {
return {
init : function() {
var img_list=dom.query('#puzzle_canvas img');
img[0]=new canvasImg.Img($('bg'), {});
S.each(img_list,function(i,el){
el.setAttribute('data-index',i);
img.push(new canvasImg.Img(el, {}));
canvas.addImage(img[i+1]);
});
canvas.setCanvasBackground(img[0]);
this.cornersvisible = (this.cornersvisible) ? false : true;
this.modifyImages(function(image) {
image.setCornersVisibility(this.cornersvisible);
});
},
modifyImages : function(fn) {
for ( var i =0, l = canvas._aImages.length; i < l; i += 1) {
fn.call(this, canvas._aImages[i]);
}
canvas.renderAll(false,false);
S('#puzzle_canvas img').remove();
img = [];
}
};
}();
function getCurImg(){
var oImg=canvas._prevTransform.target;
for(var i=0;i<canvas._aImages.length;i++){
if(canvas._aImages[i]._oElement.src==oImg._oElement.src){
return i;
}
}
}
S('#photo_delete').on('click',function(e){
var i=getCurImg();
canvas._aImages.splice(i,1);
canvas.renderAll(true,true);
$('canvas_menu').style.display="none";
});
S('#photo_update').on('click',function(e){
$('test').click();
});
S('#test').on('change',function(e){
var files = e.target.files || e.dataTransfer.files;
var reader = new FileReader();
reader.onload = (function() {
return function(e) {
var dataURL = e.target.result, canvas1 = document.querySelector('#test_canvas'), ctx = canvas1.getContext('2d'), img = new Image();
img.onload = function(e) {
if(img.width>200||img.height>200){
var prop=Math.min(200/img.width,200/img.height);
img.width=img.width*prop;
img.height=img.height*prop;
}
canvas1.width=img.width;
canvas1.height=img.height;
ctx.drawImage(img, 0, 0, img.width, img.height);
S('#canvid1').html(S('#canvid1').html()+"<img src='"+canvas1.toDataURL("image/jpeg")+"'/>");
var t = window.setTimeout(function() {
var i=getCurImg(),target=canvas._prevTransform.target;
console.log(target);
canvas._aImages[i]=new canvasImg.Img(dom.query('#canvid1 img')[0], {
top:target.top,
left:target.left,
scalex:target.scalex,
scaley:target.scaley,
angle:canvas.curAngle
});
canvas.renderTop();
clearTimeout(t);
S('#canvid1 img').remove();
},1000);
};
img.src = dataURL;
};
})();
reader.readAsDataURL(files[0]);
});
S('#upload_btn').on('click',function(){
var imgData = canvas.canvasTo('jpeg');
var imgValue = imgData.substr(22);
S.ajax({
url : 'http://localhost/html5/upload1.php',
type : 'POST',
data : {
imgData : imgValue,
file_name :'mix_img.jpeg'
},
dataType : 'text',
success : function(data) {
alert("s");
}
});
});
});

至于用html5 input讀取圖片,這很簡單就不貼出來了。

希望本文所述對大家的HTML5程序設計有所幫助。

標簽:鶴崗 德州 黃山 楊凌 撫順 辛集 蚌埠 內蒙古

巨人網絡通訊聲明:本文標題《html5版canvas自由拼圖實例》,本文關鍵詞  html5,版,canvas,自由,拼圖,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《html5版canvas自由拼圖實例》相關的同類信息!
  • 本頁收集關于html5版canvas自由拼圖實例的相關信息資訊供網民參考!
  • 推薦文章
    成人性教育视频在线观看| 久久精品国产在热久久| 亚洲第一页视频| 亚洲国产精品18久久久久久| 日韩国产高清在线| 国产成人免费在线观看不卡| 久久在线观看免费| 中文字幕佐山爱一区二区免费| 亚洲成在人线免费| 欧美日韩黄色一区二区| 日韩成人在线视频| 久久精品最新地址| 国产成人精品一区二区在线| av成人免费观看| 亚洲欧洲中文| 欧美精品久久久久久久免费| 中文字幕在线视频一区二区三区 | 亚洲欧美成人一区| 国产人妻777人伦精品hd| gogogo高清免费观看在线视频| 一起草在线视频| 全程偷拍露脸中年夫妇| 日韩av免费播放| 天堂在线观看av| 国产91精品精华液一区二区三区| 国产精品丝袜在线| 欧美午夜精品在线| 精品88久久久久88久久久| 久久天天躁狠狠躁夜夜爽蜜月| 日韩av电影在线免费播放| 国产欧美日韩伦理| 国产成人一二三区| 亚洲第一天堂久久| 国产第一页精品| 特级毛片www| 人妻中文字幕一区| 成人app下载| 亚洲一区二区视频在线观看| 欧美一区二区在线视频| 日韩在线视频免费观看高清中文| 国产成人精品av在线| 精品一区二区三区视频日产| 成人免费在线网| avtt中文字幕| 久久精品99国产精| 亚洲精品喷潮一区二区三区| 丁香一区二区三区| 亚洲伊人色欲综合网| 久久亚洲天堂网| 加勒比一区二区| 日本一二三四区视频| 人妻精品久久久久中文| 日本精品入口免费视频| 日日夜夜精品视频免费| 久久理论电影网| 欧美午夜精品久久久久久人妖| 中文字幕久久久av一区| 国产精品青草综合久久久久99| 亚洲成人黄色影院| 精品国精品国产| 久久久久久欧美| 国内不卡一区二区三区| 国产av天堂无码一区二区三区| 中文字幕在线视频播放| 日日夜夜综合网| 日本大胆欧美人术艺术动态| 国产精品国产三级国产三级人妇 | 九色|91porny| 中文字幕一区二区三区在线观看| 69成人精品免费视频| 久久亚洲电影天堂| 国产精品美女黄网| 激情六月丁香婷婷| 国产又粗又猛又爽又黄的视频四季| 中文字幕一区2区3区| 国产很黄免费观看久久| 婷婷六月综合亚洲| 在线观看日韩www视频免费| 国产综合久久久久| 久久这里只有精品23| 色无极影院亚洲| 11024精品一区二区三区日韩| 风流少妇一区二区| 国产色片在线观看| 国产a∨精品一区二区三区仙踪林| 高清一区二区三区四区| 久久久久久久精| 精品视频全国免费看| 久久69精品久久久久久国产越南| 好吊色欧美一区二区三区 | 天天干天天干天天干天天| 中文字幕在线观看免费高清| 国产精品久久久久久69| www.亚洲在线| 黑人欧美xxxx| 日韩中文字幕av| 国产伦精品一区二区三区四区视频 | 久久久久无码精品国产sm果冻| 国产高清第一页| 日本一区二区动态图| 精品国产乱码久久久久久久| 国产精品久久久久久av下载红粉| 日韩成人手机在线| 亚洲高潮女人毛茸茸| 亚洲伦理在线观看| 成人免费在线播放视频| 亚洲欧美999| 97av影视网在线观看| 亚洲视频在线a| 日产欧产va高清| 国产精品伊人色| 欧美在线综合视频| 97成人精品区在线播放| 亚洲天堂电影网| 亚洲最大成人网站| 乱精品一区字幕二区| 亚洲欧美偷拍三级| 色阁综合伊人av| 国产一区二区三区奇米久涩| 在线观看网站黄| 91久久国语露脸精品国产高跟| 国产视频911| 日韩电影中文 亚洲精品乱码 | 亚洲国产成人av网| 久久深夜福利免费观看| 神马影院我不卡午夜| 你懂得在线视频| 亚洲精品无遮挡| 一区二区在线免费| 国产露脸91国语对白| www国产在线| 国产欧美一区二区精品性| 51精品秘密在线观看| 国产精品久久久久久久一区探花| 天天想你在线观看完整版电影免费| 精品成人无码一区二区三区| 日韩国产在线一| 在线精品亚洲一区二区不卡| 亚洲精品亚洲人成人网| 色偷偷888欧美精品久久久| 色一情一区二区三区四区| 北岛玲一区二区| 久久久久久久欧美精品| 色婷婷国产精品| 国产98色在线| 天天操天天摸天天爽| 嫩草影院一区二区三区| 国产精品乱码久久久久久| 中日韩午夜理伦电影免费| 亚洲国产精品一区在线观看不卡 | 日韩一级在线免费观看| 精品人妻一区二区三区免费看| 久久综合色8888| 亚洲视频第一页| 亚洲视频精品一区| 欧洲猛交xxxx乱大交3| 波多野结衣在线一区| 日韩国产高清污视频在线观看| 久久av一区二区三区漫画| 超碰97人人干| 九九久久精品视频| 欧美成人a在线| 狠狠综合久久av| a级在线免费观看| 国产一区视频导航| 亚洲精品一区在线观看| 免费电影一区| 欧美美女性生活视频| 国产99久久久国产精品潘金| 亚洲高清在线观看| 神马影院我不卡| 欧美交换国产一区内射| 91丨porny丨户外露出| 中文字幕日韩视频| www.日本三级| 91丨九色丨海角社区| 综合中文字幕亚洲| 久久久久久久亚洲精品| 日韩一级片播放| 国产精品无码久久av| 狠狠操狠狠色综合网| 成人黄色午夜影院| 国产精品久久无码| 国产一区日韩二区欧美三区| 亚洲国产成人久久综合| 亚洲午夜在线观看| 日韩精品一区二区在线播放| 国产精品久久久久久久久快鸭| 欧美大片在线看免费观看| 国产第一页视频| 不卡的日韩av| 欧美喷水一区二区| 久久精品第九区免费观看 | 在线不卡欧美精品一区二区三区| 国产精品二区二区三区| 波多野结衣家庭教师在线观看| k8久久久一区二区三区| 久久精品99久久久香蕉| 免费av网址在线| 国产极品999| 欧美日韩高清一区| 欧美黑人xxxxx| 国产一级片网址| 亚洲免费av高清| 国产精品久久激情| 老熟妇精品一区二区三区| 国产风韵犹存在线视精品| 中文字幕亚洲综合久久| 国产a级一级片| 性欧美18一19性猛交| 欧美美女一区二区在线观看| 日本一区二区三区免费观看| 亚洲欧美在线视频免费| 亚洲国产视频一区二区| 91超碰在线免费观看| 精品国产国产综合精品| 国产精品久久精品日日| 国产精品久久久久久av福利| 日本黄色网址大全| 91网址在线看| 91av视频导航| 星空大象在线观看免费播放| 成人性视频网站| 久久91亚洲精品中文字幕奶水| 国产欧美激情视频| 国产原创一区二区| 久久手机精品视频| 亚洲网中文字幕| 国产精品一区二区久久精品爱涩 | 国产馆在线观看| 亚洲国产精品成人久久综合一区| 欧美在线视频在线播放完整版免费观看| 中文字幕天堂av| www.欧美.com| 国语自产偷拍精品视频偷| 久久黄色一级视频| 成人精品免费看| 国模gogo一区二区大胆私拍| 青青草视频网站| 久久综合久久综合九色| 91高清免费在线观看| 在线 丝袜 欧美 日韩 制服| 久久伊99综合婷婷久久伊| 热久久这里只有精品| 美女爆乳18禁www久久久久久| 99精品视频在线观看免费| 91高清免费视频| 成人在线观看免费高清| 中文字幕在线观看一区二区| 96精品久久久久中文字幕| 久久国产高清视频| 亚洲一区二区三区不卡国产欧美| 不卡视频一区二区三区| 日本免费观看视| 欧美性视频一区二区三区| 综合视频免费看| 成人久久久精品国产乱码一区二区| 日韩电影大片中文字幕 | 国产精品久久久久三级| 成人做爽爽免费视频| 麻豆一区产品精品蜜桃的特点| 午夜免费久久看| 欧日韩一区二区三区| 91久久精品无码一区二区| 亚洲成人黄色在线| 亚洲人成无码www久久久| 国产综合久久久久影院| 国内偷自视频区视频综合| 熟女高潮一区二区三区| 亚洲久草在线视频| 久久av一区二区三区亚洲| 国模私拍一区二区| 精品嫩草影院久久| 日韩无套无码精品| 国产99一区视频免费| 国产成人精品一区二区在线| 欧美成欧美va| 在线精品视频小说1| 热久久最新网址| 天堂成人国产精品一区| 欧美成人精品激情在线观看| 亚洲永久无码7777kkk| 亚洲女同ⅹxx女同tv| 欧美xxxx黑人又粗又长精品| 国产精品视频在线观看免费| 亚洲欧美日韩另类| 一级黄色大片免费看| 中文字幕不卡在线播放| 国产日本一区二区三区| 一级特黄录像免费看| 亚洲欧美综合图区| 一区二区三区四区影院| 国产精品久久久久久久浪潮网站| 国内外成人免费视频| 国产又粗又猛视频| 亚洲无亚洲人成网站77777| 日本人dh亚洲人ⅹxx| 国产精品国产三级国产aⅴ入口 | 国产精品久久999| 欧美三级日本三级| 欧美日韩一区二区三区不卡| 久草热视频在线观看| 国产成人免费视频精品含羞草妖精| 国产精品久久久久77777| 天天爽夜夜爽夜夜爽精品| 日韩精品一区二区三区老鸭窝| 欧美男女交配视频| 国产清纯美女被跳蛋高潮一区二区久久w| 俄罗斯精品一区二区三区| 国产精品久久久久久免费免熟 | 狠狠色狠狠色综合人人| a级片免费观看| 色妞一区二区三区| 一级片手机在线观看| 黑人巨大精品欧美一区免费视频| 天天做天天躁天天躁| 蜜臀av亚洲一区中文字幕| 欧美在线一区二区视频| 一级片免费网址| 亚洲福利在线播放| 亚洲欧美综合视频| 亚洲一区二区欧美日韩| 国产视频在线观看网站| 国产成人av福利| 亚洲一区二区少妇| 国产又粗又猛又爽又黄的| 俺去啦;欧美日韩| 99re6热在线精品视频| 欧美美女激情18p| 在线观看岛国av| 国产精品久久久久久久岛一牛影视| 视频一区二区三区免费观看| 男女男精品视频| 国产精品一区二区三区免费视频| 中文精品久久久久人妻不卡| 自拍偷拍亚洲区| 日本视频在线免费| 3751色影院一区二区三区| 日韩在线一区视频| 亚洲精品高清视频在线观看| 成年丰满熟妇午夜免费视频| 成人av免费在线播放| 精品亚洲欧美日韩| 日韩国产欧美在线播放| 国产精品吴梦梦| 91精品视频免费在线观看| 欧美二区乱c黑人| 国产一国产二国产三| 精品女同一区二区| 国产中文字幕一区二区| 欧美性猛交xxxx黑人交| 欧美成人福利在线观看| 一区二区三区毛片| 欧美午夜小视频| 欧美激情综合网| 精品日韩在线播放| 91在线云播放| 色综合电影网| 国产成人免费网站| 久久综合九色99| 麻豆精品一区二区综合av| 91影视免费在线观看| 亚洲AV无码乱码国产精品牛牛| 午夜精品久久久久久久男人的天堂 | 精品久久久久久综合日本| 免费成人在线看| 国产精品成人观看视频国产奇米| 在线观看毛片av| 久久久欧美一区二区| 7799精品视频天天看| 久久精品影视伊人网| 国产成人精品一区二三区| 中文欧美日本在线资源| 精品99在线观看| 亚洲人在线视频| 天天看片中文字幕| 亚洲男人天天操| 国精品无码一区二区三区| 亚洲开心激情网| 日本精品在线免费观看| 日韩大陆毛片av| 国产稀缺精品盗摄盗拍| 亚洲男人的天堂在线| 国精品无码一区二区三区| 亚洲欧美激情精品一区二区| 国产传媒免费在线观看| 国产视频精品va久久久久久| 97精品在线播放| 亚洲区一区二区| 欧美日韩大片在线观看| 国产一区二区三区高清在线观看| 欧美日韩精品亚洲精品| 中文字幕在线精品| 日韩aaaaaa| 久久九九热免费视频| 国产免费一级视频| 久久久久国产精品免费| 伊人网综合在线| 欧美亚洲视频一区二区| a毛片在线免费观看| 国产欧美精品一区二区三区介绍| 性xxxx视频播放免费| 国产成人女人毛片视频在线| 精品一区二区三区视频| 欧美一区观看| 久久午夜老司机| 奇米精品一区二区三区| 亚洲成a人v欧美综合天堂| 日韩a一级欧美一级| 在线播放视频一区|