动画元素,但保持容器居中

时间:2012-01-12 10:03:45

标签: javascript jquery css animation

我目前正在制作自定义灯箱脚本,需要一些帮助。我有动画调整大小的图像工作很好,但我遇到了一个小问题。灯箱显示在用户屏幕的中间,但是一旦我设置了宽度和高度的动画,它就不会保留在屏幕的中央,只使用旧< / strong>左侧和顶部值。

这里是灯箱本身的标记:

<div id="jqgal_container">
    <div id="jqgal_nav_left" class="jqgal_nav">&lt;</div>
    <div id="jqgal_main">
        <div id="jqgal_main_img"></div>
        <div id="jqgal_footer">
            <div id="jqgal_main_caption"><p></p></div>
            <div id="jqgal_thumbnav_left" class="jqgal_thumbnav">&lt;</div>
            <div id="jqgal_thumbs">
                <div id="jqgal_thumbs_container">
                    <ul></ul>
                </div>
            </div>
            <div id="jqgal_thumbnav_right" class="jqgal_thumbnav">&gt;</div>
        </div>
    </div>
    <div id="jqapp_nav_right" class="jqgal_nav">&gt;</div>
</div>

要显示的图像作为#jqgal_main_img元素存储在<img />中。我为#jqgal_main_img的宽度和高度设置了动画,但我也希望将整个容器(#jqgal_container)保持在屏幕中心。

我的问题是,我如何设置子元素的宽度动画,但仍然分别为容器的顶部和左侧位置设置动画,因此它似乎从中心扩展和增长?

此时为图像容器的宽度和高度设置动画的代码如下所示:

_resizeToFit : function(img_width, img_height, compFunc)
{
    // Calculate the width and height needed:
    var req_width  = img_width;
    var req_height = img_height;

    this._elements.mainimg.animate({ width: req_width }, {
        duration: 'fast',

        complete: function() {
            $.jqgal._elements.footer.width(req_width);
            $.jqgal._elements.mainimg.animate({ height: req_height }, 'fast', function() {
               if(compFunc != undefined) { compFunc.call(this); }
            });
        },

        step : function() {


        }
    });
}

2 个答案:

答案 0 :(得分:1)

同样为margin-left和margin-top设置动画:

  "margin-left" : ($(window).width() - req_width) / 2 
  "margin-top" : ($(window).height() - req_height) / 2

如果元素CSS位置为'绝对',则将margin-top / margin-left更改为左上角。

编辑:

在整个'animate'字符串的末尾添加

.parent().animate({
          "margin-left" : )($(window).width() - req_width) / 2) + this._elements.mainimg.parent().scrollLeft(),
  "margin-top" : (($(window).height() - req_height) / 2 ) + this._elements.mainimg.parent().scrollTop()
}}

或者在回调函数中:

$(this).parent().animate({...});

为方便起见,最好设置包含元素的变量......

$this = this._elements.mainimg;
$parent = $this.parent();

然后父animate()数据将如下所示:

         "margin-left" : )($(window).width() - req_width) / 2) + $parent.scrollLeft(),
  "margin-top" : (($(window).height() - req_height) / 2 ) + $parent.scrollTop()
}}

哪个更容易阅读!

答案 1 :(得分:-1)

我认为你应该设置边距和左边距离的动画。