css, html, php, javascript, jQuery, ajax … – решения, примеры, рецепты
26 Июн
Сегодня разберем еще один раздел документации jQuery – раздел, посвященный анимационным эффектам, которые можно создавать с помощью этой библиотеки. Тема довольно большая, но я не стал разбивать ее на несколько статей, потому что интереснее узнать все сразу. Много примеров, которые подгружаются во фреймах, поэтому будьте терпеливы…
возвращает: jQuery
Отображает каждый из элементов набора, если они были скрыты через вызов hide() или через display:none в таблице стилей. Действует подобно show(speed,[callback]), только без анимационных эффектов. Если элемент не был скрыт, то ничего не происходит.
Показываем все параграфы, которые были скрыты.
$("p").show();
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: jQuery
Отображает все элементы набора с использованием анимационных эффектов. Опционально в аргументе callback может быть передана функция, которая будет вызвана по завершении анимации. Высота, ширина и прозрачность каждого элемента набора может быть изменена динамически, с определенной скоростью.
Показываем все скрытые параграфы. Используем в качестве параметра ключевое слово slow. При этом анимация выполняется в течение 600 миллисекунд.
$("button").click(function () {
$("p").show("slow");
});
Откройте пример в отдельном окне и посмотрите исходный код.
Показываем все скрытые элементы div по порядку, используя ключевое слово fast. Каждая анимация занимает 200 миллисекунд и по завершении очередной стартует следующая.
$("#showr").click(function () {
$("div:eq(0)").show("fast", function () {
// use callee so don't have to name the function
$(this).next().show("fast", arguments.callee);
});
});
$("#hidr").click(function () {
$("div").hide(2000);
});
Откройте пример в отдельном окне и посмотрите исходный код.
Аргумент speed – строка или число. Если передается строка, она может принимать предопределенные значения – «slow», «normal» или «fast». Число – длительность эффекта в миллисекундах, например 1000.
Аргумент callback – функция, вызываемая по завершении эффекта. Выполняется один раз для каждого элемента набора.
возвращает: jQuery
Скрывает каждый из элементов набора, если они отображались. Действует подобно hide(speed, [callback]), но без анимационных эффектов. Если элемент был скрыт – ничего не происходит.
В примере один параграф скрыт изначально, второй – скрывается кликом по ссылке.
$("p").hide();
$("a").click(function () {
$(this).hide();
return false;
});
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: jQuery
Скрывает все элементы набора с использованием анимационных эффектов. Опционально в аргументе callback может быть передана функция, которая будет вызвана по завершении анимации. Высота, ширина и прозрачность каждого элемента набора может быть изменена динамически, с определенной скоростью.
Скрываем все видимые параграфы. Используем в качестве параметра ключевое слово slow. При этом анимация выполняется в течение 600 миллисекунд.
$("button").click(function () {
$("p").hide("slow");
});
Откройте пример в отдельном окне и посмотрите исходный код.
Кликом по кнопке Hide, скрываем все элементы span по порядку, используя ключевое слово fast. Каждая анимация занимает 200 миллисекунд и по завершении очередной стартует следующая.
$("#hidr").click(function () {
$("span:last-child").hide("fast", function () {
// use callee so don't have to name the function
$(this).prev().hide("fast", arguments.callee);
});
});
$("#showr").click(function () {
$("span").show(2000);
});
Откройте пример в отдельном окне и посмотрите исходный код.
Скрываем элементы div по клику на них в течение 2 секунд и когда элемент уже скрыт, удаляем его. Попробуйте очень быстро покликать по div’ам.
for (var i = 0; i < 5; i++) {
$("<div>").appendTo(document.body);
}
$("div").click(function () {
$(this).hide(2000, function () {
$(this).remove();
});
});
Откройте пример в отдельном окне и посмотрите исходный код.
Аргумент speed – строка или число. Если передается строка, она может принимать предопределенные значения – «slow», «normal» или «fast». Число – длительность эффекта в миллисекундах, например 1000.
Аргумент callback – функция, вызываемая по завершении эффекта. Выполняется один раз для каждого элемента набора.
возвращает: jQuery
Переключает отображение каждого из элементов набора. Если они были скрыты – отображает их и наоборот.
Переключаем параграфы с помощью кнопки.
$("button").click(function () {
$("p").toggle();
});
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: jQuery
Открывает все элементы набора, используя изменение высоты элементов. Опционально в аргументе callback может быть передана функция, которая будет вызвана по завершении анимации.
Открываем все элементы input, используя эффект «скольжения вниз». Время анимации 1000 мс. Как только анимация выполнена – вызывается функция, которая изменяет некоторые css-свойства элементов input. А в особенности среднего элемента, которому передается фокус.
$("div").click(function () {
$(this).css({ borderStyle:"inset", cursor:"wait" });
$("input").slideDown(1000,function(){
$(this).css("border", "2px red inset")
.filter(".middle")
.css("background", "yellow")
.focus();
$("div").css("visibility", "hidden");
});
});
Откройте пример в отдельном окне и посмотрите исходный код.
Открываем, «скользя вниз», все элементы div. Для задания времени используем ключевое слово «slow», т.е. открываем медленно.
$(document.body).click(function () {
if ($("div:first").is(":hidden")) {
$("div").slideDown("slow");
} else {
$("div").hide();
}
});
Откройте пример в отдельном окне и посмотрите исходный код.
slideDown принимает те же аргументы, что и show или hide.
возвращает: jQuery
Скрывает все элементы набора, используя изменение высоты элементов. Опционально в аргументе callback может быть передана функция, которая будет вызвана по завершении анимации.
Скрываем все параграфы, используя эффект «скольжения вверх». Время анимации 2000 мс. Как только анимация выполнена – вызывается функция, которая покажет сообщение о том, какой именно параграф был скрыт.
$("button").click(function () {
$(this).parent().slideUp("slow", function () {
$("#msg").text($("button", this)
.text() + " - сделано!");
});
});
Откройте пример в отдельном окне и посмотрите исходный код.
Скрываем, «скользя вверх», все элементы div. Время не задаем. По умолчанию эффект будет выполнен примерно за 400 мс.
$(document.body).click(function () {
if ($("div:first").is(":hidden")) {
$("div").show("slow");
} else {
$("div").slideUp();
}
});
Откройте пример в отдельном окне и посмотрите исходный код.
slideUp принимает те же аргументы, что и show или hide.
возвращает: jQuery
Переключает видимость всех элементов набора, используя изменение высоты элементов. Опционально в аргументе callback может быть передана функция, которая будет вызвана по завершении анимации.
Скрываем и отображаем все параграфы.
$("button").click(function () {
$("p").slideToggle("slow");
});
Откройте пример в отдельном окне и посмотрите исходный код.
Анимируем элементы div, находящиеся между разделителями.
$("button").click(function () {
$("div:not(.still)").slideToggle("slow", function () {
var n = parseInt($("span").text(), 10);
$("span").text(n + 1);
});
});
Откройте пример в отдельном окне и посмотрите исходный код.
slideToggle принимает те же аргументы, что и show или hide.
возвращает: jQuery
Делает видимыми все элементы набора, используя изменение прозрачности элементов. Опционально в аргументе callback может быть передана функция, которая будет вызвана по завершении анимации. Только прозрачность элемента может быть использована для этого эффекта, поэтому «проявляемый» элемент уже должен иметь какие-либо размеры, т.е. его высота и ширина должны быть определены.
«Проявляем» скрытые элементы div один за другим, каждый раз анимационный эффект занимает время примерно в 600 мс.
$(document.body).click(function () {
$("div:hidden:first").fadeIn("slow");
});
Откройте пример в отдельном окне и посмотрите исходный код.
«Проявляем» красный блок поверх текста. По завершении этой анимации запускается следующий эффект, который «проявляет» тэг span.
$("a").click(function () {
$("div").fadeIn(3000, function () {
$("span").fadeIn(100);
});
return false;
});
Откройте пример в отдельном окне и посмотрите исходный код.
fadeIn принимает те же аргументы, что и show или hide.
возвращает: jQuery
Делает невидимыми все элементы набора, используя изменение прозрачности элементов (эффект «затухания»). Опционально в аргументе callback может быть передана функция, которая будет вызвана по завершении анимации. Только прозрачность элемента может быть использована для этого эффекта, поэтому скрываемый элемент должен иметь какие-либо размеры, т.е. его высота и ширина должны быть определены.
Скрываем все параграфы, используя эффект «затухания». Продолжительность эффекта примерно 600 мс.
$("p").click(function () {
$("p").fadeOut("slow");
});
Откройте пример в отдельном окне и посмотрите исходный код.
Проведите мышью над текстом. Кликните там, где при наведении курсора появится желтый бэкграунд. Это один из нескольких элементов span. По клику на нем он будет скрыт с использованием эффекта «затухания».
$("span").click(function () {
$(this).fadeOut(1000, function () {
$("div").text("'" + $(this).text() + "' has faded!");
$(this).remove();
});
});
$("span").hover(function () {
$(this).addClass("hilite");
}, function () {
$(this).removeClass("hilite");
});
Откройте пример в отдельном окне и посмотрите исходный код.
fadeOut принимает те же аргументы, что и show или hide.
возвращает: jQuery
Делает невидимыми все элементы набора, используя изменение прозрачности элементов (эффект «затухания») до величины, указанной во втором аргументе. Опционально в аргументе callback может быть передана функция, которая будет вызвана по завершении анимации. Только прозрачность элемента может быть использована для этого эффекта, поэтому скрываемый элемент должен иметь какие-либо размеры, т.е. его высота и ширина должны быть определены.
Кликом на первом параграфе изменяем его прозрачность до 0.33. Эффект длится примерно 600 мс. Второй параграф не меняет прозрачность.
$("p:first").click(function () {
$(this).fadeTo("slow", 0.33);
});
Откройте пример в отдельном окне и посмотрите исходный код.
Меняем прозрачность элементов div случайным образом. Длительность эффекта примерно 200 мс.
$("div").click(function () {
$(this).fadeTo("fast", Math.random());
});
Откройте пример в отдельном окне и посмотрите исходный код.
fadeTo принимает те же аргументы, что и show или hide. И кроме того второй аргумент opacity – число от 0 до 1, характеризующий «целевую» прозрачность элемента.
возвращает: jQuery
Это функция для построения своей, пользовательской анимации. У этой функции один обязательный аргумент, представляющий собой объект состоящий из пар ключ/значение. В качестве ключа выступает CSS-свойство, которое должно быть анимировано (например: «height», «top», or «opacity»).
Обратите внимание, что свойства должны быть определены с использованием camel case (т.е. например marginLeft вместо margin-left).
В качестве значения выступает «целевое» значение соответствующего CSS-свойства. Например, если в качестве значения выступает какая-либо цифра, то соответвующее свойство будет трансформировано из своего текущего состояния, в новое состояние.
Обратите внимание, что поддерживаются только свойства, имеющие в качестве значения какие-либо числа (или «hide», «show», «toggle»). Например backgroundColor не поддерживается.
Начиная с версии jQuery 1.2 можно определять значения свойств, используя «em» или %. Также начиная с версии jQuery 1.2 можно использовать «относительную» анимацию, т.е. определять значения соответствующего свойства относительно его текущей позиции (используя «+=» или «-=») чтобы передвигать элемент в положительную или отрицательную стороны.
Кликните по кнопке, чтобы запустить анимацию для элемента div.
$("#go").click(function(){
$("#block").animate({
width: "70%",
opacity: 0.4,
marginLeft: "0.6in",
fontSize: "3em",
borderWidth: "10px"
}, 1500 );
});
Откройте пример в отдельном окне и посмотрите исходный код.
Пример «относительной» анимации. Покликайте несколько раз по кнопкам вправо/влево…
$("#right").click(function(){
$(".block").animate({"left": "+=50px"}, "slow");
});
$("#left").click(function(){
$(".block").animate({"left": "-=50px"}, "slow");
});
Откройте пример в отдельном окне и посмотрите исходный код.
Аргументы, принимаемые этой функцией:
params – набор атрибутов стилей, которые Вы хотите анимировать.
duration (Optional) – строка, представляющая собой ключевое слово («slow», «normal», или «fast») или число, указываюее длительность эффекта в миллисекундах.
easing (Optional) – строка, представляющая собой имя эффекта плагина easing. Имеет два встроенных значения «linear» и «swing». Используется только с плагином.
callback (Optional) – функция, которая может быть вызвана по завершении анимации каждого элемента набора.
возвращает: jQuery
Это функция для построения своей, пользовательской анимации. Аргумент params представляет собой объект, состоящий из пар ключ/значение. В качестве ключа выступает CSS-свойство, которое должно быть анимировано (например: «height», «top», или «opacity»).
Обратите внимание, что свойства должны быть определены с использованием camel case (т.е. например marginLeft вместо margin-left).
В качестве значения выступает «целевое» значение соответствующего CSS-свойства. Например, если в качестве значения выступает какая-либо цифра, то соответвующее свойство будет трансформировано из своего текущего состояния, в новое состояние. Или же если значение представлено в виде строки («hide», «show», или «toggle»), анимация для этого свойства будет создана со значениями по умолчанию.
Отдельно стоит поговорить об аргументе options. В нем также может быть передана длительность соответствующего эффекта анимации (как с использованием числовых значений в миллисекундах, так и с помощью клюючевых слов). Также может быть использовано имя эффекта при использовании плагина easing. С помощью опции complete может быть вызвана функция, которая будет выполнена по завершении анимации для каждого элемента набора.
Обязательно надо упомянуть о queue (добавлено в jQuery 1.2). Он принимает значения true (по умолчанию) или false. Если установить queue:false, это даст возможность выполнить анимационный эффект вне очереди, параллельно со следующим эффектом (если такой есть конечно).
Посмотрите следующий пример – будет намного понятнее.
Первая кнопка как раз демонстрирует пример такой параллельной анимации. Некий элемент с идентификатором #block1 должен изменить свою ширину до 90% от возможной, шрифт должен быть установлен в размер 24px и правая рамка должна стать шириной 15px. Обратите внимание, что изменение ширины происходит одновременно с другими двумя эффектами, которые уже следуют друг за другом в порядке очереди.
Вторая кнопка запускает почти такую же анимацию, вот только все эффекты следуют друг за другом строго по очереди.
$("#go1").click(function(){
$("#block1").animate( { width:"90%" },
{ queue:false, duration:3000 } )
.animate( { fontSize:"24px" }, 1500 )
.animate( { borderRightWidth:"15px" }, 1500);
});
$("#go2").click(function(){
$("#block2").animate( { width:"90%"}, 1000 )
.animate( { fontSize:"24px" } , 1000 )
.animate( { borderLeftWidth:"15px" }, 1000);
});
$("#go3").click(function(){
$("#go1").add("#go2").click();
});
$("#go4").click(function(){
$("div").css({width:"", fontSize:"", borderWidth:""});
});
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: jQuery
Останавливает все выполняющиеся анимационные эффекты для всех элементов набора.
Кликните по кнопке Go, чтобы запустить анимацию. Затем по кнопке Stop, чтобы ее остановить. Ну а клик по кнопке Back запустит другой анимационный эффект – блок будет двигаться в обратную сторону. Заметьте, что отсчет будет вестить от той позиции в которой блок был остановлен.
// Запускаем анимацию
$("#go").click(function(){
$(".block").animate({left: '+=100px'}, 2000);
});
// Останавливаем анимацию
$("#stop").click(function(){
$(".block").stop();
});
// Запускаем в другом направлении
$("#back").click(function(){
$(".block").animate({left: '-=100px'}, 2000);
});
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: Array
Возвращает ссылку на очередь элемента (массив функций).
Разберите этот пример. По клику на кнопке мы получаем длину очереди в текущий момент.
$("#show").click(function () {
var n = $("div").queue("fx");
$("span").text("Длина очереди: " + n.length);
});
function runIt() {
$("div").show("slow");
$("div").animate({left:'+=200'},2000);
$("div").slideToggle(1000);
$("div").slideToggle("fast");
$("div").animate({left:'-=200'},1500);
$("div").hide("slow");
$("div").show(1200);
$("div").slideUp("normal", runIt);
}
runIt();
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: jQuery
Добавляет новую функцию, которая долна быть выполнена, в конец очереди для всех элементов набора.
В примере: очередь пользовательских функций.
$(document.body).click(function () {
$("div").show("slow");
$("div").animate({left:'+=200'},2000);
$("div").queue(function () {
$(this).addClass("newcolor");
$(this).dequeue();
});
$("div").animate({left:'-=200'},500);
$("div").queue(function () {
$(this).removeClass("newcolor");
$(this).dequeue();
});
$("div").slideUp();
});
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: jQuery
Заменяет очередь для всех элементов набора новой очередью (массив функций).
В примере, по клику на кнопке Stop, устанавливается массив очереди, чтобы удалить текущую очередь. По клику на кнопке Start очередь запускается вновь.
$("#start").click(function () {
$("div").show("slow");
$("div").animate({left:'+=200'},5000);
$("div").queue(function () {
$(this).addClass("newcolor");
$(this).dequeue();
});
$("div").animate({left:'-=200'},1500);
$("div").queue(function () {
$(this).removeClass("newcolor");
$(this).dequeue();
});
$("div").slideUp();
});
$("#stop").click(function () {
$("div").queue("fx", []);
$("div").stop();
});
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: jQuery
Удаляет поставленную в конец очереди функцию, разрешая очереди продолжаться.
В примере dequeue используется, чтобы разрешить очереди продолжиться после использования queue(callback). Попробуйте убрать в примере строчку $(this).dequeue(); и Вы обнаружите, что анимация остановится после срабатывания toggleClass.
$("button").click(function () {
$("div").animate({left:'+=200px'}, 2000);
$("div").animate({top:'0px'}, 600);
$("div").queue(function () {
$(this).toggleClass("red");
$(this).dequeue();
});
$("div").animate({left:'10px', top:'30px'}, 700);
});
Откройте пример в отдельном окне и посмотрите исходный код.
В общем про анимационные эффекты библиотеки jQuery вроде бы все.
Отзывов (98) на «jQuery API: Effects – эффекты.»
Для новичков и тех, кто не знает английского – самое оно.
Спасибо за изложеный материал…
Плохо что разработчики не добавили возможность анимации цветом в background
Бэкграунд в статье был упомянут только применительно к animate(params, [duration], [easing], [callback]). А поменять его очень даже можно – см. хоть последний пример. Достаточно просто переключить класс и цвет будет изменен…
Нет… вы меня не поняли.. я не имею ввиду просто измнение класса или цвета через css()…
Я имею ввиду плавное изменения backgroundColor например от #000000 до #FFFFFF
Теперь понял. Но для jQuery есть плагин Color Animations. Немного на его работу можно посмотреть в этой статье http://www.linkexchanger.su/2008/34.html, но он там только в качестве примера идет. А вообще все про этот плагин можно узнать тут http://plugins.jquery.com/project/color
На английском конечно…
О.. то что нужно.. спс
Отличная подборка примеров, я такое ищу каждый раз, именно плавное появление это то что нужно. Автор я вам предложение шлю на ящик
Блин спасибо вам, я действительно все понял =)
Очень классно сделаны примеры, побольше интреактивных вещщей.
А можно ли запускать анимацию в обратную сторону? в смысле чтобы объект возвращался в первоначальное состояние. (как пример: увеличили блок по клику на него на 200 процентов, а при повторном клике он принял первоначальный размер. и тоже с анимацией)
To: Роман
Можно в принципе делать почти все, что угодно. Просто для этого надо изучить API jQuery. Ну, например использовать toggle( fn, fn2, [fn3,fn4,...] ), где fn будет увеличивать блок, а fn1 – уменьшать…
Геннадий, к вам вопрос. Для того чтобы использовать лишь некотрые функции, например :
$(document).ready(function(){
$(«#showr»).click(function () {
$(«div:eq(0)»).show(«fast», function () {
// use callee so don’t have to name the function
$(this).next().show(«fast», arguments.callee);
});
});
$(«#hidr»).click(function () {
$(«div»).hide(2000);
});
});
не обязательно ведь грузить весь jQuery.js, может подскажите как выдрать нужное, чтобы не грузить 93 кб ? =)
Как выдрать нужное – вряд ли подскажу, не так уж глубоко я ее копал…. Может проще воспользоваться jQuery 1.2.6 (16kb, Minified and Gzipped) или например jQuery 1.2.6 (30kb, Packed)…
Пример с queue() (там зеленый квардатик перемещается и что-то про очередь) странно работает.
.
Не очень понятно из статьи, для чего оно. А пример вообще странный (только при манипуляциях с FireBug-ом в FF появляются какие-то дополнительные квардатики
Оно не для чего-то. Оно просто демонстрирует работу с очередью и то, что Вы можете в любой момент, по какому-либо событию получить доступ к этой очереди… Цель? Ну, например управлять этой очередью.
Спасибо. Реальное человеческое спасибо.
JQuery пользуюсь уже больше года, но некоторых аспектов не знал… Как, например, длина очереди или использование .next() и .prev().
Большое спасибо за статью – очень помогла в знакомстве с jQuery
Заметил такое свойство текста, находящегося в контейнере: если применяется изменение прозрачности, то он становится «зубчатым».
Была задумка: есть див с бекграундом с установленным opacity=0 и посредством анимации прозрачность восстанавливается до 1, после чего с помощью установки .html(text) заполняется текстом.
По идее, после возврата прозрачности к 100%, текст должен показываться гладко, но он остался зубчатым. Есть ли возможность после работы с прозрачностью контейнера восстановить правильное отображение текста в нем? Спасибо.
«параграф был срыт» – чем?!
Ну уж Вы право….. Попробуйте написать столько и не сделать ни одной ошибки. А вообще – спасибо, исправил.
Проблема так и не решилась: в результате действия $(element).show(1000, function() {$(this).html(«qwerty»)}) текст «qwerty» несглажен, выглядит не совсем приятно. Есть ли какая-то таблетка для этой проблемы?
Объясните, что кроме быстроты написания кода дает библиотека? Ведь иногда скорость работы и гибкость(твоих личных функций, иногда проще написать что-то свое, чем копаться в чьем-то апи) гораздо важнее.
Те же самые эффекты не сложно реализовать на сыром javascript
Те же самые? И тоже одной-двумя строками кода?
Собственно скорость написания кода – очень широкое понятие. Когда Вам не приходится заботится о совместимости Вашего кода с различными браузерами например – это ведь тоже сказывается на скорости написания кода, правда? Хорошо, если речь идет о каких-то простых эффектах можно не обращать внимания, а когда дело доходит до взаимодействия с ajax? Представляете сколько лишних забот снимает библиотека?
На эту тему можно наговорить много – Вы просто попробуйте, если еще не пробовали… Ведь эффекты – это еще далеко не вся библиотека.
Спасибо большое, добрый человек! Очень пригодилось!
$(document).ready(function(){
$(«#slideLink»).click(function(){
$(«#slideBlock»).slideToggle(500);
$(this).toggleClass(«active»);
});
});
подскажите пожалуйста, как сделать поле slideBlock закрытым по умолчанию?
С помощью CSS – #slideBlock { display:none; }
Спасибо за примеры.
Есть ли в наличии пример с позиционирование окна браузера на заданом ID ?
что-то типа,
scrollto(‘#id1′) ?
по поводу scrollto(‘#id1′)
сделал вот так http://imclogo.skanat.ru
клик на подробнее, должен развернуть инфу и спозиционироваться на заголовке модели
Если мне нужно сделать на сайте автономный скрипт который будет менять два дива – например с помощью `slideToggle` — что мне писать в callBack ?? /дабы они выполняли этот эффект циклически – всё время/
Скорее всего Вы свалитесь в рекурсию и «подвесите» браузер. Такую штуку можно реализовать используя метод animate() для манипулируя CSS-свойствами, например opacity, но опять же – Вам вероятно нужно чтобы пользователь успевал посмотреть что-там в этих блоках написано. Так что ИМХО лучший вариант – сделать это с помощью таймеров (тем более, что и плагин есть подходящий).
Вот пример CSS:
#One {
background-color:#00F;
}
#Two {
background-color:#F00;
display:none;
}
и собственно JS-код:
$('#One').everyTime('5s', function() { if($(this).is(':hidden')) { $(this).slideDown(500); } else { $(this).slideUp(500); }; }); $('#Two').everyTime('5s', function() { if($(this).is(':hidden')) { $(this).slideDown(500); } else { $(this).slideUp(500); }; });Про использование плагина jQuery Timers можно прочитать тут: http://www.linkexchanger.su/2008/71.html
Елки-палки! Спасибо за такую статью! Очень помогла!!!!! =)
нахожусь на распутье.. выбираю для продакшна между 2мя fw_js прототайпом и джэйквери..
если автора не затруднит, плз без холиваров, в 2ух словах, убедите меня использовать jquery
ps….ради бога без hw, интересует ТОЛЬКО мнение автора
http://www.linkexchanger.su/2009/77.html
просто взгляните на две первые диаграммы…
спасибо! весьма убедительно
Ну, данные с сайта-производителя нельзя считать объективными в виду необъективности подхода. Хотя я использую jQuery и менять даже не собираюсь, но все же было бы правильнее оценивать у, скажем так, независимых «оценщиков».
Из того, что по быстрому накопал:
http://lusever.ru/css-selectors/
В скорости Prototype 1.6.0.3 (последний?) явный аутсайдер – проигрывает по подавляющему большинству фв-ков. jQuery, особенно 1.3.1, выглядит очень достойно, лишь немного уступая ext 2.2, правда последний с одним тестом не справился, а jQuery единственный, кто справился со всем абсолютно. Думаю, эти данные о чем-то, но говорят
Еще момент – тест исключительно по скорости селекторов, поэтому всеобъемлющим назвать нельзя. Но а) это очень и очень важно, так как является одним из важнейших мест фв; б) тенденция очевидна.
Спасибо за качественные статьи, очень нужно было о toggle(). У меня теперь только вопрос, если у меня этих елементов штук 27, например, можно как-нить упростить код, а не писать к каждому диву отдельную строку?
Можно написать следующее:
$('div.className').toggle( function(){ например что-то открываем }, function(){ а тут это закрываем } );Указав в селекторе div.className мы выбираем все div с указанным именем класса и навешиваем на них toggle() – по какому элементу кликните – тот и сработает…
$(document).ready(function() {
$(«#clickMe»).click(function() { $(«#textBox»).toggle();});
Я это вот вот написал, но почему-то не получается. Вернее отрывает и закрывает, но видит только один div, для других надо присваивать свои значения.
Это вполне естественно, поскольку в селекторе указан элемент с идентификатором #textBox – вот он один и срабатывает. Т.е. проблема в выборе элементов, к которым «цепляется» данная функциональность. Сделайте правильный набор и все будет работать как надо. Например выбирайте нужные div’ы по имени их класса или еще как-то…
Спасибо огромное!!! Всё получилось как вы сказали!!!
я вот попробовал идентификатор – не срабатывает
на странице 2 div-а с id=»showhelp», а открывает только один
попробовал подставить class=»showhelp» – всё получилось как надо:
$(«#help»).click(
function () {
if ($(«div.showhelp:first»).is(«:hidden»)) {
$(«div.showhelp»).show();
}
else {
$(«div.showhelp»).hide();
}
}
);
показывает/скрывает скрытые div-ы по клику на элемент с id=»help»
до этого, вместо класса писал следующее:
$(«div#showhelp»)
или $(«#showhelp»)
не хотит
Все правильно. Вернее – неправильно. На странице не должно быть два или более элементов с одинаковым значением идентификатора. Это – извините, ошибка начинающего… А вот когда Вы производите выбор элементов на основании имени класса, то все делаете правильно, поэтому все и работает.
Спасибо за статьи – очень помогли в свое время.
Столкнулся с проблемой отображения таблицы после
$(‘#mytable’).show()
так как таблице устанавливается display:block – моя таблица немного разъехалась от этого.
Решение проблемы – поместить таблицу в div, на который и задавать .show(), .hide().
Оставлю это здесь, может кому пригодится – лично я сломал голову, пока пытался понять этот косяк.
Скажите пожалуйста, если я буду использовать большое количество плагинов jquery на одной странице, как это скажется на сайте… Извините если глупый вопрос, я просто любитель, а не профи))
Сколько плагинов использовать и использовать ли их вообще, каждый сам решает…. Принципиально – чем больше Вы вешаете на страницу дополнительных файлов, тем дольше она будет грузиться, тут все ясно.
Любой плагин – это некое универсальное решение часто встречающейся задачи и как правило включает в себя много такого, что может быть Вам в данный момент и не нужно.
Вывод – учите API библиотеки (jQuery или может какой-либо другой) и сможете сами легко писать нужный код.
Чувак, я тебя почти обажаю!
Единственное нормальное описание судя по гуглу =)
(не аппрувь, а то почти как спамом выгляжу)
Огромное спасибо очень полезная инфа!
Почему нет slideLeft и slideRight?
Есть ли способы их осуществить в точности такими же, как и slideUp, slideDown?
Есть способы – jQuery UI: Effects – еще о визуальных эффектах.
Здравствуйте, Геннадий
Я обратил внимание что вы используете jquery-1.2.3 , я – jquery-1.3.2. В принципе претензий не имел. Кроссбраузерность радовала. Ну тут не давно тестил сайт на Опере 9.10 . Прозрачность не срабатывает(fadeTo). Зашел на ваш сайт – у вас под тем же браузером fadeTo вполне работает. Скачал 1.2.3 тоже заработало. Так что выходит более поздний релиз хуже?
Не хуже, конечно. Просто все бывает. Народ сообщит – разработчики исправят. Сейчас 1.3.3 уже готовится. Без багов ничего не бывает…
Вот столкнулся с такой проблемой.
Как пример:
qwe qwe qwe
При клике на некий элемент, в определенный контейнер (outer) подгружается нужный блок (inner), заведомо меньший по размеру чем внешний.
Как отловить клик на внешнем контейнере для его закрытия, но чтобы при клике на внутреннем чтобы этого не происходило?
Спасибо.
Блин, съело теги.
В примере 2 дива вложенных один в другой.
У внешнего id outer, а у внутреннего класс inner
$(function(){ $("#outer").click(function(){ alert($(this).attr('id')); }); $("#inner").click(function(e){ e.stopPropagation(); alert($(this).attr('id')); }); });вот так можно. alert’ы я ясное дело для наглядности дал. При клике по #outer все ясно. При клике по #inner, передаем в обработчик объект события и останавливаем всплывание события с помощью метода stopPropagation()
Хм, про stopPropagation не знал.
Спасибо, буду пробовать.
Спасибо за инфу
jQuery штука действительно интересная и удобная. Вот только несколько вопросов.
1. Как синхронизировать функции, ведь не во всех есть callback. К примеру, меняю содержимое параграфа, после этого нужно узнать его новую высоту. Наткнулся на то, что height() не всегда возвращает актуальную высоту, иногда прежнюю, особенно, если параграф скрыт.
2. После свертки элемента методами slideUp() или animate({height:…}…) часто возникает скачок его высоты. Искусственно проблему решил, задав ненулевой padding, но это не всегда приемлемо.
3. На IE глюки с анимацией, при установке нового содержимого параграфа он тут же выпрыгивает не экран, даже если был свернут. А после сворачивания – кратковременная «вспышка». Пришлось опять-таки искусственно решать – задать анимацию и параграфа, и охватывающего div-a. Причем сворачивание параграфа делать быстрее на 50 мс и тут же прятать, до окончания сворачивания div-а
Может, я что не так делаю?
Упс… Насчет п.2 погорячился, не обращайте внимания…
За инфу пожалуйста
Сергей, относитесь проще – это инструмент, хороший, мощный. Но не бывает инструментов идеальных. Так что курс правильный. Есть проблема – решаем и добиваемся того, чтобы работало как надо нам, с помощью jQuery.
Геннадий, Вы правы, идеального ничего не бывает… Кстати, с IE добился компромисса. Как выяснилось, «вспышки» возникают тогда, когда высота элемента выводится в 0 при сворачивании. Так что slideUp() отменяется. Вместо нее отлично работает
$(…).animate({height:1},…,function(){$(…).hide();});
Что поделать, приходится подстраиваться. Не у всех же нормальные браузеры стоят.
И еще такой момент обнаружил: при разворачивании элемента с помощью animate надо указывать актуальный размер, т.е. контент плюс padding плюс все такое, т.к. после окончания анимации размер все равно скачком приходит к этому значению.
Возник вопросик: Как можно отметить все чекбокссы в текущем div-е?
Пример: Есть меню на основе accordion.
Бассейны и водоемы
Выделить всё
пункт1
пункт2
Вентиляция
Выделить всё
пункт3
пункт4
пункт3
Как можно организовать функцию «Отметить всё»?
Вот, блин, теги то удаляются.
Вопрос по другому:
Как можно отметить все чекбоксы в одном конкретном диве, не затрагивая в других дивах?
Zergalius, если я правильно понимаю систему, селектор $(«#id_дива > :checkbox») должен подойти…
$(”#category3:checkbox”).checked();
Что-то типа этого?
Как перебрать все чекбоксы внутри, если их кол-во неизвестно, как и имена?
http://docs.jquery.com/Selectors/child#parentchild
$(«#category3>:checkbox»).checked();
Правда, такой подход, затронет только 1 уровень вложенности… Надо подумать еще…
To Сергей: что есть .сhecked()? Такого метода в jQuery не существует.
To Zergalius: в общем случае отметить/снять отметку с чекбокса можно так:
// отмечаем checkbox с id="c" $("#c").attr("checked", "checked"); // снимаем отметку checkbox'а с id="c" $("#c").attr("checked","");Если же говорить о конкретной задаче, то очень многое зависит от html-разметки. Пусть есть какой-то «общий» чекбокс, клик по которому отмечает/снимает отметки с остальных чекбоксов. Значит сначала нужно отыскать тот самый нужный чекбокс и использовать метод toggle(fn1,fn2,…), где первая функция будет отыскивать все чекбоксы, которые нужно отметить и ес-но отмечать их, а вторая соответственно снимать отметки с них.
Повторяю – решение во многом зависит от конкретной html-разметки.
Да, вы правы, не существует
Я уточнял селектор для всех вложенных чекбоксов данного элемента, это главное в данной задаче. А на метод просто не обратил внимания…
Здравствуйте, прочитал Вашу тему очень нужная инфа. У меня такой вопрос:
Если мне нужно поставить ссылку в одном месте, а текст должен появляться и убираться в другом при нажатии на эту ссылку – помогите пожалуйста. Одна надежда на вас. Я новичек jQuery.
Как мне это сделать?
Павел, если Вы почитали статью (пусть даже бегло), то у Вас не должно возникать таких вопросов. В ней приведено много примеров полностью отвечающих на Ваш вопрос.
p.s. Пора скоро будет уже и форум здесь разворачивать по jq)))
Вопрос не в том как это сделать а что написать и как обозначить именно id
сейчас я делаю так
function ToggleCode(id)
{
el=document.getElementById(id);
img=document.getElementById(id);
if(el.style.display==»none»)
{
img.src=»/images/ls2.gif»;
el.style.display=»";
}
else
{
img.src=»/images/ls1.gif»;
el.style.display=»none»;
}
return false;
}
ссылка
Тут любой текст
Текст который становиться виден
Но как только я меняю id все перестает работать, а мне нужно чтоб можно было добовлять id без беспрепятственно т.е. сколько мне нужно…
Вот в чем беда
Вообщем присваиваю ссылке id=EYD все работает, но как только я добавляю еще какие нибудь id все перестает работать ((
А зачем получать 2 различные ссылки на один и тот же объект и по-разному их использовать? Получается el=img Непонятно…
сори торопился и забыл там указать img=document.getElementById(«img»+id);
помогите пожалуйста…
Эта функция где вызывается и как?
какой тег для обозначения кода?
вообщем сама ссылка
» a href=»#» onclick=»return ToggleCode(‘ERT’);» » ссылка «/a»
скрытый текст
» div style=»" id=»ERT» »
Пока «/div»
– » заменил чтоб отображались норм
Это сново я – разобрался я с проблемой (вроде как), но вот беда новая – как мне сделать так чтоб сначало не было текста, а при нажатии появлялся ))) Я признаюсь я не внимательный чайник, но мне тоже нужна помощь пожалуйста )
Сделать все то же самое, только наоборот. Изначально dispaly:none…
Спасибо, но я поместил display:none просто в class=»display:none» и все заработало.
Если честно я вообще в первый раз взялся за этот плагин, но с Вашей помошью разобрался (чуть-чуть). Спасибо еще раз.
Еще один вопрос.
У меня несколько ссылок (все тот же скрипт).
Как сделать, чтоб при нажатии одной ссылки, скрытый текст остальных убирался, а появлялся тот который под этой ссылкой?
Всю ночь голову ломал, но пока без успешно…
Ппц. вот спасибо, что так ни кто и не ответил ((
Павел, знаете почему никто не ответил? Просто потому, что Вы спрашиваете о том, про что весьма подробно написано в статьях.
Геннадий, тыкните меня носом – хоть убейте я перерыл весь блог и так и не смог найти ((
Пожалуйста, тыкаю
Для того, чтобы грамотно пользоваться всеми преимуществами библиотеки, необходимо четко понимать всю логику работы. Попробую сформулировать по пунктам:
1. Самое главное, с чего начинается почти любой jQuery-код – это выбор элемента или элементов с которыми предстоит работать. Значит надо хорошо знать и понимать, как работают селекторы jQuery.
2. После того, как элемент выбран, с ним можно что-то делать. Например связать с элементом какое-либо событие, при наступлении которого вызывается функция-обработчик этого события. Значит надо не менее хорошо ориентироваться в событиях jQuery.
3. Вот только теперь пожалуй, можно смотреть в сторону применения различных визуальных эффектов jQuery.
Все вышеперечисленное – самый-самый минимум знаний, которые надо иметь, чтобы только начать пользоваться возможностями библиотеки.
Все статьи легко можно найти в блоге, если посмотреть карту сайта.
Спасибо большое…
Из-за чего slideDown плавно раскрывает элемент только наполовину, а потом сразу появляется блок целиком.
нужно чтобы после animate выполнились определённые действия. Делал по ращному не получилось.
$(‘.slide’).animate({«height»:hght},»slow», function(){
$(‘.m’).html(cont);
$(‘.m’).fadeIn(«slow»);
});
и еше так:
$(‘.slide’).animate({«height»:hght});
$(‘.slide’).queue(function() {
$(‘.m’).html(cont);
$(‘.m’).fadeIn(«slow»);
});
поправте пожалйста. никак не получилось
Поставьте FireBug и все ошибки, которые Вы сделали Вам будут видны и ясны… Будет гораздо проще код отлаживать.
А как в jquery заставить два div бегать в цикле друг за другом (мини карусель) ? То есть как только один пробегает экран – за ни другой – и все повторяется. Как это сделать на JS – примерно понятно( if( slidepos < 600 );slidepos++;slidediv.style.left = slidepos; и т.д.). А можно ли при помощи анимации jquery? Может быть как-то при помощи queue() и callback ?
Ну, принцип все равно будет тот же, а как конкретно выполнить… Да просто посмотрите примеры animate и queue.
наверно вот так (без queue)
function runIt1() {
$(«#div1″).animate({left:’+=300′},2000);
$(«#div1″).animate({left:’-=300′},1,runIt2);
}
function runIt2() {
$(«#div2″).animate({left:’+=300′},2000 );
$(«#div2″).animate({left:’-=300′},1,runIt1);
}
runIt1();
Здравствуйте. Такой вопрос:
Как сделать, чтобы во время анимации объект можно было перемещать с помощью draggable плагина. Мой код:
//—————
$(«#someID»).show()
.draggable({
cursor: «move»,
addClasses: false,
opacity:0.3
})
.animate({left:dx}, {queue:false ,duration: speed} )
//—————
В animate() объект изменяет координаты по х. Draggable позволяет перемещать произвольно по y, а по х нет, т.к. идет анимация. Немогу понять, как ее остановить и начать с того места, куда переместил объект анимации.
Заранее спасибо!
Здравствуйте.
Пытаюсь создать dropdown меню используя slideDown и slideUp. При наведение на портфолио выпадает подменю состоящее из дивов с классом mini. Cворачивание должно происходить только если курсор вышел за пределы div.mini и #portfolio. Однако сворачивание происходит уже при наведении на первый пункт подменю. И что забавно – я также меняю backgroundColor у портфолио, и по идее если происходит сворачивание должен возвращаться исходный цвет у backgroundа, однако сохраняется измененый.
Подскажите , если не трудно.
Вот код:
#cont{
position:absolute;
top:50px;
left:10px;
width:100px;
height:150px;
display:none;
z-index:6;
}
.menu,.mini{
font-weight:600;
background-color:white;
cursor:pointer;
font-family:Arial, Helvetica, sans-serif
}
#portfolio{
padding-left:5px;
left:10px;
text-align:left;
color:black;
position:absolute;
font-size:14px;
width:100px;
height:20px;
z-index:7;
padding-top:2px;
}
div.mini{
position:absolute;
font-size:10px;
height:19px;
left:0px;
padding-top:2px;
padding-left:6px;
z-index:-2;
font-weight:600;
cursor:pointer
}
#contact{
position:absolute;
text-align:left;
z-index:7;
font-size:14px;
width:84px;
height:21px;
padding-left:5px;
padding-top:1px;
}
.fon{
position:absolute;
left:0px;
z-index:0;
overflow:hidden;
visibility:hidden;
}
PORTFOLIO
СВАДЕБНАЯ
ПОРТРЕТ
ДЕТИ
ВИДЫ ГОРОДА
ПЕЙЗАЖИ
$(‘#nat’).css({width:’70px’});
FASHION
CONTACT
$(«#portfolio,div.mini»).bind(‘mouseover’,function(){
$(«#portfolio»).css({
color:’white’,
backgroundColor:’transparent’,
paddingLeft:’0px’,
textAlign:’center’
});
$(«#cont»).slideDown(1000);
$(«#contact»).animate({top:’182px’},1000);
})
$(«#portfolio,div.mini»).bind(‘mouseout’,function(){
$(«#porfolio»).css({
color:’black’,
backgroundColor:’white’,
textAlign:’left’,
paddingLeft:’5px’
});
$(«#cont»).slideUp(1000);
$(«#contact»).animate({top:’54px’},1000);
});
Часть кода обрезало.
Попытаюсь прояснить
PORTFOLIO – это соответсвенно div#portfolio
СВАДЕБНАЯ
ПОРТРЕТ
ДЕТИ
ВИДЫ ГОРОДА
ПЕЙЗАЖИ
FASHION
это все элементы подменю с классом mini
которые входят в div#cont
ну а CONTACT – div#contact
To Эдик:
В качестве идеи… Для draggable определить опцию start. Функция, которая будет вызвана при начале перемещения должна будет остановить анимацию, например с помощью stop(). Может пригодится и фильтр :animated для поиска элемента, где выполняется анимация.
To Konstantin:
Попробуйте покопаться в исходниках этого и этого. А то может и не будете велосипед изобретать, а целиком используете
Хотя Вас прекрасно понимаю – мне свое тоже ближе как-то
Спасибо автору за отличный сайт и познавательные статьи.
Всё в примерах – это важно, особенно в такой области как библиотеки JavaScript
Успехов вам, и новых статей
И Вам спасибо
Обсуждение статьи можно продолжить на форуме jQuery.