Mintik posted
3 year ago

Canvas image zoom

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>

 

 

 

 

Mintik is curious about your thoughts. Add a comment
Did you know that members who log in don't see ads?
Sign in with E-mail