使用Jquery将元素居中到可查看区域

时间:2012-05-15 17:22:44

标签: jquery

我有一个巨大的可滚动区域。在一个部分中,我有一个缩略图网格。单击时,拇指被克隆并动画到屏幕的中心,但它会动画到整个区域的中心,而不是您正在查看的区域; e,已滚动到的区域。如何让它动画到可视区域的中心? JQuery代码如下:

var $article = $('#news-articles .news-article').eq(index);
var $articleClone = $article.clone(true);  // clone the article for the corresponding link

// Create the expanded item container
var $expandedItem = $('<div>', {
id: 'item-expanded',
css: {
      width: 188,
  height: 188,
  background: '#fff',
  position: 'absolute',
  zIndex: 999
  },    
}); 

$expandedItem.append($img);  //Add the cloned image to the expanded item container              

$('body').append($expandedItem);  //Add the shaded overlay and the expanded item to the body

//Animate the size of the expanded item
    $expandedItem.animate({
        width: 400,
        height: 400,
        left: $(window).width()/2,
        top: $(window).height()/2,
        marginTop: -400/2,
        marginLeft: -400/2,
        }, {
            duration: DDBR.constant.ITEM_ANIMATION_SPEED,
            easing: DDBR.constant.ITEM_ANIMATION_EASING,
            queue: false,
            complete: function() {
                animFinished = true;
                if (animFinished) {
                    imageFade();                            
                    }
                }
            });

请注意我已尝试将$ expanded item的定位更改为'fixed'。但是,这会产生一个问题,因为它需要使用拇指的“偏移”从我获得的点击缩略图的位置进行动画处理。更改$ expandedItem的位置会导致它在首次加载时从拇指的位置进行动画处理,而不是在页面滚动后的当前位置。

希望一切都有意义。对此的任何帮助将不胜感激。

提前致谢。

2 个答案:

答案 0 :(得分:0)

您是否尝试将展开的项目的位置更改为相对,增加z-index属性,然后将其插入到您希望居中的区域内的div中?现在,你只是将它插入到body标签中,这将把它放在屏幕的中心。

或者,您可以尝试从以下位置更改宽度和高度属性的选择:

left: $(window).width()/2,
    top: $(window).height()/2,

要:

left: $('#centerArea').width()/2,
top: $('#centerArea').height()/2,

答案 1 :(得分:0)

知道了。必须使用向左滚动和滚动来调整左侧和顶部位置。代码:

//Animate the size of the expanded item
    $expandedItem.animate({
        width: DDBR.constant.ITEM_EXPANDED_WIDTH,
        height: DDBR.constant.ITEM_EXPANDED_HEIGHT,
        left: $(window).scrollLeft() + $(window).width()/2,
        top: $(window).scrollTop() + $(window).height()/2,
        marginTop: -DDBR.constant.ITEM_EXPANDED_HEIGHT/2,
        marginLeft: -DDBR.constant.ITEM_EXPANDED_WIDTH/2,
        }, {
            duration: DDBR.constant.ITEM_ANIMATION_SPEED,
            easing: DDBR.constant.ITEM_ANIMATION_EASING,
            queue: false,
            complete: function() {
                animFinished = true;
                if (animFinished) {
                    imageFade();                            
                    }
                }
            });