DavidInLove
asked on
How to get a canvas from sprite image with zooming
Hi,
Here is a code that is working to draw a canvas from a sprite in case the size
of the canvas is the same as the one of the sprite selected background image.
I need to zoom it and display a canvas with twice more size but it takes the
next image of the sprite (you can run the code) instead to zoom it.
Can some one tell me how to process please?
Here is a code that is working to draw a canvas from a sprite in case the size
of the canvas is the same as the one of the sprite selected background image.
I need to zoom it and display a canvas with twice more size but it takes the
next image of the sprite (you can run the code) instead to zoom it.
Can some one tell me how to process please?
<!DOCTYPE html>
<html>
<head>
<title> EE Q_28383720 </title>
<script src="http://code.jquery.com/jquery.min.js"></script>
<style>
.icone
{
margin-left:0px;
}
.icone-1 { background-position: left top }
.icone-2 { background-position: 14.2857% top }
.icone-3 { background-position: 28.5714% top }
.icone-4 { background-position: 42.8571% top }
.icone-5 { background-position: 57.1428% top }
.icone-6 { background-position: 71.4285% top }
.icone-7 { background-position: 85.7142% top }
.icone-8 { background-position: right top }
ul
{
padding:0px;
border:3px solid blue;
display: inline-block;
}
.icone li {
margin:auto;
text-align:center; /* non*/
vertical-align:bottom;
padding:0px;
width: 75px;
height: 100px;
border-radius:16px;
border: solid white 5px;
color: white;
opacity: 1;
background-image: url("http://www.davidinlove.com/img/sprite_menu_DT.jpg");
background-repeat: no-repeat;
display: inline-block;
list-style-type:none;
}
.menuli
{
display: inline-block;
margin-top: 60px;
padding: auto;
width: 99%;
text-align:center;
border-radius:5px;
bottom: 0;
background-color: rgb(24,24,24); /* Pour les anciens navigateurs */
background-color: rgba(24,24,24,0.6);
}
</style>
</head>
<body>
<div id="id-menu" class="c-menu">
SPRITE<br/>
<ul class="icone">
<a href="#" id = "IMG1" ><li class="icone-1" id = "IMG1child" ><div class="menuli">Draw the <br\>eiffel tower</div></li></a>
<a href="#" id = "IMG2" ><li class="icone-2" id = "IMG2child" ></li></a>
<a href="#" id = "IMG3" ><li class="icone-3" id = "IMG3child" ></li></a>
<a href="#" id = "IMG4" ><li class="icone-4" id = "IMG4child" ></li></a>
<a href="#" id = "IMG5" ><li class="icone-5" id = "IMG5child" ></li></a>
<a href="#" id = "IMG6" ><li class="icone-6" id = "IMG6child" ></li></a>
<a href="#" id = "IMG7" ><li class="icone-7" id = "IMG7child" ></li></a>
<a href="#" id = "IMG8" ><li class="icone-8" id = "IMG8child" ></li></a>
</ul>
</ul>
</div>
<hr>
CANVAS FROM PICTURE I want a zoom *2</br>
<!-- <canvas id="myCanvas_OUT0" width="75" height="100"></canvas> -->
<canvas id="myCanvas_OUT0" width="150" height="200"></canvas>
<script>
var contextout0, contextout21;
function custompos(p, isY, cnv, img) {
var ti, tc;
if (isY) {
ti = img.height;
tc = 100; // cnv.height;
p = p.replace('top', '0').replace('bottom', '100%'); // ti - tc
} else {
ti = img.width;
tc = 75; // cnv.width;
p = p.replace('left', '0').replace('right', '100%'); // ti - tc
}
if (p.substr(-1) == '%') {
p = Number(p.substr(0, p.length - 1)) * (ti - tc) / 100;
}
return p;
}
$("a").click( function(e) {
e.preventDefault();
img_srcout0="";
img_srcout0= $(this).children(":first").css('background-image').replace(/^url\((['"]?)(.*?)\1\).*$/i, "$2");
var bpos = $(this).children(":first").css('background-position');
elemout0 = document.getElementById("myCanvas_OUT0");
if (elemout0 && elemout0.getContext)
{
contextout0 = elemout0.getContext("2d");
if (contextout0)
{
imgout0=new Image();
imgout0.onload=function(){
// some extra code to get position, this is not completely generic!
var bposa = bpos.split(' ');
var bposx = custompos(bposa[0], false, elemout0, imgout0);
var bposy = custompos(bposa[1], true, elemout0, imgout0);
contextout0.drawImage(imgout0,-bposx,-bposy);
/*
imgout0.css("width","150px");
imgout0.css("height","200px");
*/
//imgdout0 = contextout0.getImageData(0, 0, 303,539);
//pixout0 = imgdout0.data;
};
imgout0.src=img_srcout0;
}
}
});
</script>
</body>
</html>
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
It is only excellent.
Thanks for your time I am able now to load canvas zoomed from sprites that is
optimize loading time for tablet with responsive design!!!