Canvas image zoom

REKLAM
canvas Ante Stipani?ev tarafından Easeljs  kullanılarak hazırlanmış bir  canvas resim büyütme  örneği. Bu zaman kadar  sadece bir  defa rastladığım ve  normal bir jQuery  eklentisi  sandığım Easeljs de  jQuery  gibi  kullanılabilen bir javascript  kütüphanesidir. Eseljs ile  hazırlanan örnekler  gerçektende  çok güzel görünüyorlar. Şimdilik webmaster kategorisine yeni bir kategori  ekleyerek ileriki  zamanlarda  sizler  için Easeljs  hakkında da örnekler paylaşmaya gayret göstericem. Demo örneğinde mouse  ile  resmin bulunduğu çerçeveye  girdiğiniz  an ufak bir pencerede  resmin tamamı  görünüyor  ve canvas çerçevesi içinde  bulunan resim mercek  ile izleniyormuş gibi  bir  efekt  veriyor. Resmin olduğu çerçeveye  tıkladığınızda resim sabitleniyor  ve mouse  ile  resim çerçevesi  içinde  gezdiğinizde dahi resim sabit olarak kalıyor. Tekrar hareket ettirmek için mouse  ile resmin üstüne tıklamanız  gerekiyor. Kullanım
  •  Head  etiketleri arasına eklenmesi gereken  bölümler.
Easeljs  dosya adresi : 
<script type="text/javascript" src="https://code.createjs.com/easeljs-0.6.0.min.js"></script>
<script type="text/javascript" src="canvas.js"></script>
JavaScript : 
var stage;

function init() { 
	var canvas = document.getElementById("canvas");
 if (!canvas || !canvas.getContext) return;

	stage = new createjs.Stage(canvas); 
 stage.enableMouseOver(5);
 stage.mouseMoveOutside = false; 
 createjs.Touch.enable(stage);

 var W = canvas.width, H = canvas.height, margin = 20, locked = false;
 var minimapWidth, minimapHeight, minimap, minimapFrame, minScale, currentScale, msg, bmpWidth, bmpHeight, bmp_maxx, bmp_maxy, frame_maxx, frame_maxy;

 // bitmap
 var bmp = new createjs.Bitmap(); 
 stage.addChild(bmp); 

 msg = new createjs.Text("Loading...", '10px Arial', '#FFFFFF');
	msg.x = 4;
 msg.y = H - 16; 
	stage.addChild(msg);
 stage.update();

 var img = new Image();  
  img.onload = imgLoaded;  
  img.src = 'https://jsrun.it/assets/b/I/A/K/bIAKE.jpg';

 function imgLoaded(event) {  
  bmp.image = event.target;  
  start();
 }

 function start() { 
  bmpWidth = bmp.image.width;
  bmpHeight = bmp.image.height;  

  bmp_maxx = bmpWidth - W;
  bmp_maxy = bmpHeight - H;

  // minmap
  minimapWidth = 160;
  minimapHeight = minimapWidth * bmpHeight/bmpWidth;

  minimap = new createjs.Container();
  minimap.x = minimap.y = 4;
  minimap.visible = false;
  stage.addChild(minimap);

  // thumb  
  var minimapBmp = bmp.clone();  
  var minimapScale = minimapWidth/bmpWidth;
  minimapBmp.setTransform(0, 0, minimapScale, minimapScale);
  minimap.addChild(minimapBmp);

  // frame
  var minimapFrameGraphics = new createjs.Graphics().setStrokeStyle(1, "round").beginStroke("#ffffff").drawRect(0, 0, minimapWidth, minimapHeight);
  minimap.addChild(new createjs.Shape(minimapFrameGraphics));

  var frame_width = minimapWidth * W / bmpWidth;
  var frame_height = minimapHeight * H / bmpHeight;
  frame_maxx = minimapWidth - frame_width;
  frame_maxy = minimapHeight - frame_height;
  var minimapFrameGraphics2 = new createjs.Graphics().setStrokeStyle(1, "round").beginStroke("#00ff00").drawRect(0, 0, frame_width, frame_height);
  minimapFrame = new createjs.Shape(minimapFrameGraphics2);
  minimap.addChild(minimapFrame); 

  // message
  msg.visible = false;
	 stage.addChild(msg);	
  updateMessage();

  // calculate min image scale
  minScale = Math.max(W / bmpWidth, H / bmpHeight);
  setImageScale(minScale);

  // mouse events
  if(bmpWidth >= W && bmpHeight >= H) {
  canvas.addEventListener("mouseover", mouseOver, false);
  canvas.addEventListener("mouseout", mouseOut, false);
  canvas.addEventListener("mousedown", toggleLock, false);

  stage.onMouseMove = mouseMoved;

  minimap.addEventListener("mouseover", minimapOver); 
  minimap.addEventListener("mouseout", minimapOut); 
  }

  stage.update();
 }

 function setImageScale(perc) { 
  currentScale = perc;
  bmp.scaleX = bmp.scaleY = currentScale;
  bmp.x = (W - bmp.image.width * currentScale) * 0.5;
  bmp.y = (H - bmp.image.height * currentScale) * 0.5;
 }

 function showMinimap(e) { 
  minimap.visible = e;
 }  

 function mouseOver(event) {  
  msg.visible = true;
  showMinimap(true);
  stage.update();  
 } 

 function mouseOut(event) {
  msg.visible = false;  
  resetCanvas();  
 }

 function resetCanvas() {
  if(locked===true) {  
  stage.update(); 
  return;
  }

  showMinimap(false);
  setImageScale(minScale);
  stage.update(); 
 }

 function toggleLock(event) {
  locked = !locked;

  showMinimap(true); // for touch
  updateMessage();
  stage.update();
 }

 function mouseMoved(event) { 
  if(locked===true) return;

  if(minimap.visible === false) showMinimap(true); // for touch
  update((event.stageX-margin)/(W-2*margin), (event.stageY-margin)/(H-2*margin));
  stage.update();
 }

 function minimapOver(event) {
  minimap.alpha = 0.3;
  stage.update();
 }

 function minimapOut(event) {
  minimap.alpha = 1; 
  stage.update();
 } 

 function update(xperc, yperc) {
  if(xperc<0) xperc = 0;
  else if(xperc>1) xperc = 1;
  if(yperc<0) yperc = 0;
  else if(yperc>1) yperc = 1;
  bmp.setTransform(-xperc * bmp_maxx, -yperc * bmp_maxy);
  minimapFrame.setTransform(xperc * frame_maxx, yperc * frame_maxy);
 }

 function updateMessage() {
  if(locked===true) {
  msg.text = 'LOCKED. Click to unlock';
  } else {
  msg.text = 'Click to lock';
  }
 } 
}

// Init
window.addEventListener('load', init, false);
  •  Body etiketleri arasına eklemeniz gereken bölüm.
Html : 
<canvas id='canvas' width="700" height="600"></canvas>
yanit +0 yanıt
report Bildir

pouyan bu paylaşım hakkındaki görüşlerini merak ediyor.

Topluluğa katılmak ister misin?

Paylaşım yapmak ve etkileşime geçmek için giriş yapmalısın.
Kategoriler
Bu içeriği paylaş
Hazırlanıyor...
🏆 En iyiler
Yükleniyor...