Функция jQuery().slideDown

.slideDown( [ duration ], [ callback ] )Returns: jQuery 

Функция служит для создания эффекта скольжения элементов

.slideDown( [ duration ], [ callback ] )
duration строка или число, определяющее длительность анимации. 
callback функция, вызываемая после завершения анимации.


Используя метод .slideDown(), можно изменять высоту элементов, создавая эффект скольжения. При этом нижние элементы страницы опускаются вниз, позволяя появляться новым элементам.

Параметр Duration задает скорость анимации в миллисекундах. Чем больше это значение, тем медленее анимация, а не наоборот. Строки  'fast' и 'slow'  задают длительность анимации — 200 или 600 миллисекунд соответственно. Если указать другие строковые значения или не задать параметр вообще, то по умолчанию используется интервал в 400 миллисекунд.

Параметр callback — это указатель на функцию, которая запускается после завершения анимации (необязательный параметр). Как правило, этот параметр используется, чтобы связать несколько разных анимаций. Важно помнить, что при создании анимации для нескольких элементов, функция callback выполняется для каждого элемента, а не для всей анимации в целом.

Пример:
<div id="clickme">
  Click here
</div>
<img id="book" src="book.png" alt="" width="100" height="123" />
With the element initially hidden, we can show it slowly:
$('#clickme').click(function() {
  $('#book').slideDown('slow', function() {
    // Animation complete.
  });
});

Функция jQuery().fadeIn

.fadeIn( [ duration ], [ callback ] )
Функция fadeIn() служит для создания эффекта проявляющихся элементов путем изменения параметра «opacity» с 0% до 100%.


.fadeIn( [ duration ], [ callback ] )
duration - строка или число, определяющее длительность анимации.
callback - функция, к которой обращается программа, как только анимация закончится.  


Параметр «duration» задает скорость анимации в миллисекундах. Если вместо числа указать значение «fast» или «slow», то длительность анимации будет соответствовать интервалам 200 и 600 миллисекунд. Если указать другие строковые значения или не задать параметр вообще, то по умолчанию используется интервал в 400 миллисекунд.

Параметр Callback — это указатель на функцию, которая запускается после завершения анимации (необязательный параметр). Как правило, это свойство используется, чтобы связать несколько разных анимаций.
Сделать анимацию можно для любого элемента, например, для простого изображения:

<div id="clickme">
      Click here
    </div>
    <img id="book" src="book.png" alt="" width="100" height="123" />
    With the element initially hidden, we can show it slowly:
    $('#clickme').click(function() {
      $('#book').fadeIn('slow', function() {
        // Animation complete
      });
    });

Функция jQuery().hide

jQuery().hide() служит для того, чтобы скрывать выбранные по селектору элементы. Синтаксис данной функции следующий:


.hide(duration, [callback])
  duration - это числовой или строковый параметр, 
             определяющий с какой скоростью скрывать элементы
  callback - (необязательный параметр) функция которая 
             вызывается после завершения анимации


В случае вызова hide() без параметров, элементы будут скрыты немедленно. По сути, данный вариант аналогичен вызову .css('display', 'none') за тем исключением, что в случае с .css значение параметра 'display' будет сохранено в кэше jQuery и в последствии может быть от туда извлечено.

Если же в функцию hide() передать параметр duration, то функция работает как метод animate() последовательно уменьшая высоту, ширину и прозрачность элементов.

Параметр duration может принимать одно из двух строковых значений — 'slow' или 'fast', либо произвольное целое значение. По умолчанию, в jQuery значению 'slow' сопоставлена задержка в 600мс, а 'fast' в 200мс.

Для наглядности небольшой пример:


<!DOCTYPE html>
<html>
<head>
  <script src="/jquery.js"></script>
</head>
<body>
  <p>Привет</p>
  <a href="#">Щелкни по ссылке, чтобы закрыть и ее</a>
  <p>Еще один параграф</p>
<script>

    $("p").hide();
    $("a").click(function () {
      $(this).hide();
      return true;
    });
</script>
</body>
</html>
  • 0
  • 6 марта 2010, 04:57
  • admin
  • 4

Функция jQuery.each

