Приветствую всех!
Сегодня хочу поделиться небольшим плагином для jQuery, который я разработал специально для этого блога.
UPD. Эта информация устарела, т.к. появилась новая версия плагина.
Идею плагина я позаимствовал на очень популярном блоге Mashable. Если вы откроете любую их статью, то слева от текста увидите небольшую панель с кнопками социальных сетей. Самое главное в том, что при прокрутке страницы, эта панель смещается вниз и кнопки видны постоянно.
Мне такое решение показалось очень удачным. Ведь, скорее всего, посетитель захочет отправить ссылку в твиттер после того, как прочтёт часть статьи. Поэтому будет неплохо, если соответствующая кнопка в нужный момент окажется перед глазами.
Возвращаемся к плагину.
Демонстрацию его работы вы можете увидеть слева от этого текста. В данном случае я использовал кнопку твиттера, которую создаёт сервис Tweetmeme, но вы можете использовать любую другую кнопку в том числе и обычную картинку.
Принцип использования.
1) Подключаете библиотеу jQuery и плагин.
<script type="text/javascript" src="js/jquery-1.4.2.min.js"></script> <script type="text/javascript" src="js/left_floating_button.jquery.js"></script>
2) Создаёте тег div с кодом кнопки
<div id="twitter_widget"><script type="text/javascript" src="http://tweetmeme.com/i/scripts/button.js"></script></div>
3) Подключаете плагин
$('#twitter_widget').left_floating_button();
4) Если есть необходимость, указываете параметры. Тут нужны некоторые пояснения. Всего можно задать четыре параметра:
fromCenter — расстояние от середины страницы до середины виджета
fromTop — расстояние от виджета до верхней границы видимой части страницы
minTop — расстояние от виджета до начала страницы
Я сделал небольшой рисунок, чтобы было понятнее о каких расстояниях идёт речь.
Кстати, обратите внимание, что использовать плагин имеет смысл только для страниц с фиксированной шириной. По этой же причине расстояние устанавливается от центра страницы, а не от левого края.
Установить свои значения можно с помощью метода left_floating_button. Например, так
$('#twitter_widget').left_floating_button({
'fromCenter': 520,
'fromTop': 50,
'minTop': 200
});
Рассмотрим код плагина.
(function($) {
$.fn.left_floating_button = function(settings) {
//значения по-умолчанию
var config = {
'fromCenter': 520,
'fromTop': 50,
'minTop': 200
};
//если пользователь указал свои параметры, то используем их
if (settings) $.extend(config, settings);
var element = this;
//абсолютно позиционируем виджет
element.css('position', 'absolute');
var curWindow = $(window);
updateElement();
//изменяем положения виджета при прокрутке страницы
curWindow.scroll(function() {
updateElement();
});
function updateElement() {
//определяем размеры окна
var windowWidth = curWindow.width();
var windowTop = curWindow.scrollTop();
//рассчитываем положение виджета
var elementLeft = windowWidth / 2 - config.fromCenter - element.width() / 2;
var elementTop = windowTop + config.fromTop;
if (elementTop < config.minTop) {
elementTop = config.minTop;
}
//изменяем CSS свойства left и top,
//в результате виджет будет перемещаеться
element.css({'left':elementLeft, 'top':elementTop});
}
};
})(jQuery);
Как видите, он совсем небольшой. Пояснять каждую строчку кода я не буду, думаю, в этом нет необходимости, лучше поясню общий принцип работы.
Как только вы вызываете метод left_floating_button для какого-нибудь элемента страницы, плагин делает его абсолютно позиционированным (с помощью CSS свойства position: absolute). После этого, положение элемента можно изменять с помощью свойств top и left. Т.е. нужно пересчитывать значения этих свойств при каждой прокрутке страницы.
Для того, чтобы отслеживать прокрутку страницы нужно назначить обработчик события scroll, а рассчитать положение элемента несложно, зная ширину окна и расстояние до начала страницы. Последние можно получить с помощью методов $(window).width() и $(window).scrollTop().
Запуск перемещения выполняется присваиванием новых значений свойствам top и left.
Вот и всё. Но хочу предупредить, это только бета версия плагина в будущем он может измениться, и, кстати, эти изменения могут зависеть от ваших идей 🙂 . Так что, если вам кажется, что плагин можно улучшить или вы нашли баг, не стесняйтесь, пишите в комментариях к этой статье!
Исходники плагина
SourceУдачи!
Интересное
Мой дом — моя крепость. Но кто сказал, что крепость не должна быть красивой? В этом вам поможет отделка фасада загородного дома. Ваш дом действительно будет выделяться.


