jquery - 如何在将图像锚定在特定 Angular 落时缩放图像?

标签 jquery css animation zooming

我正在试验 CSS 缩放属性,我试图基本上放大图像,同时将其固定在某个点。因此,与其在 0,0 处的点保持不变时放大,不如从右下角开始放大。

所以这是我的尝试,但显然它有点“古怪”:

fiddle :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 Angular 在放大时保持不动。

最佳答案

如果你想缩放到图像的中心,那么改变:

    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 - 如何在将图像锚定在特定 Angular 落时缩放图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9284403/

相关文章:

jquery - 显示单击单词的文本。 jQuery

javascript - Canvas - 旋转文本动画

css - 在同一网页中重复使用 SVG 代码,而无需重写整个代码

javascript - 幻灯片的动画不起作用

java - JPanel 中的多个动画(线程)

javascript - 如何在悬停时暂停幻灯片放映

jquery - 如何用更高性能的等效函数替换 .each() 和 .find() 等 JQuery 函数?

javascript - 使用 JS 或 jQuery 处理表单提交时的 500 错误?

html - 在IE8中提交输入不可点击

javascript - 从移动 View 中删除 Div