jQuery.each() — это итератор, т.е. такая функция которая перебирает все элементы массива или объекта. Синтаксис данной функции имеет следующий вид:


jQuery.each(collection, callback(indexInArray, valueOfElement) )

  collection - массив или объект
  callback - функция которая будет вызываться для каждого элемента коллекции


Внимание! Не нужно путать функцию jQuery.each() с функцией $(selector).each() — в первом случае функция each работает с произвольной коллекцией, которая передается ей в качестве первого аргумента, а во втором только с элементами jQuery, которые были выбраны в рамках используемого селектора.

Более того, если посмотреть код jQuery, то легко убедиться, что функция $(selector).each() — это не что иное как обертка для функции jQuery.each(), где в качестве первого аргумента передается элемент this:


	// Execute a callback for every element in the matched set.
	// (You can seed the arguments with an array of args, but this is
	// only used internally.)
	each: function( callback, args ) {
		return jQuery.each( this, callback, args );
	}



Возможно, кому-то покажется странным, что в качестве коллекции передается указать this. Хотя на самом деле ничего странного здесь нет, достаточно вспомнить, что экземпляр класса jQuery — это ни что иное как коллекция dom-элементов, которые были выбраны на основании заданного селектора.

Иногда, в процессе перебора элементов коллекции, возникает необходимость прекратить дальнейший перебор. Для этого достаточно в callback-е (см. синтаксис jQuery.each() использовать конструкцию "return false;".

Другими словами функция-обработчик возвращающая булево значение «false» останавливает дальнейший перебор элементов коллекции.

Для наглядности приведу пару примеров:


$.each([111, 43, 43], function(index, value) { 
  alert(index + ': ' + value); 
});

Результат:
0:111
1:43
2:43



var map = { 
  'flammable': 'inflammable', 
  'duh': 'no duh' 
}; 
$.each(map, function(key, value) { 
  alert(key + ': ' + value); 
});

Результат:
flammable: inflammable
duh: no duh 


Если после прочтения заметки появились какие-то мысли, замечания или просто желание сказать спасибо, то милости прошу в комментарии.

Работа с checkbox в jQuery

Решение для нетерпеливых:

<script>
$("input:checkbox").attr("checked","checked"); // устанавливает галочку на все checkbox-ы
$("input:checkbox").removeAttr("checked"); // снимает галочку со всех checkbox-ов
</script>


Далее обо всем по порядку.

Еще раз о селекторах

В первую очередь, при работе с checkbox-ами в jQuery нужно составить правильный селектор. Селектор — это выражение по которому jQuery выбирает необходимые dom-элементы для обработки.
Если селектор будет составлен неправильно, то это приведет к тому, что jQuery захватит не те элементы. В результате на странице может получиться полная каша.

Составляем правильный селектор

Для того, чтобы построить правильный селектор нужно внимательно посмотреть на HTML код с помощью которого создаются элементы checkbox:


<input type="checkbox" value="" name="chbx"/>


Из приведенного кода видно, что как таковой checkbox это элемент input со специальным типом "checkbox".

Так как отдельного элемента «checkbox» не существует, то использование jQuery селектора "$('.checkbox')" бессмысленно — на странице попросту нет таких элементов. Использование другого селектора — "$('.input')", так же не дает положительного результата, потому что на странице может быть множество input-ов с различными типами — кнопки, checkbox-ы, скрытые элементы, файлы и т.д.

Поэтому, правильным будет следующий селектор "$('input[type=checkbox]')", или более сокращенный его вариант "$('[type=checkbox]')". В последнем случае мы опустили слово «input», а это значит, что поиск checkbox-ов будет идти по всем элементам присутствующим на странице (слои, ссылки, параграфы и т.д.), что, конечно, негативно скажется на скорости работы jQuery.

Кроме предложенного варианта существует еще один селектор, который так же находит все checkbox-ы: "$('input:checkbox')" или "$(':checkbox')". Опять же обращаю внимание, что во втором случае поиск будет идти по всем элементам страницы, т.е. фактически по селектору "$('*:checkbox')".

Как отметить все элементы checkbox на странице

Имея правильны селектор, теперь можно перейти к тому как jQuery позволяет обработать необходимые элементы. Например, очень часто нужно отметить все элементы checkbox на странцие. Для этого на checkbox нужно добавить атрибут «checked».

Добавление атрибутов на элементы в jQuery делается с помощью специального метода "attr", а удаление с помощью метода "removeAttr". Работу с этими методами демонстрирует следующий пример:


<!DOCTYPE html>
<html>
<head>
  <style>
  textarea { height:25px; }
  </style>
  <script src="/js/jquery.js"></script>
</head>
<body>
	<form>
    <input type="button" value="Элемент Input c типом 'Button'"/>
    <input type="checkbox" />

    <input type="checkbox" />
    <input type="file" />
    <input type="hidden" />

    <input type="image" />
    <input type="password" />
    <input type="radio" />

    <input type="reset" />
    <input type="submit" />
    <input type="text" />

    <select><option>Option<option/></select>
    <textarea></textarea>
    <button>Button</button>
  </form>

  <div>
  </div>
<script>
$("input:checkbox").attr("checked","checked"); // устанавливает галочку на все checkbox-ы
$("input:checkbox").removeAttr("checked"); // снимает галочку со всех checkbox-ов
</script>
</body>
</html>


На этом хотелось бы закончить, но если появились вопросы или дополнения к статье прошу оставлять их в комментариях.
  • 0
  • 5 марта 2010, 20:19
  • admin
  • 2

Функцция jQuery.live

Начиная с версии 1.3 в jQuery появилась функция live, которая является аналогом функции bind и так же служит для назначения событий всем элементам, которые соответствуют выражению заданному в селекторе jQuery.

Основное отличие функции jQuery.live от jQuery.bind состоит в том, что bind действует только на объекты, которые существовали на момент вызова функции. Для объектов созданных позднее необходимо запускать bind повторно.

Функция jQuery.live лишена этого недостатка и будучи запущена один раз позволяет назначить события не только на созданные объекты, но и на те объекты, которые появятся позже.

Для иллюстрации сказанного, приведу небольшой пример:


<body>
	<div class=clickme>
	  Click Here
	</div>


Для того, чтобы «оживить» данный пример добавим обработку события «click»:


$('.clickme').bind('click', function() {
// Обработчик события Click
});


Недостаток в том, что после того как будет добавлен дополнительный элемент, с тем же классом «clickme», созданный с помощью bind обработчик событий для него действовать не будет.


$('body').append('<div class=clickme>Click here too</div>'); 


Кому-то данное ограничение может показаться незначительным, но на самом деле это большая проблема. Ведь, для каждого нового элемента необходимо повторно назначать события, а это выливается в увеличение объема и сложности программы.

Появление новой функции jQuery.live значительно упрощает жизнь программиста и позволяет уменьшить сложность программы, а следовательно и риск ошибки.

Синтаксис функции аналогичен синтаксису команды bind:


.live(eventType, handler);


Поэтому единственное отличие между приведенным выше кодом для bind и кодом для live заключается в замене имени одной функции на другое:


$('.clickme').live('click', function() {
// Обработчик события Click
});


В дополнение хочу отметить, что начиная с версии jQuery 1.4.1 прототип функции live стал выглядеть иначе:

.live( eventType, eventData, handler )


EventData — это необязательный параметр, который предназначен для передачи в обработчик дополнительных данных.
Одновременно с этим изменением появилась возможность назначать несколько событий на один обработчик:


$('.clickme').live('mouseover mouseout', function() {
	if (event.type=='mouseover') {
		// обрабатываем mouseover
	}

	if (event.type=='mouseout') {
		// обрабатываем mouseout
	}

});


Думаю, что многие оценят полезность функции live и постепенно начнут переписывать свои программы на новый лад. Что касается меня, то процесс перехода уже начат.

Для чего нужен jQuery.fn

Каждый кто сталкивался с написанием собственных плагинов на jQuery задавал вопрос — "В чем различие между объявлением функций через jQuery и jQuery.fn?".

Для того, чтобы ответить на поставленный вопрос приведу два примера.

Пример 1.

jQuery.sayHello = function() {
  alert('Привет! Найдено ' + this.length + 'элементов' );
}

$('div').sayHello(); // ничего не происходит


Пример 2.

jQuery.fn.sayHello = function() {
  alert('Привет! Найдено ' + this.length + 'элементов' );
}

$('div').sayHello(); // Выводит "Привет! найдено ХХ элементов", где ХХ - это количество найденных элементов на странице


Если запустить первый пример, то произойдет одно из двух событий — браузер выдаст ошибку (например, если у Вас установлен FireBug) либо не выдаст ничего. А если запустить второй пример, то на экране появится сообщение о количестве найденных элементов.

Прежде чем делать какие-либо выводы, приведу еще один пример:


jQuery.sayHello = function(elem) {
  alert('Привет! Найдено ' + elem.length + 'элементов' );
}

jQuery.sayHello($('div'));


В данном примере, будет выдано сообщение о количестве найденных объектов.

Думаю теперь у нас достаточно информации, чтобы сделать некоторые выводы:

Вывод 1: Если задать функцию через jQuery.fn, то она будет работать с элементами найденными через функцию $(). Контекст этой функции будет содержать выбранные элементы;

Вывод 2: Если задать функцию через jQuery, то к ней можно обратиться только через глобальный объект jQuery. В таком случае контекст функции будет указывать на глобальный объект window.

Таким образом, если нужно написать плагин, который будет работать только с выбранными объектами, то нужно его создавать в jQuery.fn, а если нам неважно какие элементы страницы были выбраны, то лучше создавать функцию через jQuery.

jQuery. Как создать свой plugin

Я заметил за собой одну вещь — если у меня есть какая-то задача, которая кажется мне сложной для освоения, то я откладываю ее решение в «долгий ящик». А когда наконец добираюсь до нее и нахожу решение, понимаю, что «ларчик просто открывался».

Так, например, я очень долго откладывал вопрос по написанию собственных jQuery плагинов. Мне казалось, что это очень сложно! Но набравшись сил и переборов свое предубеждение я начал разбираться с этим вопросом и обнаружил, что все очень просто.

Необходимость написание собственных плагинов возникает по очень простой причине — каким бы хорошим не был фреймворк jQuery его функционал конечен, а значит рано или поздно возникает потребность сделать что-то, чего этот фремворк делать не умеет. Вот тогда, то и возникает необходимость написать свой jQuery plugin.

На самом деле слово «plugin» многих сбивает с толку, ведь кажется, что плагин — это что-то сложное. А на деле оказывается, что плагин это всего лишь набор функций или методов jQuery собранных в отдельный файл. Обычно файл именуется по имени плагина, например «highlight.js».

Исходя из вышесказанного легко показать как создаются плагины на базе функций и методов jQuery.

Способ №1 — создание плагина на базе функции


jQuery.log = function(message) {
  if(window.console) {
     console.debug(message);
  } else {
     alert(message);
  }
}


Здесь создается новая функция «log», которая является частью глобального объекта jQuery. Важно понимать, что при обращении к функции нельзя использовать служебное слово «this». Функция должна использоваться следующим способом:


jQuery.log("Некоторое сообщение...");
// или
$.log("Еще какое-то сообщение");


Способ №2 — создание плагина на базе метода

В отличии от функции методы создаются для каждого объекта jQuery в отдельности, поэтому к ним можно обращаться «из объекта» используя служебное слово «this». По сути методы нужны тогда, когда появляется необходимость работать с контекстом объекта, в противном случае лучше использовать функции.


jQuery.fn.highlight = function (word) {
      var span = "<span class='highlight'>" + word + "</span>";
      this.each(function() {
              this.innerHTML = this.innerHTML.replace( new RegExp(word, 'gi'), span);
      });
}


Особо хочется отметить тот факт, что при создании плагина лучше использовать имя объекта — «jQuery», а не сокращения "$". Но если уж очень хочется, то делать нужно так:


(function($){
    $.fn.someFunction = function() {
        //........
    }
})(jQuery);


На этом пока все. Спасибо за внимание.
  • 0
  • 24 января 2010, 02:51
  • admin
  • 1
Нужны покупатели - туалетные кабины. Туалетные кабины. Москва и МО. . создание сайтов нижнем создание сайтов - веб дизайн студии intinity . Монтируем натяжные потолки Куркино недорого