Magno is a something I put together because … well, just because. The idea is to provide a magnifying lens effect using a background image and background position animation. The lens tracks the position of the mouse, with a slight delay (debouncing, to be exact).
You can try it here: http://jsbin.com/adobuv (thanks to @austegard for putting up the jsbin).
The "magnifier" is an absolutely positioned div with borders curved to perfection.
function makeMagnifier() {
var src = settings.src || img.attr("src");
magnifier = makeEmptyDiv();
magnifier.css({
position: "absolute",
opacity: 0,
width: settings.size, height: settings.size,
left: img.offset().left, top: img.offset().right,
"-moz-border-radius": settings.size * .5 + "px",
"border-radius": settings.size * .5 + "px",
"background-image": "url(" + src + ")",
"background-repeat": "no-repeat",
"z-index": 998
});
}
When the mouse pauses, the magnifier animates to the new location.
function onPosition(e) {
var offset = img.offset();
var backLeft = Math.round((e.pageX - offset.left) *
(-1 / settings.scale));
var backTop = Math.round((e.pageY - offset.top) *
(-1 / settings.scale));
backLeft += Math.round(settings.size / 2);
backTop += Math.round(settings.size / 2);
magnifier.animate({
left: e.pageX - (settings.size/2),
top: e.pageY - (settings.size/2),
"backgroundPosition": backLeft + "px " + backTop + "px"
});
}
Animating the background position of an element is not something jQuery can do without help. I used a plugin from Alexander Farkas.