Полезные сниппеты на 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

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

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 сам написал скрипт,но он мне совсем не нравиться... ПОМОГИТЕ ПЛЗ=(((


#
вано
newkamikaze
Спасибо за сниппеты, оч рульные. Но у меня проблемы со третьим: использую его на одной странице с JS-слайдером картинок (не jQuery) и выпадающий блок оказывается ПОД слайдером. Пробовал менять слайдер на джейкуэриевский - не помогло. Подскажите, как исправить проблему?

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

как выглядит какой тег
жирный текст <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>
разрешенные теги или посмотреть как будет выглядеть

metin2 pvp metin2 pvp serverler pvp serverler