* Редактировать: с тех пор, как я написал это, я перестал использовать backstretch на обычных настройках, потому что он не очень хорошо работает на смартфонах Android или когда ориентация планшетов изменилась.Однако, эта модификация, объясненная здесь, по-прежнему прекрасно работает, поэтому, если вы хотите читать версию с фиксированной высотой - я прикрепил JS ниже, HTML-код:
<body>
<div id="backimage"></div>
</body>
Вот ссылка на файл JS -> http://www.mcnab.co/backstretch.js
Я хотел использовать backstretch для заполнения элемента, который был на всю ширину, но занимал только верхние 560px экрана.И если размер изображения должен был быть больше, чем оригинал, он не центрировался по вертикали, а был смещен, так что верхняя часть исчезла.
Да, ссылка выше верна, вы меняете контейнер с тела на элементВы хотите заполнить, в данном случае это было # backimage
// Append the container to the #backimage, if it's not already there
if($("#backimage #backstretch").length == 0) {
$("#backimage").append(container);
}
Затем я изменил код, чтобы назначить фиксированную высоту CSS загруженному изображению, а не 100%;
// If this is the first time that backstretch is being called
if(container.length == 0) {
container = $("<div />").attr("id", "backstretch")
.css({left: 0, top: 0, position: "fixed", overflow: "hidden", zIndex: -999999, margin: 0, padding: 0, height: "560", width: "100%"});
} else {
// Prepare to delete any old images
container.find("img").addClass("deleteable");
}
Чтобы достичь этого, метод _adjustBG должен быть немного изменен.Прежде всего вам нужно предоставить переменным imgWidth и imgHeight глобальную область видимости.Удалите их из
var self = $(this);
и добавьте их к
rootElement = ("onorientationchange" in window) ? $(document) : $(window),
imgRatio, bgImg, imgWidth, imgHeight, bgWidth, bgHeight, bgOffset, bgCSS;
Наконец, я переписал часть метода _adjustBG, чтобы использовать imgWidth и imgHeight вместо того, чтобы все это основывалось на обнаруженной ширине браузераи высота.
function _adjustBG(fn) {
try {
bgCSS = {left: 0, top: 0}
bgWidth = rootElement.width();
bgHeight = bgWidth / imgRatio;
if( bgHeight <= 560 ) {
bgHeight = 560;
bgWidth = 560 * imgRatio;
bgOffset = ( bgWidth - rootElement.width() ) / 2;
if(settings.centeredY) $.extend(bgCSS, {left: "-" + bgOffset + "px"});
} else {
bgHeight = (rootElement.width() / imgRatio);
bgWidth = rootElement.width()
bgOffset = ( bgHeight - 560 );
if(settings.centeredY) $.extend(bgCSS, {top: "-" + bgOffset + "px"});
}
$("#backstretch, #backstretch img:last").width( bgWidth ).height( bgHeight )
.filter("img").css(bgCSS);
} catch(err) {
// IE7 seems to trigger _adjustBG before the image is loaded.
// This try/catch block is a hack to let it fail gracefully.
}
// Executed the passed in function, if necessary
if (typeof fn == "function") fn();
}
};
Это прекрасно работает для меня, и я надеюсь, что это поможет кому-то еще.Если кто-нибудь придет сюда и даст какие-нибудь комментарии о том, как я мог бы сделать это лучше, я был бы рад услышать их.
Приветствия,
Робби.