使用JQuery动态对齐图像中心

时间:2012-11-06 15:52:30

标签: jquery html5 firefox internet-explorer-8 opera

我正在尝试以网格类型格式动态对齐图像中心。每个图像都是从CDN动态加载的,其最大高度和最大宽度为.thumbnail img。容器div是固定的宽度和高度。

#storeItems .thumbnail {
border:1px solid #637678;
width:136px;
height:151px;
padding:1px;
position:relative;
margin:0 auto;
display:block;
overflow:hidden;
}
#storeItems .thumbnail img {
max-width:130px;
max-height:130px;
display:block;
position:relative;
}

我创建的JavaScript确实在IE8 +,Chrome,Opera,Safari和Firefox中正确对齐图像。但是,当您第一次加载页面时,我的问题出现在IE8 +,Opera和Firefox中,在您刷新页面之前它不会对齐。页面缓存后,它保持对齐正常。这似乎只在初始页面加载后没有缓存页面。

(function($) {
$("#storeItems .thumbnail").each(function(i){
    var img = $(this).find('img');

    var y = $(this).height(),
        x = $(this).width();
    /**
     * WebKit browsers which incorrectly calculates margin
     */
    if($.browser.webkit) {
        $(this).css({
            'display': 'table-cell',
            'vertical-align': 'middle',
            'text-align': 'center'
        });
        img.css({
            'margin': 'auto auto'
        });
    }
    else {
        img.css({
            'margin-top': ((y-img.height())/2)+'px',
            'margin-left': ((x-img.width())/2)+'px'
        });
    }
});
})(jQuery);

我在页面底部加载了JavaScript。我试着在标题中加载它。我还在标题和底部都使用了$(document).ready();;尝试之后它根本没有对齐。有什么我想念的吗?似乎计算在第一次运行时不会在这些浏览器中发生。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

这样做:

(function($) {
    $(document).ready(function() {
        $("#storeItems .thumbnail").each(function(i){
            var img = $(this).find('img');

            var y = $(this).height(),
                x = $(this).width();
            /**
             * WebKit browsers which incorrectly calculates margin
             */
            if($.browser.webkit) {
                $(this).css({
                    'display': 'table-cell',
                    'vertical-align': 'middle',
                    'text-align': 'center'
                });
                img.css({
                    'margin': 'auto auto'
                });
            }
            else {
                img.css({
                    'margin-top': ((y-img.height())/2)+'px',
                    'margin-left': ((x-img.width())/2)+'px'
                });
            }
        });
    });
})(jQuery);