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>
