Si usted tiene una imagen dentro de un elemento que tiene border-radius
conjunto, y que desea ocultar las "esquinas" de la imagen, es necesario establecer border-radius
en la imagen para que coincida.
Pero en su caso eso no funcionará porque su imagen es mucho más grande que su elemento contenedor. Mejor es usar un <div>
como lente y establecer background-image
para que coincida con su imagen.
Demostración: http://jsfiddle.net/ThinkingStiff/wQyLJ/
HTML:
<div id="image-frame">
<img id="image" src="http://thinkingstiff.com/images/matt.jpg" />
<div id="lens" ></div>
<div>
CSS:
#image-frame {
position: relative;
}
#lens {
background-repeat: no-repeat;
border-radius: 150px;
height: 150px;
position: absolute;
width: 150px;
}
Guión:
document.getElementById('image-frame').addEventListener('mousemove', function (event) {
var lens = document.getElementById('lens'),
image = document.getElementById('image'),
radius = lens.clientWidth/2,
imageTop = this.documentOffsetTop,
imageLeft = this.documentOffsetLeft,
zoom = 4,
lensX = (event.pageX - radius - imageLeft) + 'px',
lensY = (event.pageY - radius - imageTop) + 'px',
zoomWidth = (image.clientWidth * zoom) + 'px',
zoomHeight = (image.clientHeight * zoom) + 'px',
zoomX = -(((event.pageX - imageLeft) * zoom) - radius) + 'px',
zoomY = -(((event.pageY - imageTop) * zoom) - radius) + 'px';
if(event.pageX > imageLeft + image.clientWidth
|| event.pageX < imageLeft
|| event.pageY > imageTop + image.clientHeight
|| event.pageY < imageTop ) {
lens.style.display = 'none';
} else {
lens.style.left = lensX;
lens.style.top = lensY;
lens.style.backgroundImage = 'url(' + image.src + ')';
lens.style.backgroundSize = zoomWidth + ' ' + zoomHeight;
lens.style.backgroundPosition = zoomX + ' ' + zoomY;
lens.style.display = 'block';
};
}, false);
window.Object.defineProperty(Element.prototype, 'documentOffsetTop', {
get: function() {
return this.offsetTop + (this.offsetParent ? this.offsetParent.documentOffsetTop : 0);
}
});
window.Object.defineProperty(Element.prototype, 'documentOffsetLeft', {
get: function() {
return this.offsetLeft + (this.offsetParent ? this.offsetParent.documentOffsetLeft : 0);
}
});
Salida:

¿ha establecido la propiedad 'overflow' del div en' hidden'? –
@BrianDriscoll, 'overflow: hidden' no funciona para esquinas redondeadas en elementos posicionados en cromo (u otros navegadores webkit). –
@ techie_28, aquí hay alguien que tuvo el mismo problema que tú. No lo respondieron, pero lo solucionaron: http://stackoverflow.com/questions/5736503/how-to-make-css3-rounded-corners-hide-overflow-in-chrome-opera –