Полезные сниппеты на jQuery

Полезные сниппеты на jQuery

Привет!

Помните, когда-то давно мы делали подборки сниппетов jQuery? Так вот, тогда мы закончили их выпускать, так как не могли придумывать 3-5 сниппетов в неделю, а публиковать всякий треш не хотелось.

Недавно Саша подкинул мне идею для пары сниппетов. Они будут особенно полезны тем, кто либо пока плохо знает jQuery, либо не знает его совсем. В любом случае это полезные штуки, которые довольно часто используются на сайтах.

Выделение группы чекбоксов с помощью клавиши Шифт

Такая возможность есть в почте Гугла и она мне очень нравится. Суть в том, что в 2 клика можно выделить группу чекбоксов. Очень удобно в различных файловых менеджерах, почтах и прочих интерфейсах с большим количеством чекбоксов. Итак, сам код:

<script type="text/javascript">
// код сниппета
(function($) {
$.fn.setCheckboxesShift = function() {
var cbx = this,
last = -1, // номер предыдущего чекбокса;
start, // служебные
finish; // переменные

// проходим по каждому указанному чекбоксу
cbx.each(function(index) {
// при клике по нему (или его лэйблу)
$(this).click(function(e) {
// проверяем, стал ли он чекнутым
if($(e.target).attr('checked')) {
// теперь смотрим, больше ли у предыдущего индекс
if(index > last) { start = last; finish = index;
} else { start = index; finish = last; }

// если был предыдущий и зажата клавиша Шифт
if(last > -1 && e.shiftKey) {
// проходим с начального до конечного чекбокса
for(i = start; i <= finish; i ++) {
// и делаем их выделенными
$(cbx[i]).attr('checked', 'checked');
}
}
// запоминаем индекс только что кликнутого чекбокса
last = index;
}
});
});
};
})(jQuery);

$('#checkboxes-list').disableTextSelect(); // для этого нужен плагин disableTextSelect
// к указанным чекбоксам добавить такую возможность
$('#checkboxes-list :checkbox').setCheckboxesShift();
</script>

Клик по объекту плавно разворачивает какой-то блок

Такой сниппет будет полезен в списке частых вопросов, где при клике на вопрос открывает ответ на него. Сниппеты можно применить как к группе пар «ссылка-блок», так и к одной паре.

<script type="text/javascript">
// код сниппета
(function($) {
$.fn.openCloseBlocks = function(blocks, options) {
var defaults = {
speed: 'normal'
},
opts = $.extend(defaults, options),
togglers = $(this),
bls = $(blocks); if(!bls) return;

togglers.each(function(index) {
$(this).click(function(e) {
e.preventDefault();
$(bls[index]).slideToggle(opts['speed']);
});
});
};
})(jQuery);

// использование
// выбераем нужные ссылки
// аргумент — что открывать (i-ый элемент первого массива
// открывает i-ый элемент второго массива)
$('div > a').openCloseBlocks($('div.blocks'), {
speed: 'fast'
});
</script>

Клик по объекту показывает блок прямо под ней поверх контента

Выпадающее меню, которые можно наблюдать у нас в «Вопросах и ответах» и Эр-Эс-Эс иконке вверху страницы. Весьма полезная вещь.

<script type="text/javascript">
// код сниппета
(function($) {
$.fn.dropDownBlock = function(block, options) {
var defaults = {
speed: 'fast',
top: $(this).height(),
left: 0
},
opts = $.extend(defaults, options),
toggler = $(this),
block = $(block);
toggler.css({'outline': 'none'})

toggler.click(function(e) {
e.preventDefault();
$(block).css({
'position' : 'absolute',
'top' : (toggler.offset().top + opts['top']) + 'px',
'left' : (toggler.offset().left + opts['left']) + 'px'
});
if($(block).is(':visible')) $(block).fadeOut(opts['speed']);
else $(block).fadeIn(opts['speed']);
this.focus();
});
toggler.blur(function() {
$(block).fadeOut(opts['speed']);
});
};
})(jQuery);

// использование
// при клике на #toggler
// под ним показывается #drop-down-list
$('#toggler').dropDownBlock($('#drop-down-list'), {
speed: 'slow',
left: 10
});
</script>

А вот страница с примерами работы всех сниппетов.

Надеюсь, что эти сниппеты будут вам полезны и удобны в работе. Если у вас есть идею для сниппетов, пишите нам — реализуем.

Расскажите друзьям

Оцените статью:
  • 1
  • 2
  • 3
  • 4
  • 5

Комментарии — 21

KELiON
В почте гугла, кстати, работает и в обратную сторону — то есть снимает чеки.
#
KELiON  
adw0rd
Да, полезные сниппеты!
Игорь
Довольно интересные идеи. Особенно понравились ссылки с раскрывающимися блоками. Уже есть идеи где их использовать. Спасибо :)
Grin
Алексей, а что именно непонятно с использованием сниппета? Подключаешь джиквери, а использование самого сниппета описано в примере. Или посмотри как сделано на странице примера
#
Grin
Gorniy
«Клик по объекту показывает блок прямо под ней поверх контента»
Объект - это она что ли? :)
Михаил
Первый сниппет точно так же должен и снимать выбор с флажков, тоже с шифтом.
#
Михаил
FaTeRy
ИМХО первый и 3й абсолютно бесполезны, а второй как раз просто шикарен! Попробовал, а где собственно указывать что именно разворачивать? И кстати у вас Разрешенные теги выдвигаются с помощью jQuery?
Grin
FaTeRy, например, чтобы при клике на ссылку с айди link развернуть блок с айди block, то код нужно написать вот так:
$('#link').openCloseBlocks($('#block'));

