рдПрдЪрдЯреАрдПрдордПрд▓ 5 рдХреИрдирд╡рд╕ рдореИрдк - рдореИрдк рдЗрдВрдЬрди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди

рдПрдХ рдмрдбрд╝реА рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рд╡реЗрдм-рдЖрдзрд╛рд░рд┐рдд рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ (рдЬрд┐рд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдФрд░ рдкреЛрд╕реНрдЯ рдореЗрдВ рд╕рдВрднрд╡ рд╣реИ), рдореИрдВ HTML5 CANVAS рдкрд░ рд▓рд╛рдЧреВ рдПрдХ рдХрд╛рд░реНрдЯреЛрдЧреНрд░рд╛рдлрд┐рдХ рдЗрдВрдЬрди рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдЗрд╕рдХрд╛ рд╡рд┐рдХрд╛рд╕ рдмреАрдЯрд╛ рдЪрд░рдг рдореЗрдВ рдкрд╣реБрдВрдЪ рдЧрдпрд╛ рдФрд░, рдореЗрд░реЗ рдкреНрд░рдмрдВрдзрди рдХреА рд╕реНрд╡реАрдХреГрддрд┐ рдХреЗ рд╕рд╛рде, рдЗрди рдХрд╛рд░реНрдбреЛрдВ рдХреЛ рдЖрдо рдЬрдирддрд╛ рдХреЛ рджрд┐рдЦрд╛рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рдереАред

рдЫрд╡рд┐

рд╕рд╛рдорд╛рдиреНрдп рдЬрд╛рдирдХрд╛рд░реА


рдЗрдВрдЬрди рдХреЛ рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдпрд╛ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдХреЗрд╡рд▓ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА jQuery рд╣реИред

рдорд╛рдирдЪрд┐рддреНрд░ рдЪрд┐рддреНрд░ - рдЯрд╛рдЗрд▓реЗрдВ - рд╣рдорд╛рд░реА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрддреНрдкрдиреНрди рдХреА рдЬрд╛рддреА рд╣реИрдВред рдЕрднреА рднреА рдХреБрдЫ рдХреЗ рд▓рд┐рдП рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рдмрд╛рдХреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдордиреЗ рдЕрднреА рддрдХ рдЙрдирдХреЗ рдЕрдиреБрдХреВрд▓рди рд╕реЗ рдирд┐рдкрдЯрд╛ рдирд╣реАрдВ рд╣реИред

рд╕рдм рдХреБрдЫ CANVAS рдкрд░ рдЦреАрдВрдЪрд╛ рдЧрдпрд╛ рд╣реИ, рдЕрддрд┐рд░рд┐рдХреНрдд рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рдкреИрдирд▓ рдФрд░ рд▓реЗрдмрд▓ рдХреЗ рдкреЙрдкрдЕрдк рдЬреИрд╕реЗ рддрддреНрд╡реЛрдВ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде (рд╣рд╛рд▓рд╛рдВрдХрд┐ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рд▓рд┐рдВрдХ рд╕реЗ рдбреЗрдореЛ рдореЗрдВ рд╡реЗ рдЕрднреА рднреА рдирд╣реАрдВ рд╣реИрдВ)ред

рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди


рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЙрдбреНрдпреВрд▓рд░ рд╣реИ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореБрдЦреНрдп рднрд╛рдЧ рд╣реЛрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрдирдХреЗ рдирд╛рдореЛрдВ рд╕реЗ рд╕реНрдкрд╖реНрдЯ рд╣реИ: рдХреИрдирд╡рд╕рдбреНрд░реЗрдЧрд░, рдХреИрдирд╡рд╕рдПрд╡реЗрдВрдЯрд░, рдХреИрдирд╡рд╕рдореИрдЧреНрд▓реЛрдбрд░, рдХреИрдирд╡рд╕ рдореИрдкрд░, рдХреИрдирд╡рд╕ рдореИрдХрд░, рдХреИрдирд╡рд╕рдореИрдиреА рдореИрдкрд░, рдХреИрдирд╡рд╕рдСрдЬрд╝рд░, рдХреИрдирд╡рд╕ рдЯреВрд▓, рдХреИрдирд╡рд╕ рдЬрд╝реВрдорд░ред

