Читая ваше описание эффекта, которого вы пытаетесь достичь, и предполагая, что вы не собираетесь использовать решение на основе медиа-запроса CSS, вы должны быть в состоянии сделать это с (относительно) минимальными изменениями в исходной функции.:
function slide_holder(){
var winWidth = $(window).width(),
winHeight = $(window).height(),
smallMode = (winWidth < 1100);
$('#main').css({ 'width': (winWidth - (smallMode ? 225 : 0)) +'px' });
$('.flexslider-container').css({
'height': (winHeight - (smallMode ? 85 : 0)) +'px',
'width': (winWidth - (smallMode ? 225 : 0)) +'px'
});
$('.flexslider').css({'height': (winHeight-(smallMode ? 275 : 0)) + 'px'});
$('#tS3').css({ 'height': (winHeight - (smallMode ? 200 : 0)) + 'px' });
$('#foot').css({ 'width': (winWidth - (smallMode ? 325 : 0)) + 'px' });
}
То, что я делаю, это получение ширины и высоты один раз в начале функции, а не непрерывный вызов $(window).width()
и $(window).height()
, а затем установкалогическое значение smallMode
, которое используется для определения того, какое смещение использовать с таким выражением:
(winWidth - (smallMode ? 225 : 0))
, которое говорит, что smallMode
равно true
вычитать 255
в противном случае вычитать 0
(очевидно,вы должны заменить свои собственные смещения вместо 0
).
Читая ваш обновленный код «сбой», вы, похоже, хотите переопределить функцию slide_holder()
в зависимости от результатов условий if / else if.В общем смысле это возможно, но не в том синтаксисе, который вы используете.Если вы используете объявление функции в форме:
function slide_holder() {
/* function body */
}
JavaScript «поднимает» объявление в верхнюю часть содержащей области, т. Е. Делает вид, что ваше объявление было в начале.Это означает, что при таком синтаксисе (в некоторых браузерах возможны сбои) невозможно условно объявить функции в блоке if
.Фактически объявления функций из блоков и if
и else
«поднимаются» наверх, и если вы объявляете две функции с одинаковыми именами, вторая переопределяет первую.
Другой способ объявления функции выглядит следующим образом:
var slide_holder = function() {
/* function body */
};
Хотя переменная slide_holder
также будет «поднята» в верхнюю часть области видимости, ей не будет назначена ссылка на фактическую функцию.до строки с назначением.Это означает, что вы можете сделать условное «объявление» той или иной функции следующим образом:
var slide_holder;
if ($(window).width() < 1100) {
slide_holder = function() {
/* one version of function */
};
} else {
slide_holder = function() {
/* other version of function */
};
}
$(window).bind('resize',slide_holder);
Как я уже говорил, вы можете добиться эффекта с помощью версии исходной функции, но в общем смысле этоповедение объявлений функций, скорее всего, (главная) проблема с вашим обновленным кодом.