Форум программистов, компьютерный форум, киберфорум
jQuery
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
0 / 0 / 0
Регистрация: 11.03.2013
Сообщений: 10

Анимированное смещение элемента по событию

12.10.2014, 01:04. Показов 3151. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем добрый вечер! Только начал изучать jQuery. Прошу помощи в следующем. Есть несколько флагов, расположеных по дуге. Слева и справа дуги - стрелки. Соответсвенно, при нажатии на левую стелку флаги должны анимироваться на одну позицию влево, при нажатии правой стрелки - соответсвенно вправо. При смещении влево справа появляется его копия и наоборот.
Я так понял, алгоритм будет следующим.
1. Вычисляем координаты флагов использую .position().
2. При клике стреки меняю позицию с одной в другую, использую .animate(position).
3. Если флаг выходит за пределы координат, то используешь клон флага (т.е сместил все, один не поместился, клоню в переменную, удаляю текущую, на свободное место вывожу клон флага и меняю позицию.
Правильно ли я построил алгоритм? Если да, помогите с реалиацией, так как практика программирования на JS отсутсвует.
Если нет, помогите построить правильный алгоритм и реализовать его на практике.
Заранее спасибо!
Вот мой HTML+CSS:
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
<div class="slider">
                <div class="arrow left"></div>
                <div class="slides">
                    <div id="de"><a href=""><img src="pictures/Flags/Germany.png" alt="Немецкий"><span>Немецкий</span></a></div>
                    <div id="es"><a href=""><img src="pictures/Flags/Spain.png" alt="Испанский"><span>Испанский</span></a></div>
                    <div id="it"><a href=""><img src="pictures/Flags/Italy.png" alt="Итальянский"><span>Итальянский</span></a></div>
                    <div id="en"><a href=""><img src="pictures/Flags/UK.png" alt="Английский"><span>Английский</span></a></div>
                    <div id="fr"><a href=""><img src="pictures/Flags/France.png" alt="Французский"><span>Французский</span></a></div>
                    <div id="nl"><a href=""><img src="pictures/Flags/Netherlans.png" alt="Голландский"><span>Голландский</span></a></div>
                </div>
                <div class="arrow right"></div>
        </div>
CSS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
.slider { position: absolute; top: 135px; left: 150px; }
.slider > div { display:inline-block; }
.slides { width:550px; height:53px; position:relative; font-size:70%; }
.arrow { width: 16px; height: 15px; background: url(pictures/arrowsSprite.png) no-repeat;}
.arrow.left  { background-position: -16px 0; }
.left:hover { background-position: 0 0; }
.arrow.right { background-position: -32px 0; }
.right:hover { background-position: -48px 0 }
.slides > div span { min-width:50px; position:absolute; display:inline-block; top:25px; left:15px; text-align:center; }
 
#de, #es, #it,
#en, #fr, #nl { position: absolute; color: #0094d9; }
#de { top: 10px; }
#es { top: 2px; left: 90px; }
#it { left: 180px; }
#en { left: 280px; }
#fr { top: 2px; left: 373px; }
#nl { top: 10px; left: 463px; }
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.10.2014, 01:04
Ответы с готовыми решениями:

Смещение элемента
Доброго времени суток. Прошу прощения что ради такого вопроса создаю тему, но ближайшие обсуждаемые посты связанны с другими вопросами, а...

Как по событию TreeView_SelectedItemChanged получить индекс выделенного элемента
Здравствуйте. Как по событию TreeView_SelectedItemChanged получить индекс выделенного элемента?

Обновление файла по событию создания или изменения элемента инфоблока
Доброго врмени суток ! Есть компонент (news.list), который выводит слайдер на главной. Через админку можно задавать стили для данного...

6
0 / 0 / 0
Регистрация: 11.03.2013
Сообщений: 10
18.10.2014, 12:46  [ТС]
Комьюнити, неужели нет идей, как создать скрипт? Может, мой css неправильный. Посоветуйте, как его изменить и уже на его основании создать скрипт
0
18.10.2014, 12:50

Не по теме:

Цитата Сообщение от John18 Посмотреть сообщение
неужели нет идей, как создать скрипт?
Идеи может и есть, но лично я ничего не понял из вашего вопроса.

0
0 / 0 / 0
Регистрация: 11.03.2013
Сообщений: 10
18.10.2014, 19:47  [ТС]
Добавлено через 1 минуту
Цитата Сообщение от Lazy_Den Посмотреть сообщение
Не по теме:
Сообщение от John18
неужели нет идей, как создать скрипт?
Идеи может и есть, но лично я ничего не понял из вашего вопроса.
Задача в том, чтобы при клике на стрелку слева фажки смещялись на одну позицию. Т.е. голландский на место французкого, французкий - английского, английский - итальянского, итальянский - испанского, испанский - германского, германский - голландского. При этом, крайний левый флажок (при первом клике - это германский) копируется и появляется на месте голонндского посредством использования jQuery.clone. Крайним левым флагом становится испанский. При следующем клике на стрелку слева снова происходит смещение флагов на одну позицию. В этом случае уже копируется испанский флаг. И так далее. Подобное смещение на одну позицию вправо происходить и при нажатии на стрелку справа.
Я подал свой html&css расположения флагов. Также спросил, верен и мой ход мыслей по организации алгоритма. Если да, то помочь создать скрипт, если нет - то помочь уяснить другой алгоритм и помочь создать код
0
 Аватар для Lazy_Den
3325 / 2845 / 1423
Регистрация: 15.01.2014
Сообщений: 6,170
18.10.2014, 20:55
John18, Клонировать элементы тут абсолютно не нужно. Всё делается гораздо проще:
JavaScript
1
2
3
4
5
6
7
8
9
var slides = $('.slides'),
    opts = {
        left: ['div:first', 'appendTo'],
        right: ['div:last', 'prependTo']
    };
$('.arrow').on('click', function(){
    var dir = $(this).hasClass('left') ? 'left' : 'right';
    $(opts[dir][0], slides)[opts[dir][1]](slides);    
});
А вот проблема у вас будет с тем, что вы жёстко привязали стили по ID к элементам. Перепишите их, используя псевдоклассы nth-child или nth-of-type. Тогда перемещаемый элемент, будет принимать стили, которые относятся к тому элементы, который должен находится на определенной позиции.
0
0 / 0 / 0
Регистрация: 11.03.2013
Сообщений: 10
19.10.2014, 13:09  [ТС]
Цитата Сообщение от Lazy_Den Посмотреть сообщение
Клонировать элементы тут абсолютно не нужно. Всё делается гораздо проще
Спасибо за помощь. Проблема как раз в том, что .clone() и .animate() мне необходимо использовать согласно заданию(
0
 Аватар для Lazy_Den
3325 / 2845 / 1423
Регистрация: 15.01.2014
Сообщений: 6,170
19.10.2014, 17:54
Цитата Сообщение от John18 Посмотреть сообщение
.clone() и .animate() мне необходимо использовать согласно заданию
Ха. Или вам дали задание не по уровню, или вы плохо учились Смотрите такой вариант. Я не использовал .queue и прочие опасности. Думаю, что в таком варианте, вам будет проще разобраться.
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
var slides = $('.slides'),
    slOffset = slides.position(),
    pT = slOffset.top,
    pL = slOffset.left,
    pR = slides.width(),
    pB = pT + slides.height(),
    opts = {
        moveLeft: ['div:first', 'prependTo', 'appendTo'],
        moveRight: ['div:last', 'appendTo', 'prependTo']
    },
    delay = 250,
    flag = false;
$('.slider').on('click', '.arrow', function () {
    if(flag) return false;
    flag = true;
    var dir = $(this).hasClass('left') ? 'moveLeft' : 'moveRight',
        mDiv = $(opts[dir][0], slides),
        cDiv = mDiv.clone();
    /* 
    * Добавляем клонированный элемент
    * и скрываем перемещаемый элемент
    */
    cDiv[opts[dir][1]](slides).addClass('clone').css({
        left: mDiv.position().left
    });
    mDiv.addClass('hidden');
    /* 
    * Пошаговая анимация перемещения
    */
    mDiv.hide(delay);
    cDiv.animate({
        top: pB
    }, 250, function(){
        $(this).animate({
            left: (dir == 'moveLeft' ? pR - $(this).innerWidth() : 0)
        }, delay*2, function(){
            mDiv[opts[dir][2]](slides).show(delay, function(){
                cDiv.animate({
                    top: 0
                }, delay, function(){
                    $(this).remove();
                    mDiv.removeClass('hidden');
                    flag = false;
                });
            });
        });
    });    
});
Добавлено через 17 минут
P.S. Забыл поудалять лишние переменные. Сами уже глянете какие из них не используются и ликвидируете.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.10.2014, 17:54
Помогаю со студенческими работами здесь

Подсчитать общую сумму только по событию №1 или по событию №2
Добрый день. Подскажите пожалуйста, в базе имеются &quot;№ Событий&quot;, &quot;потери&quot; по этим событиям в денежнем эквиваленте и &quot;Общая сумма...

Ограничение на смещение центрированного элемента
Имеется строка, для которой установлено свойство text-align: center; Можно ли сделать так, чтобы при уменьшении размеров окна данная...

смещение элемента каждую секунду
добрые люди подскажите как сделать так чтобы каждую секунду какой либо элемент смещался на определенное кол-во пикселей относительно оси у...

Как получить handle дочернего элемента если функция вызывается по событию?
Для задания координат подсказки для элементов div на все div с name=&quot;div2&quot; навешивается Listener который вызывает функцию mousemove_xy в...

Остановить смещение элемента от левого края
Есть элементы которые адаптируются под разное разрешение, так вот размеры width я ограничил функциями min и max, но у меня также стоит...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru