我正在尝试使用CSS zoom属性,并且尝试在将图片固定在特定点的同时基本放大图片。因此,与其希望在0,0的点保持不变的情况下进行放大,还不如从右下角进行缩放。

因此,这是我的尝试,但显然有点“古怪”:

小提琴:http://jsfiddle.net/csaltyj/nJ2M8/

HTML:

<div id="overlay">
    <div class="square">
        <img src="http://placekitten.com/800/800" width="400" height="400" />
    </div>
</div>


Javascript:

$('.square img').on('click', function() {
    $('.square').animate({
        zoom: '200%',
        left: '-200px',
        top: '-200px'
    }, 200);
});


CSS:

#overlay {
    overflow: hidden;
    width: 400px;
    height: 400px;
}

.square {
    position: relative;
    width: 320px;
    height: 320px;
    background: #333;
    vertical-align: bottom;

    font-size: 2em;
    font-family: Impact, Arial, sans-serif;
    text-transform: uppercase;
    color: #fff;
}


有什么办法让它表现出我想要的样子?我需要400,400转角才能放大。

最佳答案

如果要缩放到图像的中心,请更改:

    left: '-200px',
    top: '-200px'


至:

    left: '-50%',
    top: '-50%'


这是一个演示:http://jsfiddle.net/nJ2M8/1/

更新资料

尝试使用transform,它能够缩放元素。这是我不久前编写的一些代码,用于执行此操作:

$(function () {
    var venderTransform = ($.browser.webkit)  ? 'WebkitTransform' :
                      ($.browser.mozilla) ? 'MozTransform' :
                      ($.browser.msie)    ? 'MsTransform' :
                      ($.browser.opera)   ? 'OTransform' : 'transform'


    $('.square').each(function () {
        $.data(this, 'scale', 3);
    }).bind('mousewheel', function (event, delta) {
        event.preventDefault();

        var sc = $.data(this, 'scale');

        if ((delta == 1 && sc < 5) || (delta == -1 && sc > 1)) {
            sc += delta;
            $.data(this, 'scale', sc);
            $(this).children('img').css(venderTransform, 'scale(' + sc + ')');
        }
    }).bind('mousemove', function (event) {
        var sc = $.data(this, 'scale') || 1;//scale
        if (sc > 1) {
            var $this = $(this),
                X  = (typeof(event.offsetX) == 'undefined') ? (event.pageX - $this.offset().left) : (event.offsetX),//current cursor X position in bullet element
                Y  = (typeof(event.offsetY) == 'undefined') ? (event.pageY - $this.offset().top) : (event.offsetY),//current cursor Y position in bullet element
                w  = 400,//width of thumbnail
                h  = 400,//height of a thumbnail
                nX = ((w / 2) - X),//new X
                nY = ((h / 2) - Y),//new Y
                tf = 'translate(' + (nX * (sc - 1)) + 'px, ' + (nY * (sc - 1)) + 'px) scale(' + sc + ')';//transform string
            $this.children('img').css(venderTransform, tf);
        }
    }).bind('mouseleave', function () {

        //reset .has-thumb element on mouseleave
        $.data(this, 'scale', 3);
        $(this).children('img').css(venderTransform, 'translate(0, 0) scale(1)');
    });
});


这是一个演示:http://jsfiddle.net/nJ2M8/2/(缩放跟随光标,您可以使用鼠标滚轮放大/缩小)

关于jquery - 如何将图像 anchor 定在特定 Angular 落时进行缩放?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9284403/

10-09 08:06
查看更多