Loupe

Loupe

by JordanBlount

HTML

<div id="ipadback">
    <div id="loupe" style="background-position: -288px -207px;"></div>
</div>

CSS

#ipadback {
    position: relative;
    top: 40px;
    left: 40px;
    width: 227px;
    height: 286px;
    background-image: url(http://campl.us/tweet/ipadback.png);
    border: solid 1px red;
}


#loupe {
    /*cursor: none;*/
    position: absolute;
    width: 150px;
    height: 150px;
    
    -webkit-border-radius: 150px;
    -moz-border-radius: 150px;
    border: 4px solid white;
    -webkit-box-shadow: 0 2px 3px rgba(0, 0, 0, 0.4);
    -moz-box-shadow: 0 2px 3px rgba(0, 0, 0, 0.4);
    
    background-color: white;
    background-image: url(http://campl.us/tweet/ipadback-zoomed.jpg);
    background-repeat: no-repeat;
}

JavaScript

var loupe = document.id('loupe');
var zoomedW = 1110;
var zoomedH = 1484;

document.id('ipadback').addEvents({
    mousemove: function(event) {
        var pos = this.getPosition();
        var x = Math.min(Math.max(0, event.page.x - pos.x), this.offsetWidth);
        var y = Math.min(Math.max(0, event.page.y - pos.y), this.offsetHeight);
        var left = x - (loupe.offsetWidth / 2);
        var top = y - (loupe.offsetHeight / 2);
        var bgX = -(x / this.offsetWidth) * zoomedW;
        var bgY = -(y / this.offsetHeight) * zoomedH;
        
        loupe.setStyles({
            'top': top,
            'left': left,
            'background-position': [bgX, bgY]
        });
    }
});