Иерархия статей
Динамическое изменение ширины страницы
- 30.09.2010 11:50
- jQuery и JavaScript
Многие спорят о том, какой должна быть ширина страницы — фиксированной или растягивающейся (резиновой). Одним нравится фиксированный размер, другим наоборот. Попробуем угодить обоим типам, ведь любой пользователь коммерческого сайта есть потенциальный клиент, который может остаться на данной странице или уйти (вопрос юзабилити сайта). Я постарался решить разом эту проблему, предоставив выбор ширины страницы самому пользователю.
Решений данной задачи две. Первый — создать 2 шаблона сайта и добавить переключатель между ними на страницах сайта (на мой взгляд, не совсем удобно). Второй способ — реализовать анимированное изменение ширины страницы без её перезагрузки, а при переходе на следующую страницу сайта ширина страницы остается неизменной, так как данные о ширине сохраняются в cookie. Данный способ описан ниже.
Скрипт полностью проходит валидацию (еще бы, если учесть что тут 7 блоков div и только).
Необходима сама библиотека jquery и плагин jquery.cookie.
В файле css содержатся хаки для ie6, 7, я не стал отдельно выносить их в файл для краткости кода.
Не учтена проверка на отключенныe cookie, так как на практике лучше реализовывать сохранение параметров экрана в совокупности с сессиями, на стороне сервера. Весь код подробно прокомментирован.
Надеюсь, данная информация окажется полезной, примеров подобной реализации я не встречал.
-----------------------------------------------------------------------------------
$(document).ready(function(){
/* проверяем в cookie данные о разрешении страницы для её просмотра */
if ($.cookie("screen")== 'full') { /* Если предыдуший просмотр был на широком экране то */
/* Добавляем класс стилей широкого сайта для основных блоков */
$('#conteiner, #conteiner_2,#conteiner_3, #footer').addClass('tip_full');
window.sreen_1 = 'fix'; /* записываем первоначальное значение для кнопки изменяющей ширину страницы*/
window.sreen_2 = 'full'; /* вторичное значение*/
} else { /* во всех остальных случаях (включая по умолчанию) будет отображение узкого просмотра страницы */
/* Добавляем класс стилей узкого отображение страницы сайта для основных блоков */
$('#conteiner, #conteiner_2,#conteiner_3, #footer').addClass('tip_fix');
window.sreen_1 = 'full'; /* первичное значение */
window.sreen_2 = 'fix'; /* вторичное значение */
}
/* Функция изменения ширины экрана в зависимости от переданных ей параметров */
function size_screen (size_type_1,size_type_2) {
$('#start').css('display', 'none'); /* Защита от "дурака", многократного нажатия кнопки // убираем кнопку */
/* Присваиваем значения переменных в зависимости от переданного параметра (ширины экрана) */
if (size_type_1 == 'full') {
window.size_width = '100%'; /* значение ширины страницы */
} else {
window.size_width = '800px';
}
/* Функция jquery анимации. В данном случае плавного изменения ширины изображения страницы сайта */
$('#conteiner, #conteiner_2,#conteiner_3,#footer').animate({
'width': window.size_width /* Плавно изменяем ширину в соответствии с параметром отображения страницы */
},
500, /* Время анимации */
function() { /*Функция вызывающаяся после завершения анимации */
/* Удаляем предыдущие стили отображения страницы из блоков */
$(this).removeClass('tip_'+size_type_2);
/* Добавляяем новый класс стиля для нового ширины экрана */
$(this).addClass('tip_'+size_type_1);
/* Для очистки кода html от мусора удалим атрибут style ( созданный jquery) */
/* Данное действие не обязательно, оно несет эстетическую функцию */
$(this).removeAttr('style');
/* Защита от "дурака": многократного нажатия кнопки // показываем кнопку*/
$('#start').css('display', 'block');
});
/* Записываем в cookie параметр отображения сайта после перезагрузки или смены страницы */
$.cookie("screen", size_type_1, { path: '/'});
}
$('#start').toggle( /* Функция troggle выполняет последовательное многократное нажатие элемента (кнопки) */
function() { size_screen (window.sreen_1,window.sreen_2); }, /* первое нажатие */
function() { size_screen (window.sreen_2,window.sreen_1); } /* второе нажатие */
);
})
------------------------------------------------------------------------------
Скачать данное творение можно по следующей ссылке: jquery size, а посмотреть тут (красная фигня в правом верхнем углу и есть кнопка).
P.S. Автором данной статьи является Александр (balancev на gmail.com).
Решений данной задачи две. Первый — создать 2 шаблона сайта и добавить переключатель между ними на страницах сайта (на мой взгляд, не совсем удобно). Второй способ — реализовать анимированное изменение ширины страницы без её перезагрузки, а при переходе на следующую страницу сайта ширина страницы остается неизменной, так как данные о ширине сохраняются в cookie. Данный способ описан ниже.
Скрипт полностью проходит валидацию (еще бы, если учесть что тут 7 блоков div и только).
Необходима сама библиотека jquery и плагин jquery.cookie.
В файле css содержатся хаки для ie6, 7, я не стал отдельно выносить их в файл для краткости кода.
Не учтена проверка на отключенныe cookie, так как на практике лучше реализовывать сохранение параметров экрана в совокупности с сессиями, на стороне сервера. Весь код подробно прокомментирован.
Надеюсь, данная информация окажется полезной, примеров подобной реализации я не встречал.
-----------------------------------------------------------------------------------
$(document).ready(function(){
/* проверяем в cookie данные о разрешении страницы для её просмотра */
if ($.cookie("screen")== 'full') { /* Если предыдуший просмотр был на широком экране то */
/* Добавляем класс стилей широкого сайта для основных блоков */
$('#conteiner, #conteiner_2,#conteiner_3, #footer').addClass('tip_full');
window.sreen_1 = 'fix'; /* записываем первоначальное значение для кнопки изменяющей ширину страницы*/
window.sreen_2 = 'full'; /* вторичное значение*/
} else { /* во всех остальных случаях (включая по умолчанию) будет отображение узкого просмотра страницы */
/* Добавляем класс стилей узкого отображение страницы сайта для основных блоков */
$('#conteiner, #conteiner_2,#conteiner_3, #footer').addClass('tip_fix');
window.sreen_1 = 'full'; /* первичное значение */
window.sreen_2 = 'fix'; /* вторичное значение */
}
/* Функция изменения ширины экрана в зависимости от переданных ей параметров */
function size_screen (size_type_1,size_type_2) {
$('#start').css('display', 'none'); /* Защита от "дурака", многократного нажатия кнопки // убираем кнопку */
/* Присваиваем значения переменных в зависимости от переданного параметра (ширины экрана) */
if (size_type_1 == 'full') {
window.size_width = '100%'; /* значение ширины страницы */
} else {
window.size_width = '800px';
}
/* Функция jquery анимации. В данном случае плавного изменения ширины изображения страницы сайта */
$('#conteiner, #conteiner_2,#conteiner_3,#footer').animate({
'width': window.size_width /* Плавно изменяем ширину в соответствии с параметром отображения страницы */
},
500, /* Время анимации */
function() { /*Функция вызывающаяся после завершения анимации */
/* Удаляем предыдущие стили отображения страницы из блоков */
$(this).removeClass('tip_'+size_type_2);
/* Добавляяем новый класс стиля для нового ширины экрана */
$(this).addClass('tip_'+size_type_1);
/* Для очистки кода html от мусора удалим атрибут style ( созданный jquery) */
/* Данное действие не обязательно, оно несет эстетическую функцию */
$(this).removeAttr('style');
/* Защита от "дурака": многократного нажатия кнопки // показываем кнопку*/
$('#start').css('display', 'block');
});
/* Записываем в cookie параметр отображения сайта после перезагрузки или смены страницы */
$.cookie("screen", size_type_1, { path: '/'});
}
$('#start').toggle( /* Функция troggle выполняет последовательное многократное нажатие элемента (кнопки) */
function() { size_screen (window.sreen_1,window.sreen_2); }, /* первое нажатие */
function() { size_screen (window.sreen_2,window.sreen_1); } /* второе нажатие */
);
})
------------------------------------------------------------------------------
Скачать данное творение можно по следующей ссылке: jquery size, а посмотреть тут (красная фигня в правом верхнем углу и есть кнопка).
P.S. Автором данной статьи является Александр (balancev на gmail.com).
- Печать
- 0 Комментариев
- 2494 Прочтений
Поделиться этой статьей | |
Социальные закладки: | |
URL: | |
BBcode: | |
HTML: |
Добавить комментарий
Пожалуйста, залогиньтесь для добавления комментария.
Рейтинги
- 5 (Отлично!) - 1 Голос
Рейтинг доступен только для пользователей.
Пожалуйста, авторизуйтесьили зарегистрируйтесь для голосования.