12.06.10

Как известно, jQuery имеет собственные функции для реализации эффекта “соскальзывающих” элементов – .slideUp(), .slideDown() и slideToggle(). Но бывают такие случаи, когда нам нужно реализовать скольжение элементов в совершенно других направлениях, нежели это делают данные функции.

К счастью это довольно легко реализуется – под катом увидите как.

Скольжение в обратном направлении

С помощью встроенных методов мы можем реализовать скольжение “сверху вниз”. Но что делать если нам необходимо сделать “выезжающий снизу” элемент? Давайте добавим немного хитрого CSS и наша проблема будет решена!
Итак, html:

XHTML
1
2
3
4
<div id="slidebottom" class="slide">
<button>slide it</button>
<div class="inner">Slide from bottom</div>
</div>

и css:

CSS
1
2
3
4
5
6
7
8
.slide {
position: relative;
}
.slide .inner {
position: absolute;
left: 0;
bottom: 0;
}

В примере ниже определены и другие свойства элементов – высоту, ширину, цвет, отступы и так далее.
Теперь мы можем использовать jQuery точно также, как и в традиционном случае реализации скользящего эффекта:

JavaScript
1
2
3
4
5
$(document).ready(function() {
$('#slidebottom button').click(function() {
$(this).next().slideToggle();
});
});

Демо:

вот и я



Горизонтальное скольжение

Способ первый – анимация с помощью изменения свойства width

Для реализации такого эффекта будем изменять свойство width элемента. Разметка останется прежней (однако указывать абсолютное и относительное позиционирование элементов в данном случае не обязательно). А JavaScript код будет другим:

JavaScript
1
2
3
4
5
$(document).ready(function() {
$('#slidewidth button').click(function() {
$(this).next().animate({width: 'toggle'});
});
});

Пример:

вот и я

Единственная проблема данного способа – обрезание и перенос текста, находящегося внутри выдвигающегося элемента (в том случае, если текста достаточно много), поэтому рассмотрим еще два способа.

Изменение свойства left

У этого метода есть также один недостаток – у “подвижного” элемента должно быть задано положение с помощью CSS (свойства left и top, второе необязательно), а контейнер должен иметь свойство overflow установленное как hidden.

JavaScript
1
2
3
4
5
6
7
8
$(document).ready(function() {
$('#slideleft button').click(function() {
var $lefty = $(this).next();
$lefty.animate({
left: parseInt($lefty.css('left'),10) == 0 ?-$lefty.outerWidth() : 0
});
});
});

Сразу же пример:

вот и я

Изменение свойства margin-left

В данном случае нам также необходимо иметь overflow: hidden у контейнера, но позиционировать подвижный элемент уже необязательно.

JavaScript
1
2
3
4
5
6
7
8
9
10
$(document).ready(function() {
$('#slidemarginleft button').click(function() {
var $marginLefty = $(this).next();
$marginLefty.animate({
marginLeft: parseInt($marginLefty.css('marginLeft'),10) == 0 ?
$marginLefty.outerWidth() :
0
});
});
});

А работает это так:

вот и я

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>