Динамическое перемещение DIVs- как? HTML5, jQuery?

#jquery #html #dynamic #web

#jquery #HTML #динамический #веб

Вопрос:

Я хотел бы создать движущиеся разделы на веб-странице — другими словами, области содержимого (с текстом, изображениями и другим произвольным контентом), которые перемещаются по странице при нажатии кнопки.

Каждый DIV должен перемещаться на определенное количество пикселей, а затем на определенное количество пикселей.

Будет несколько DIVS, которые должны перемещаться независимо друг от друга и иметь определенный z-порядок (т. Е. «Более высокие» DIVs смогут перемещаться «поверх» «более низких» DIVs, закрывая их).

Я читал о том, как сделать это в jQuery с помощью функции «анимировать», но это, по-видимому, медленно и может использовать много процессора, поскольку приводит к частому повторному рендерингу страницы.

Кто-нибудь знает какие-либо другие способы сделать это, например, HTML5 или какие-либо новые захватывающие технологии? Может быть, чистый JavaScript? 🙂

Спасибо за ваш совет!

Луиза

Ответ №1:

собирался предложить .animate, но вы говорите, что это медленно. Интересно, где ты это взял? Возможно, это было несколько крупных выпусков назад, особенно для IE, но я давно не видел проблемы. Я предлагаю, попробуйте сами.

Ответ №2:

Вы могли бы использовать переходы css3. Но они работают только в современных браузерах.
Но перемещение пары divs с помощью jquery не должно вызывать проблем с точки зрения производительности.

Ответ №3:

Это обязательно должны быть теги? Если вы сильно полагаетесь на анимацию, вам следует внимательнее присмотреться к canvas, который является частью HTML5

Ответ №4:

Поскольку анимация происходит на стороне клиента, то независимо от того, какое решение вы выберете, оно будет зависеть от возможностей обработки клиента. Я не знаю ни о каких функциях CSS и / или HTML5, которые делают это (Энди упоминает CSS3), но это ограничит вас только современными браузерами.

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

Если браузер не написан плохо, это не должно приводить к повторному отображению страницы enture. И хотя это не помогает вашим клиентам со старыми браузерами, новые браузеры, как правило, используют аппаратное ускорение для рендеринга, поэтому анимация должна оказывать гораздо меньшее влияние на их системы.

Извините, я не могу дать однозначный ответ «да / нет», «это то, что вы должны сделать», но я надеюсь, что это даст вам некоторую информацию.

Ответ №5:

В общем, я заметил, что переходы / преобразования с использованием css3 более плавные, чем при использовании jquery .animate. Это не значит, что .animate не подходит для большинства ситуаций.

Вы можете создать все это только с помощью CSS3, если используете анимацию ключевых кадров, как в http://coding.smashingmagazine.com/2011/05/17/an-introduction-to-css3-keyframe-animations /

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

1) создайте три css-класса с тремя разными позициями для вашего div (начало, промежуточное и конечное), используя позиционирование abs и различные значения left amp; top.

2) добавьте transition: top 3s linear, left 3s linear; или что угодно в div для начала, в первом классе с остальными свойствами для внешнего вида.

3) используйте javascript для динамического добавления второго класса, чтобы он переходил ко второму набору координат

4) используйте js, чтобы отслеживать, когда координаты равны второму состоянию, а затем добавьте третий класс, переводя его в третью позицию. Или просто используйте таймер для добавления третьего класса.

Вам нужно будет внести некоторые изменения в css, чтобы убедиться, что последний примененный класс переопределяет все остальное. Чтобы убедиться, что вы правильно определили специфику, вы можете написать классы как base {}, base.second {} and .base.second.third {} или что-то в этом роде (там нет каламбура …)

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