iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > node.js >html5版canvas自由拼图实例介绍
  • 757
分享到

html5版canvas自由拼图实例介绍

2024-04-02 19:04:59 757人浏览 薄情痞子
摘要

这篇文章主要介绍“HTML5版canvas自由拼图实例介绍”,在日常操作中,相信很多人在html5版canvas自由拼图实例介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”

这篇文章主要介绍“HTML5canvas自由拼图实例介绍”,在日常操作中,相信很多人在html5版canvas自由拼图实例介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”html5版canvas自由拼图实例介绍”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

本文实例讲述了html5版canvas自由拼图的实现方法。分享给大家供大家参考。具体方法如下:

代码运行效果如下图所示:

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版canvas自由拼图实例介绍”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: html5版canvas自由拼图实例介绍

本文链接: https://www.lsjlt.com/news/76076.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • html5版canvas自由拼图实例介绍
    这篇文章主要介绍“html5版canvas自由拼图实例介绍”,在日常操作中,相信很多人在html5版canvas自由拼图实例介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”...
    99+
    2024-04-02
  • html5 canvas自由拼图的代码怎么写
    本文小编为大家详细介绍“html5 canvas自由拼图的代码怎么写”,内容详细,步骤清晰,细节处理妥当,希望这篇“html5 canvas自由拼图的代码怎么写”文章能帮助大家解决疑惑,下面跟着小编的思路慢...
    99+
    2024-04-02
  • HTML5+CSS3的应用实例介绍
    本篇内容主要讲解“HTML5+CSS3的应用实例介绍”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“HTML5+CSS3的应用实例介绍”吧!Web设计师可以使用H...
    99+
    2024-04-02
  • JavaScript实现拖动滑块拼图验证功能(html5、canvas)
    引言: 滑块拖动验证现在很多地方都用到,周末就琢磨着写了一个,放上来,看看有没有人用得上! 效果: 实现思路:  用一张画布绘制源图,再绘制一个填充的方形,这样就可以达到...
    99+
    2024-04-02
  • HTML5拖放的特性及实例介绍
    这篇文章主要讲解了“HTML5拖放的特性及实例介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“HTML5拖放的特性及实例介绍”吧! ...
    99+
    2024-04-02
  • HTML5 Canvas如何实现图片缩放比例
    小编给大家分享一下HTML5 Canvas如何实现图片缩放比例,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧! drawImage方法的又一变种是增加了两个用于控制图像在canvas中缩放...
    99+
    2024-04-02
  • python用pyecharts画地图实例介绍
    版本pyecharts 分为 v0.5.X 和 v1 两个大版本,v0.5.X 和 v1 间不兼容,v1 是一个全新的版本 v0.5.X支持 Python2.7,3.4+v1仅支持 ...
    99+
    2024-04-02
  • 学习python:实例3.终端版拼图游戏
    效果:输入数字进行移动,当数字排列成为【1,2,3,4,5,6,7,8】游戏胜利!代码:# 拼图 from sys import exit from os import system from random import shuffle ...
    99+
    2023-01-31
    终端 实例 拼图游戏
  • CSS的一些圆角图形实例介绍
    本篇内容介绍了“CSS的一些圆角图形实例介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!这是比较流行的C...
    99+
    2024-04-02
  • HTML5 Canvas字符串,路径,背景,图片的实例分析
    本文小编为大家详细介绍“HTML5 Canvas字符串,路径,背景,图片的实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“HTML5 Canvas字符串,路径,背景,图片的实例分析”文章能帮助大家解...
    99+
    2024-04-02
  • 基 HTML5 Canvas实现交互式地铁线路图的示例
    这篇文章主要介绍了基 HTML5 Canvas实现交互式地铁线路图的示例,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。效果图 http://www.hightopo...
    99+
    2023-06-09
  • Vue自定义指令的使用实例介绍
    目录何为自定义指令实例解析1.基本知识介绍2.使用自定义指令实现改变输入框位置总结何为自定义指令 通过前面的学习,我们都有了一定的Vue知识,我们都知道可以在Vue实例创建后,在te...
    99+
    2023-05-16
    Vue自定义指令使用 Vue自定义指令原理
  • 实例介绍如何在Golang中显示图片
    随着计算机和互联网的飞速发展,绝大部分应用软件都需要涉及到图片这种媒介来完成某些功能。在编程语言中,提供了各种API和函数来处理图片。Golang是一种新的编程语言,它被设计用于开发高效,可靠且简单的软件。尽管它是一种相对较新的语言,但在越...
    99+
    2023-05-14
  • HTML5中Canvas实现图片缩放、翻转、颜色渐变的示例分析
    这篇文章将为大家详细讲解有关HTML5中Canvas实现图片缩放、翻转、颜色渐变的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。翻转、移动、平移、放大、缩小XML/HTML Code复制内容到剪贴...
    99+
    2023-06-09
  • 实例介绍:使用Docker快速搭建多版本PHP开发环境
    本篇文章给大家带来了关于PHP的相关知识,其中主要介绍了关于怎么使用docker快速搭建多版本PHP开发环境的相关内容,下面一起来看一下希望对大家有帮助。文章中使用的软件:Mac:11.4(macOS Big Sur) ,处理器为:Inte...
    99+
    2023-05-14
    php
  • 微信小程序项目实例——图片处理小工具(自制低配版美图秀秀)
    微信小程序项目实例——图片处理小工具(自制低配版美图秀秀) 文章目录 微信小程序项目实例——图片处理小工具(自制低配版美图秀秀)一、项目展示二、滤镜三、效果图四、动态滤镜文末 项目代码见文...
    99+
    2023-09-01
    微信小程序 小程序 javascript android ios
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作