有你錯過檢查的東西太多了。
首先
你$(this);
包含元素的數組,因爲你的選擇是img
$("img").middleify();
但是你存儲的值是這樣的:
var i = $(this);
var f = i.parent();
二
var wh = i.height() == i.width() ? f.width() < f.height() : i.width() > i.height();
var hw = i.height() == i.width() ? f.height() < f.width() : i.height() > i.width();
你不需要有這樣的條件,它真的讓我困惑。只需設置width:100%
然後height: auto
,因爲您的容器比其高度大width
。
三
return i.css({position: "relative", "z-index": 2, width: hw ? "100%" : "auto", height: wh ? "100%" : "auto", top: "50%", right: "50%", "margin-right": 0 - (i.width())/2, "margin-top": 0 - (i.width()/2)});
您計算width
,哪些是你沒有設置這些值尚未元素的height
。它更有可能獲得默認值。
爲了解決這個問題,你必須設定width
和height
第一分開來計算
"margin-right": 0 - (i.width())/2, "margin-top": 0 - (i.width()/2)});
把它們放在一起
$.fn.extend({
middleify: function(){
var i = $(this);
$.each(i, function(index, value) {
var elm = $(value);
var f = elm.parent();
elm.css({position: "relative", "z-index": 2, width: "100%", height:"auto", top: "50%", left: "50%"});
elm.css({"margin-left": 0 - (elm.width())/2, "margin-top": 0 - (elm.height()/2)});
});
}
});
$("img").middleify();
Fiddle
更新
由於設置更寬的圖像width
100%
會造成一個問題,讓我們利用這個邏輯上background:cover
$.fn.extend({
middleify: function(){
var i = $(this);
$.each(i, function(index, value) {
var elm = $(value);
var f = elm.parent();
var imgWidth = elm.width();
var imgHeight = elm.height();
var containerWidth = f.width();
var containerHeight = f.height();
var imgRatio = (imgHeight/imgWidth);
var containerRatio = (containerHeight/containerWidth);
if (containerRatio > imgRatio) {
var finalHeight = containerHeight;
var finalWidth = (containerHeight/imgRatio);
}
else {
var finalWidth = containerWidth;
var finalHeight = (containerWidth * imgRatio);
}
elm.css({position: "relative", "z-index": 2, width: finalWidth, height: finalHeight, top: "50%", left: "50%"});
elm.css({"margin-left": 0 - (elm.width())/2, "margin-top": 0 - (elm.height()/2)});
});
}
});
$("img").middleify();
Fiddle
我無法理解你的最終目標位置是。 – Jack
@Jack我想要圖像在矩形中間,就像'background-size:cover;' – GINCHER
@Jack我已經添加了目標:http://jsfiddle.net/beb8o2g6/2/ – GINCHER