рдХрд╛рд░реНрдбреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╕рд╣реА рдЬрдЧрд╣ html'a рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрдВрдХреНрддрд┐ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ:
<canvas id="map2d"></canvas> 

рдЕрдЧрд▓рд╛, рдЬреЗрдПрд╕ рдХреЛрдб рдореЗрдВ, рд╣рдо рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ):
 $(function() { mWrap = new MapsWrapper({ mapDivId: "map2d" //   ID canvas'a,      }); }); MapsWrapper = function(properties) { this.initialize(properties); }; $.extend(MapsWrapper.prototype, { v2DMapDiv : null, v2DMapComponent : null, initialize: function(prop){ this.v2DMapDiv = prop.mapDivId; this.initMap(); }, initMap: function(){ var GlobalParams = { staticMapUrl: ["http://gate.looxity.ru:8088/map.html", "http://zain.looxity.ru:8088/map.html", "http://kaph.looxity.ru:8088/map.html"], initCrd : {x: 7445, y: 9925}, initZoom : 0.25, zoomList : [1, 0.5, 0.25, 0.1, 0.05, 0.025], miniMap : true, tools : {scaler: true, polygoner: true} }; this.v2DMapComponent = new CanvasMapper (this.v2DMapDiv); this.v2DMapComponent.initialize(GlobalParams); } }); 


рдЖрдЗрдП рд╣рдо рдорд╛рдкрджрдВрдбреЛрдВ рдкрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдзреНрдпрд╛рди рджреЗрдВ:

рдЖрдВрддрд░рд┐рдХ рдпрд╛рдВрддреНрд░рд┐рдХреА


рдпрд╛ рдЗрд╕рдХреЗ рдкреАрдЫреЗ рдпрд╛ рдЙрд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рдХреНрдпрд╛ рдЫрд┐рдкрд╛ рд╣реИред рдЪрд▓рд┐рдП рдореБрдЦреНрдп рдШрдЯрдирд╛рдУрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рддреЗ рд╣реИрдВред

рд╣рдо рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ

рдЬрдм рдорд╛рдирдЪрд┐рддреНрд░реЛрдВ рдХреЛ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рджрд┐рдЦрд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЯрд╛рдЗрд▓реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рдЧрдгрдирд╛ рдХреИрдирд╡рд╛рд╕ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╡рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреА рдЬрд╛рддреА рд╣реИред 256x256 рдХреЗ рджрд┐рдП рдЧрдП рдЯрд╛рдЗрд▓ рдЖрдХрд╛рд░ рдХреЗ рд▓рд┐рдП, рдХреИрдирд╡рд╛рд╕ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдЬрд╛рдирдирд╛, рд╣рдо рдЗрд╕ рдСрдкрд░реЗрд╢рди рдХреЛ рдХрд░рддреЗ рд╣реИрдВред

рд╣рдо рдЖрдЧреЗ рдмрдврд╝ рд░рд╣реЗ рд╣реИрдВ

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬрдм рдирдХреНрд╢рд╛ рдЪрд▓рддрд╛ рд╣реИ - рдбреНрд░реИрдЧ - рд╣рдо рд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ рдпрджрд┐ рд╣рдордиреЗ рдорд╛рдирдЪрд┐рддреНрд░ рдХреЛ рдЗрддрдирд╛ рдЖрдЧреЗ рдмрдврд╝рд╛ рджрд┐рдпрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдПрдХ рдирдИ рдЯрд╛рдЗрд▓ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдо рдпрд╣ рднреА рдЬрд╛рдВрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╕рднреА рдЯрд╛рдЗрд▓реЗрдВ рдЧреБрдВрдЬрд╛рдЗрд╢ рдореЗрдВ рд╣реИрдВ, рдпрджрд┐ рдирд╣реАрдВ, рддреЛ "рдХрдЪрд░рд╛ рдХрд▓реЗрдХреНрдЯрд░" рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
 unVisibleTilesCollector: function() { for(var cnt = 0; cnt < this.__TILES__.length; cnt++) { if( (this.__TILES__[cnt].canvX + this.tileSize) < 0 || this.__TILES__[cnt].canvX > this.canvas.width || this.__TILES__[cnt].canvY > this.canvas.height || (this.__TILES__[cnt].canvY + this.tileSize) < 0 ) { this.__TILES__.splice(cnt, 1); cnt--; } } } 


рд╕реНрдХреЗрд▓реЗрдмрд▓ (ZoomIn, zoomOut)

рдЬрдм "рдореВрд╕рд╡реНрд╣реАрд▓" рдШрдЯрдирд╛ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рддреА рд╣реИ, рддреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореБрдЦреНрдп рдХреНрд░рд┐рдпрд╛рдПрдВ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рд╣реЛрддреА рд╣реИрдВ:
 $.extend(this.__ANIM_TILES__, this.mapper.__TILES__) 

 for(cnt; cnt < this.animSteps; cnt++){ setTimeout(function(){ _this.ctx.clearRect(0,0,_this.canvas.width,_this.canvas.height); _this.ctxMarker.clearRect(0,0,_this.canvas.width,_this.canvas.height); animScale += scale*stepScale; _this.drawAllAnimTiles(evt, { animScale: animScale, stepCurrNum: Math.round(Math.abs(animScaleStart-animScale)/stepScale), stepScale: stepScale }); }, delay*cnt); } 

 MapsWrapper.v2DMapComponent.update() 


рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ


рдлрд╛рдпрд░рдлрд╝реЙрдХреНрд╕, рдХреНрд░реЛрдо, рд╕рдлрд╛рд░реА, рдУрдкреЗрд░рд╛ рдФрд░ рдЖрдИрдИ рдХреЗ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдХрд╛рдо рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рдЕрднреА рднреА рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ, рдореИрдВ рдлрд┐рд░ рд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░ рдЬреЛрд░ рджреЗрддрд╛ рд╣реВрдВред рдЪреВрдВрдХрд┐ рдХреИрдирд╡рд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рддрдХрдиреАрдХ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ IE рд╕рдВрд╕реНрдХрд░рдг 8 рдФрд░ рдЙрдкрд░реЛрдХреНрдд рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рдирд┐рдЪрд▓реЗ рдФрд░ рдмрд╣реБрдд рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рд╣реИрдВред

рдХрд╛рд░реНрдб рджреНрд╡рд╛рд░рд╛ TODO рд╕реВрдЪреА


1. рдорд╛рдирдЪрд┐рддреНрд░ рдЯрд╛рдЗрд▓реЛрдВ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдХрдо рдХрд░рдирд╛ (рдЧрддрд┐ рдореЗрдВ рдПрдХ рдареЛрд╕ рд╡реГрджреНрдзрд┐ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП);
2. рдЬрд╝реВрдо рд╕реНрд▓рд╛рдЗрдбрд░;
3. рдорд╛рдирдЪрд┐рддреНрд░ рдкрд░ рдПрдХ рдмрд┐рдВрджреБ рдкрд░ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрдкрдХрд░рдг (рднрд╡рди рдХрд╛ рдкрддрд╛, рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ, рдЖрджрд┐);
4. ???

рдбреЗрдореЛ : share.arkada-sw.ru/canvasmap

ps рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛрдб рдФрд░ рдорд╛рдирдЪрд┐рддреНрд░ рдХреЗ рд╕рднреА рдЕрдзрд┐рдХрд╛рд░ рдЙрд╕ рдХрдВрдкрдиреА рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдореИрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВ
pps рдпрджрд┐ рдпрд╣ рд▓реЗрдЦ рд░реБрдЪрд┐ рд▓реЗрддрд╛ рд╣реИ, рддреЛ рдореЗрд░реА рдЕрдЧрд▓реА рдкреЛрд╕реНрдЯ рдореЗрдВ рдорд╛рдирдЪрд┐рддреНрд░ рдбреЗрдЯрд╛ рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрдкрдпреЛрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рд╡рд░реНрдгрди рд╣реЛрдЧрд╛

Source: https://habr.com/ru/post/In133638/


All Articles