Да, с помощью джиквери.
#
Grin
Татьяна
второй сниппет мне лучше других!
Dench
Хорошие сниппеты, вот только почему в 3-ем используется toggler.offset(), а не toggler.position()?
Просто position() возвращает тот же объект, но у offset'а проблемы с результатами при фиксированной ширине на мониторах с большим расширением, т.е. не правильно пересчитывается отступ слева, сам на такое несколько раз натыкался, приходилось добавлять левую «пустую» колонку, пока position() не попробовал )

А еще в предпросмотре неверно экранируется апостроф )
#
Dench
Денис
мне понравилисьвсе сниппетЫ! создатели хорошо поработали!
voland
Полезные сниппеты, но раз уж статейка для новичков можно б и расписать какие файлики подключать :-)
Даниил
ДЛЯ МЕНЯ САМЫЙ ЛУЧШИЙ -ЭТО ТРЕТИЙ!
Денис Носов
Спасибо за сниппеты!!!

У меня есть встречный вопрос относительно сниппета «Клик по объекту показывает блок прямо под ней поверх контента»:

Подскажите пожалуйста, как сделать, чтобы при клике на сам блок он не исчезал, а исчезал при клике на кнопочку/текст (так сказать чтобы закрыть блок)?

Этот сниппет было интересно попробовать реализовать для быстрой формы логина!

Спасибо!
Сергей
Огромное спасибо Павел, с вашего разрешения я немного потюнинговал плагинчик для выделения чекбоксов. Добавил выделение всех и инвертирование при выделении.
(function($) 
{
	// Выражаю огромную бладгодарность 
	$.fn.CheckboxesShift = function(options)
	{
		// формирование опций
		var opts = $.extend({}, $.fn.CheckboxesShift.defaults, options);
		var cbx = this,
		last = -1, 	// номер предыдущего чекбокса;
		start, 		// служебные
		finish; 	// переменные
		
		// проходим по каждому указанному чекбоксу
		cbx.each(function(index) {
			// при клике по нему (или его лэйблу)
			$(this).click(function(e) {
				if (opts.firstElemCheckAll == true && index == 0) {
					for(i = 1; i <= cbx.length - 1; i ++) {
						// и делаем их выделенными
						$(cbx[i]).attr('checked', $(e.target).attr('checked'));
					}
				}
				else {
					// теперь смотрим, больше ли у предыдущего индекс
					if(index > last) { 	start 	= last; 	finish 	= index;
					} else { 			start 	= index; 	finish 	= last; }
				
					// если был предыдущий и зажата клавиша Шифт
					if(last > -1 && e.shiftKey) {	
						// если включено инвертирование - то игнорируем первый и последний элемент
						if (opts.invert) {
							start +=1;
							finish -=1;
						}
						// проходим с начального до конечного чекбокса		
						for(i = start; i <= finish; i ++) {
							// и делаем инвертирование
							if (opts.invert)
								$(cbx[i]).attr('checked', !$(cbx[i]).attr('checked'));
							// и делаем выделенным
							else
								$(cbx[i]).attr('checked', 'checked');
						}
					}
					// запоминаем индекс только что кликнутого чекбокса
					last = index;
				}
			});
		});
	};
	
	// опции по-умолчанию
	$.fn.CheckboxesShift.defaults = 
	{
		firstElemCheckAll : false,
		invert : false
	};
})(jQuery);
// Пример использования
$('#my-checkboxes').CheckboxesShift({
	firstElemCheckAll: true,
	invert: true
});
 


P.S. Извините за ч/б код, так и не понял как здесь можно разукрасить его :)
#
Сергей
saintist
Спасибо, именно то что искал, особенно про чекбоксы
Сашка
Просто не могу нарадоваться. Мегаохуенно.
#
Сашка
Киря
Я только начинаю изучать все это можно исходник этих примеров?
#
Киря
Сергей
Здравствуйте.
Подскажите пожалуйста, как можно использовать последний сниппет больше чем на одном блоке на странице. (у меня 2 блока, первый появляется, ссылка на второй не реагирует)
#
Сергей
вано
Сорри за тупой вопрос HTML и цсс знаю, а в Jкверти лол вот смотрите мы ставим скрипт куда хотим: ну допустим 2ой скрипт ставлю на страницу а вот само содержание и текст куда тыкаться где это все прописовать??????? помогите. Просто я на HTML сам написал скрипт,но он мне совсем не нравиться... ПОМОГИТЕ ПЛЗ=(((


#
вано

Новый комментарий

как выглядит какой тег
жирный текст <b>жирный текст</b>
курсивный тект <i>курсивный тект</i>
зачеркнутый текст <s>зачеркнутый текст</s>
подчеркнутый текст <u>подчеркнутый текст</u>
ссылка <a href="адрес">ссылка</a>
function foo() { ... }
<pre><code>function foo() { ... } </code></pre>
разрешенные теги или посмотреть как будет выглядеть
как выглядит какой тег
жирный текст <b>жирный текст</b>
курсивный тект <i>курсивный тект</i>
зачеркнутый текст <s>зачеркнутый текст</s>
подчеркнутый текст <u>подчеркнутый текст</u>
ссылка <a href="адрес">ссылка</a>
function foo() { ... }
<pre><code>function foo() { ... } </code></pre>
разрешенные теги или посмотреть как будет выглядеть
counter strike mt2 silkroad pvp metin2 metin2 pvp knight pvp gm olarak başlayan pvpler pvp silkroad pvp serverler counter strike serverler msn show cam show görüntülü sohbet oyunlar suskunlar gazete oku