Метод | Описание |
---|---|
.add() | Создает новый объект jQuery с элементами добавленными в набор совпавших элементов. |
.addBack() | Позволяет добавить предыдущий набор элементов в стеке к текущему набору, при необходимости дополнительно отфильтрованный селектором. |
.children() | Возвращает дочерние элементы каждого элемента в наборе совпавших элементов, дополнительно может фильтроваться с помощью заданного селектора. |
.closest() | Для каждого элемента набора совпавших элементов получает первый подходящий элемент, соответствующий заданному селектору, проходя при этом через всех его предков, находящихся выше в дереве DOM. |
.contents() | Позволяет получить дочерние элементы каждого соответствующего элемента в наборе совпавших элементов, включая текстовые узлы и комментарии. |
.each() | Производит перебор элементов коллекции jQuery, выполняя при этом функцию для каждого из них. |
.end() | Завершает самую последнюю операцию фильтрации в текущей цепочке вызовов и возвращает набор соответствующих элементов в предыдущем состоянии. |
.eq() | Позволяет выбрать элемент с конкретным индексом из набора выбранных элементов. |
.filter() | Уменьшает набор совпавших элементов коллекции до тех, которые удовлетворяют заданному селектору, элементу DOM, объекту jQuery или условию, переданному в функцию |
.find() | Возвращает потомков каждого элемента в текущем наборе совпавших элементов, отфильтрованных селектором, объектом jQuery, или элементом. |
.first() | Сокращает набор совпавших элементов до первого элемента в наборе. |
.has() | Сокращает набор совпавших элементов до тех, у которых есть потомок, соответствующий селектору, или элементу DOM. |
.is() | Проверяет текущий соответствующий набор элементов относительно селектора, элемента, или объекта jQuery и возвращает логическое значение true, если хотя бы один из этих элементов соответствует приведенному значению. |
.last() | Сокращает набор совпавших элементов до последнего элемента в наборе. |
.map() | Передает функции каждый элемент в текущем наборе совпавших элементов, создавая при этом новый объект jQuery, который содержит возвращаемые значения этой функции. |
.next() | Позволяет получить каждый сестринский элемент, который находится следующим по отношению к текущему элементу в наборе соответствующих элементов. |
.nextAll() | Позволяет получить все элементы, которые являются следующими сестринскими элементами по отношению к текущему элементу в наборе соответствующих элементов. |
.nextUntil() | Позволяет получить все элементы, которые являются следующими сестринскими элементами по отношению к текущему элементу в наборе соответствующих элементов, но до и не включая элемента соответствующего определенному селектору, узлу DOM, или jQuery объекту. |
.not() | Удаляет элементы, которые не соответствуют определенным критериям из набора совпавших элементов. |
.offsetParent() | Производит поиск и выбор ближайшего предка элемента, который имеет позиционирование отличное от статичного (значение CSS свойства position которого равно fixed, absolute, или relative). |
.parent() | Возвращает родительский элемент каждого элемента в наборе совпавших элементов, дополнительно может фильтроваться с помощью заданного селектора. |
.parents() | Возвращает всех предков каждого элемента в наборе совпавших элементов, дополнительно может фильтроваться с помощью заданного селектора. |
.parentsUntil() | Возвращает всех предков каждого элемента в наборе совпавших элементов, вплоть до, но не включая элемента соответствующего определенному селектору, узлу DOM, или jQuery объекту. |
.prev() | Позволяет получить каждый сестринский элемент, который является предыдущим по отношению к текущему элементу в наборе соответствующих элементов. |
. prevAll() | Позволяет получить все элементы, которые являются предыдущими сестринскими элементами по отношению к текущему элементу в наборе соответствующих элементов. |
.prevUntil() | Позволяет получить все элементы, которые являются предыдущими сестринскими элементами по отношению к текущему элементу в наборе соответствующих элементов, но до и не включая элемента соответствующего определенному селектору, узлу DOM, или jQuery объекту. |
.siblings() | Позволяет получить все элементы находящиеся на одном уровне вложенности (смежные элементы) с указанным элементом, дополнительно они могут фильтроваться с помощью заданного селектора. |
.slice() | Уменьшает набор совпавших элементов в соответствии с заданным диапазоном индексов элементов. |
jQuery — Обход элементов
Обход по дереву DOM (traversing) в jQuery используется, чтобы «найти» (или отобрать) HTML элементы, основываясь на их положении по отношению к другим элементам. Выбрав некий элемент, затем можно двигаться в любую сторону, пока не будет достигнуто желаемое положение.
На следующем изображении HTML страница показана в виде дерева элементов (дерева DOM). При помощи обхода jQuery можно легко передвигаться вверх (к предкам), вниз (потомкам) и в стороны по этому дереву, начиная с выбранного (текущего) элемента. Этот процесс называется перемещение по дереву DOM.
Пояснения к изображению:
- Элемент <div> является родителем для элемента <ul>, и предком для всех элементов внутри него
- Элемент <ul> является родителем для обоих элементов <li> и дочерним для элемента <div>
- Левый элемент <li> является родителем для элемента <span>, дочерним для элемента <ul> и потомком для элемента <div>
- Элемент <span> является дочерним для левого элемента <li> и потомком для <ul> и <div>
- Два элемента <li> являются соседними (у них общий родительский элемент)
- Правый элемент <li> является родителем для <b>, дочерним для <ul> и потомком для <div>
- Элемент <b> является дочерним для правого <li> и потомком для <ul> и <div>
Предок — это родительский, прародительский и так далее элемент.
Потомок — это дочерний, «внучатый» и так далее элемент.
Соседние элементы делят один общий родительский элемент.
Перемещение по дереву DOM
jQuery предоставляет множество различных методов, позволяющих перемещаться по DOM.
Самая обширная категория таких методов относится к обходу дерева элементов.
В следующей главе мы рассмотрим, как можно перемещаться вверх, вниз и в стороны по дереву DOM.
Обход элементов в jQuery — Предки Вверх Размеры элемента
Jquery удалить содержимое элемента – Тарифы на сотовую связь
121 пользователя считают данную страницу полезной.
Информация актуальна! Страница была обновлена 16.12.2019
Материал из JQuery
Метод не имеет параметров.
$(«div.content»).empty() | удалит содержимое всех div-элементов с классом content. |
$(«div. content:first»).empty() | удалит содержимое первого div-элемента с классом content. |
Замечание: Если вы хотите удалить и элементы, и их содержимое, используйте remove().
В действии
Удалим содержимое одного из двух списков на странице, а затем поместим в него восклицательный знак:
Есть div, в него вставляю данные, которые приходят от ajax запроса:
Нужна функция для очистки содержимого div, попробовал так:
Содержимое удаляется, но теперь вставка данных возможна только после обновления страницы, я так понимаю, что DeletePrice удаляет сам блок, а не его содержимое.
Вопрос: как удалить содержимое div?
В данном уроке рассматриваются вопросы манипулирования существующими элементами на странице:
- Удаление элементов со страницы с помощью методов empty() , remove() , detach() и unwrap()
- Замена элементов новыми элементами с помощью методов replaceWith() и replaceAll()
- Перемещение элементов от одного родительского элемента к другому на странице
Удаление элементов со страницы
Удаление всего, что находится внутри элемента: empty()
Метод empty() – это простейший способ удаления содержимого со страницы. Вызов метода empty() для объекта jQuery удаляет все содержимое из набора, соответствующего элементу (или элементам) в объекте jQuery.
Другими словами, метод empty() удаляем все наследственные элементы и узлы (такие, как текстовые узлы) из каждого элемента, попадающего в набор, оставляя элемент пустым.
В примере удаляется содержимое из двух элементов div :
После выполнения выше приведённого кода содержимое страницы изменится на :
Удаление элемента целиком: remove()
Если метод empty() удаляет всё внутри элемента, то метод remove() удаляет все, включая сам элемент. Например:
после выполнения выше приведённого кода оба элемента div будут удалены со страницы:
Вы можете передать строку с условным селектором в метод remove() . В этом случае, удаляемые элементы будут фильтроваться селектором. Например:
В выше приведённом примере будет удалён только элемент div , для которого установлен класс removeMe и содержащий текст «Другой параграф». Все остальное останется на странице:
Удаление элемента без разрушения его данных: detach()
Метод remove() возвращает объект jQuery, который содержит удалённые элементы. Теоретически, можно удалить какие-нибудь элементы из одного места на странице, а позже снова присоединить их где угодно..
Однако, для того, чтобы сохранить ресурсы и избежать потенциальной проблемы с утечкой памяти, метод remove() удаляет все данные jQuery и события, ассоциированные с удалённым элементом. Например, если элементу было назначено событие jQuery click , а затем элемент был удалён со страницы с помощью метода remove() , то событие click будет удалено из элемента. Это может вызвать проблему, если позже захотите вернуть элемент обратно на страницу и восстановить его функциональность.
В данном случае может помочь метод detach() (появился в jQuery 1.4). Он действует почти также как и метод remove() , за исключением одного – он не удаляет данные jQuery и события, ассоциированные с удалённым элементом. Это означает, что позже вы можете присоединить удалённые элементы обратно с сохранением их метаданных jQuery.
Пример. Следующий скрипт назначает событие jQuery click каждому из двух параграфов на странице. Оба обработчика события просто переключают класс CSS «red» для параграфа, чтобы изменить цвет с красного на чёрный или обратно каждый раз, когда на него нажимают.
Затем скрипт удаляет первый параграф со страницы с использованием метода remove() и сохраняет объект jQuery , который содержал параграф в переменной myDiv1Para . Затем повторно присоединяем параграф к родительскому div с помощью метода appendTo() .
Тоже самое мы проделываем со вторым параграфом, только используем метод detach() вместо метода remove() .
После выполнения данного скрипта первый параграф потеряет обработчик события click , а второй параграф сохранит свою функциональность полностью. Вы можете проверить, открыв страницу в браузере. Если нажать кнопку мыши на втором параграфе, то он будет менять цвет, а первый никак не будет реагировать на действия мыши.
Это происходит потому, что вызов метода remove() привёл к удалению обработчика события для первого параграфа, а метод detach() сохранил обработчик события click для второго параграфа.
Далее мы рассмотрим ещё несколько способов переместить элемент.
Удаление родительского элемента: unwrap()
Метод unwrap() удаляет родителя элемента (или родителей набора элементов)из DOM. Элемент займёт место родительского элемента в DOM.
Следующий пример разворачивает содержание div . Другим словами происходит замещение div его содержимым:
После выполнения выше приведённого кода, содержание страницы примет следующий вид:
Замена элементов
Замена элемента новым содержимым: replaceWith()
Метод replaceWith() позволяет заменять элемент или набор элементов новым содержимым. Вы можете передать замещающий контент в любой из следующих форм:
- Объект элемента, который создан с помощью функции JavaScript DOM, такой как document. getElementById() или document.createElement()
- Строка HTML, представляющая замещающий контент
- Объект jQuery, содержащей элемент (или элементы), который будет использоваться для замещения
- Возвратная функция, которая должна возвращать замещающий HTML код
Ниже приводится пример, который показывает метод replaceWith() в действии. Производится замещение первого параграфа новой строкой HTML, второй параграф замещается объектом элемента, а третий параграф заменяется результатом функции, которая возвращает текущее время:
После выполнения кода содержимое страницы примет вид :
replaceAll() : альтернатива методу replaceWith()
Метод replaceAll() выполняет туже самую работу, что и метод replaceWith() , но вместо передачи замещающего контента в качестве аргумента, вам нужно передать элемент, который нужно заменить.
Например, следующие 2 строки кода делают одно и тоже:
Перемещение элементов
Теперь вы знаете, как удалять и заменять элементы. Остаётся открытым вопрос: как перемещать элементы по дереву DOM? Например, есть параграф внутри элемента div , и нужно его переместить в другой div .
Несмотря на то, что в jQuery нет специального метода для перемещения элементов по дереву DOM, в действительности это очень просто реализовать. Все, что нужно сделать, это выделить элемент(ы), которые вы хотите переместить; затем вызвать метод «добавления» , например, append() , appendTo() или prepend() , чтобы добавить выделенный элемент к другому родительскому элементу. jQuery автоматически распознает, что элемент(ы) уже существует на странице и переместит его к новому родителю.
Пример воспроизводит описанный процесс. Параграф перемещается из первого div во второй:
После выполнения кода страница примет следующий вид:
А здесь другой способ перемещения элемента:
З-й пример демонстрирует очень полезную технику jQuery — связывание методов. Так как большинство методов jQuery возвращает объекты, то можно вызывать другой метод для возвращаемого объекта. Что в свою очередь приведёт к возвращению следующего объекта jQuery и так далее.
Так в выше приведённом примере объект jQuery возвращается методом detach() , который вызывается для удаления параграфа. А метод prependTo() вызывается для возвращённого объекта jQuery, чтобы добавить удалённый параграф к новому родительскому элементу.
Что произойдёт, если попытаться переместить какой-нибудь контент в более чем один родительский элемент в одно и то же время? Если это сделать, jQuery сначала удалит контент из старого родителя, затем клонирует контент столько раз, сколько нужно и добавит клоны в каждый указанный родительский элемент. Например:
После выполнения выше описанного кода, содержимое страницы будет выглядеть так:
Резюме
Удаление, замена и перемещение контента являются фундаментальными концепциями, которые позволяют строить замечательные сайты на основе jQuery.
Данный урок подготовлен для вас командой сайта ruseller.com
Источник урока: www. elated.com/articles/jquery-removing-replacing-moving-elements/
Перевел: Сергей Фастунов
Урок создан: 11 Августа 2010
Просмотров: 270607
Правила перепечатки
5 последних уроков рубрики «jQuery»
Анимация набора текста на jQuery
Сегодня мы бы хотели вам рассказать о библиотеке TypeIt — бесплатном jQuery плагине. С её помощью можно имитировать набор текста. Если всё настроить правильно, то можно добиться очень реалистичного эффекта.
Временная шкала на jQuery
jQuery плагин для создания временной шкалы.
Заметка: Перезагрузка и редирект на JavaScript
Быстрая заметка, где вы сможете найти парочку JS сниппетов для перезагрузки и перенаправления пользователей через JavaScript.
Рисуем диаграмму Ганта
jQuery плагин для создания диаграммы Ганта.
AJAX и PHP: загрузка файла
Пример того как осуществить загрузку файла через PHP и jQuery ajax.
HTML Drag and Drop API — Интерфейсы веб API
ИнтерфейсHTML Drag and Drop позволяет приложениям использовать функционал перетаскивания в браузерах. Пользователь может выбрать перетаскиваемые элементы мышью, перетащить к элементу сброса и бросить их, отпустив кнопку мыши. Во время переноса за указателем следует полупрозрачный образ перетаскиваемого элемента
При создании веб-сайтов, расширений и XUL-приложений можно настраивать, какие именно элементы можно перетаскивать, какую обратную связь они при этом будут создавать, и какие элементы будут создавать область сброса.
Данный обзор HTML Drag and Drop включает описание интерфейса, основные шаги по добавлению поддержки данного функционала в приложение, а также краткие данные о поддержке.
К HTML Drag and Drop интерфейсам относятся DragEvent
(en-US), DataTransfer
, DataTransferItem
(en-US) и DataTransferItemList
(en-US).
Интерфейс DragEvent
(en-US) имеет конструктор и одно свойство dataTransfer
(en-US), которое является объектом DataTransfer
.
Объекты DataTransfer
включают состояние события, такое как тип выполненного перетаскивания (вроде copy
или move
), данные перетаскивания (один или более элементов) и MIME-тип каждого элемента перетаскивания. Объекты DataTransfer
также имеют методы добавления или удаления элементов из данных о перетасивании.
Для добавления в приложение поддержки HTML Drag and Drop, следует использовать только интерфейсы DragEvent
(en-US) и DataTransfer
. (Firefox поддерживает некоторые Специфичные для Gecko расширения объекта DataTransfer
, но они будут работать только в Firefox.)
Каждый объект DataTransfer
содержит свойство items
(en-US), являющееся списком
(en-US) объектов DataTransferItem
(en-US). Объект DataTransferItem
(en-US) представляет собой отдельный перетаскиваемый элемент, каждый со свойством kind
(en-US) (либо string
либо file
) и свойство type
(en-US) для MIME-типа данных элемента. Объект DataTransferItem
(en-US) также имеет методы для получения данных о перемещаемых элементах.
Объект DataTransferItemList
(en-US) содержит список объектов DataTransferItem
(en-US). Он имеет методы для добавления перетаскиваемых объектов в список, их удаления, и очистки списка.
Ключевое отличие интерфейсов DataTransfer
и DataTransferItem
(en-US) заключается в том, что первый использует синхронный метод доступа к данным о перетаскиваемых объектах getData()
(en-US), а второй – асинхронный метод getAsString()
(en-US).
Примечание: DragEvent
(en-US) и DataTransfer
широко поддерживаются десктопными браузерами. Однако, поддержка интерфейсов DataTransferItem
(en-US) и DataTransferItemList
(en-US) достаточно ограниченная. Более подробно можно узнать в разделе Поддержка .
Специфичные для Gecko интерфейсы
Mozilla и Firefox поддерживают некоторые функции, которых нет в стандартной drag-and-drop модели. Это удобные функции, помогающие перетаскивать несколько элементов или нестроковых данных (например, файлов). Для получения дополнительной информации смотрите Перетаскивание и Сброс нескольких элементов. Дополнительно посмотрите DataTransfer
страницу справочника со всеми специфичными для Gecko свойствами и методами.
В данном разделе кратко описаны основные шаги добавления в приложение функционала drag-and-drop.
Обозначьте, что можно
перетаскивать
Чтобы сделать элемент перетаскиваемым, к нему нужно добавить атрибут draggable
и глобальный обработчик события ondragstart
. Пример показан в коде ниже:
<script>
function dragstart_handler(ev) {
ev.dataTransfer.setData("text/plain", ev.target.id);
}
window.addEventListener('DOMContentLoaded', () => {
const element = document.getElementById("p1");
element.addEventListener("dragstart", dragstart_handler);
});
</script>
<p draggable="true">Данный элемент является перетаскиваемым. </p>
Для получения дополнительной информации смотрите:
Определите данные перетаскивания
Приложение может добавлять в операцию перетаскивания любое количество элементов данных. Каждый элемент данных — это строка
определённого типа
. Обычно MIME-тип равен text/html
.
У каждого события перетаскивания
(en-US) есть свойство dataTransfer
(en-US), которое содержит данные о событии. Это свойство (являющееся объектом DataTransfer
), также имеет методы управления данными перетаскивания. Метод setData()
(en-US) используется для добавления элемента в данные перетаскивания, как показано в следующем примере.
function dragstart_handler(ev) {
ev.dataTransfer.setData("text/plain", ev.target.innerText);
ev.dataTransfer.setData("text/html", ev.target.outerHTML);
ev.dataTransfer.setData("text/uri-list", ev.target.ownerDocument.location. href);
}
Определите изображение перетаскивания
По умолчанию браузер предоставляет изображение, которое в процессе перетаскивания отображается рядом с указателем. Тем не менее, приложение может использовать сторонее изображение с помощью метода setDragImage()
(en-US), как показано в следующем примере.
function dragstart_handler(ev) {
let img = new Image();
img.src = 'example.gif';
ev.dataTransfer.setDragImage(img, 10, 10);
}
Узнать больше об изображении перетаскивания можно в:
Определите
эффект перетаскивания
Свойство dropEffect
(en-US) используется для управления обратной связью, которую пользователь получает во время операции перетаскивания. Обычно это влияет на то, какой курсор будет отображаться во время перетаскивания. Например, когда пользователь наводит указатель на цель сброса, курсор браузера может отражать тип операции, которая будет произведена.
Можно определить три эффекта:
copy
обозначает, что перетаскиваемые данные будут скопированы из предыдущего места в место сброса.move
обозначает, что перетаскиваемые данные будут перемещены из предыдущего места в место сброса.link
обозначает, что между исходным местоположением и местом сброса будет создана некоторая форма свази.
В течение операции перетаскивания, эффекты перетаскивания могут быть изменены, чтобы обозначить, что в разных местах доступны разные эффекты.
Следующий пример демонстрирует, как использовать это свойство.
function dragstart_handler(ev) {
ev.dataTransfer.dropEffect = "copy";
}
Для получения дополнительной информации смотрите:
Определите
зону сброса
По умолчанию, при сбросе на большинство элементов, браузер не производит никаких действий. Чтобы изменить это поведение и сделать элемент зоной сброса или сбрасываемым, он должен иметь атрибуты для обработчиков событий ondragover
(en-US) и ondrop
(en-US).
Следующий пример демонстрирует, как использовать эти атрибуты, а также включает основные обработчики событий для каждого атрибута.
<script>
function dragover_handler(ev) {
ev.preventDefault();
ev.dataTransfer.dropEffect = "move";
}
function drop_handler(ev) {
ev.preventDefault();
const data = ev.dataTransfer.getData("text/plain");
ev.target.appendChild(document.getElementById(data));
}
</script>
<p ondrop="drop_handler(event)" ondragover="dragover_handler(event)">Drop Zone</p>
Обратите внимание, что каждый обработчик вызывает preventDefault()
, чтобы предотвратить дополнительную обработку данного события (например, события касания или события указателя).
Для получения дополнительной информации смотрите:
Обработайте
эффекты сброса
Обработчик события drop
(en-US) может по-разному обрабатывать данные перетаскивания, в зависимости от конкретного приложения.
Как правило, для извлечения и последующей обработки элементов перетаскивания, приложение использует метод getData()
(en-US). Кроме того, семантика приложения может отличаться в зависимости от значения dropEffect
(en-US) и состояния кнопок-модификаторов.
Следующий пример демонстрирует обработчик сброса, получающий id
исходного элемента из данных перетаскивания и затем использует id
для перемещения исходного элемента к элементу сброса.
<script>
function dragstart_handler(ev) {
ev.dataTransfer.setData("application/my-app", ev.target.id);
ev.dataTransfer.effectAllowed = "move";
}
function dragover_handler(ev) {
ev.preventDefault();
ev.dataTransfer.dropEffect = "move"
}
function drop_handler(ev) {
ev.preventDefault();
const data = ev.dataTransfer.getData("application/my-app");
ev.target.appendChild(document.getElementById(data));
}
</script>
<p draggable="true" ondragstart="dragstart_handler(event)">This element is draggable.</p>
<div ondrop="drop_handler(event)" ondragover="dragover_handler(event)">Drop Zone</div>
Для получения дополнительной информации смотрите:
Завершение перетаскивания
В конце операции перетаскивания событие dragend
(en-US) происходит у исходного элемента, который был целью начала перетаскивания.
Это событие происходит независимо от того, было перетаскивание выполнено или прервано. Обработчик события dragend
может проверить значение свойства dropEffect
(en-US) чтобы определить, успешно ли выполнена операция перетаскивания.
Для получения дополнительной информации об обработке завершения операции перетаскивания, смотрите:
Спецификация | Статус | Комментарий |
---|---|---|
HTML Living Standard | Живой стандарт |
Jquery как создать элемент — Вэб-шпаргалка для интернет предпринимателей!
»» В данной статье используется исходный код для примеров. Сохраните эту страницу для тестирования приведенных ниже примеров.
Во многих случаях элементы, которые требуется вставить в DOM, необходимо предварительно создавать. Рассмотрению способов создания содержимого посвящено несколько следующих разделов.
Важно понимать, что создание элементов не означает их автоматического добавления в DOM. Вы должны снабдить jQuery явными инструкциями относительно того, куда именно должны быть помещены новые элементы, о чем будет говориться в следующей статье.
Создание элементов с использованием функции $()
Одним из способов создания элементов является передача строки, содержащей HTML-фрагмент, функции $(), которая выполнит синтаксический анализ строки и создаст соответствующие DOM-объекты. Пример того, как это можно сделать, приведен в примере ниже:
В этом примере на основе одного HTML-фрагмента создаются два элемента: div и img. Поскольку мы работаем здесь с HTML-кодом, можно использовать фрагменты, содержащие DOM-структуру. В данном случае у элемента div имеется дочерний элемент img.
Объект jQuery, возвращаемый функцией $(), содержит лишь элементы верхнего уровня, указанные в HTML-фрагменте. Чтобы продемонстрировать это, в сценарии с помощью функции each() реализован вывод на консоль информации о каждом из элементов, содержащихся в объекте jQuery. Однако дочерние элементы не отбрасываются. К ним можно получить доступ, используя обычные методы, предназначенные для перемещения по структуре DOM-дерева. С этой целью в сценарии вызывается метод children(), и информация о каждом дочернем элементе также выводится на консоль. Результаты работы сценария, выводимые на консоль, выглядят следующим образом:
Создание новых элементов путем клонирования существующих
Метод clone() позволяет создавать новые элементы на основе существующих. Вызов этого метода приводит к клонированию каждого из элементов, содержащихся в объекте jQuery, вместе со всеми их элементами-потомками. Соответствующий пример приведен ниже:
В этом сценарии выбираются и клонируются все элементы div, принадлежащие классу dcell. Для демонстрации того, что при этом клонируются также элементы-потомки, в сценарии вызывается метод children() с селектором, обеспечивающим получение клонированных элементов img. Информация об элементах div и img выводится на консоль. Результаты работы сценария выглядят следующим образом:
Вызов метода clone(true) позволяет включить в процесс клонирования также обработчики событий и данные, связанные с элементами. Если аргумент опущен или имеет значение false, то обработчики событий и данные не копируются.
Создание элементов средствами DOM API
Для создания объектов HTMLElement можно использовать непосредственно программный интерфейс DOM, что, собственно говоря, jQuery и делает вместо вас, когда вы привлекаете для этой цели другие методики. Я не собираюсь подробно описывать DOM API и ограничусь приведением простого примера, представленного ниже, который даст вам возможность почувствовать, что именно представляет собой эта методика:
В этом сценарии создаются и конфигурируются два объекта HTMLElement, представляющие HTML-элементы div и img, и элемент img назначается дочерним элементом элемента div, как это было в первом примере. Затем элемент div в виде объекта HTMLElement передается функции $() в качестве аргумента, что позволяет использовать в оставшейся части сценария те же самые функции, что и в предыдущих примерах. Консольный вывод будет выглядеть следующим образом:
В этом уроке мы рассмотрим два варианта создания элементов в jQuery, и методы, предназначенные для добавления элементов на страницу, удаления, клонирования, замены одних элементов на другие, и перемещение элементов.
Как создать элемент в jQuery?
Создание элементов в jQuery осуществляется посредством передачи HTML-строки в главную функцию этой библиотеки.
Синтаксис создания элементов из HTML-строки:
Он имеет 2 параметра. Первый ( html ) обязательный. Здесь указывается HTML-строка, на основе которой нужно создать соответствующие элементы. Второй ( ownerDocument ) не обязательный. Он необходим для указания документа, в котором необходимо создать элементы. По умолчанию элементы создаются в том же документе, в который была загружена библиотека jQuery. Если вы хотите внедрить элементы в другой документ, то его явно необходимо указать с помощью этого параметра.
Пример создания элемента из HTML-строки:
Пример создания элемента не в документе, в который была загружена библиотека jQuery, а в другой #include :
Пример создания нескольких элементов из HTML-строки:
Созданный элемент не отобразиться на странице, так как мы его только создали. Для того чтобы элемент отобразился на странице его нужно вставить в неё. Как это выполнить рассмотрим ниже.
Этот способ создания элементов можно использовать только в том случае, если вы полностью доверяете источнику. Если же вы не уверены в источнике, из которого берёте HTML данные, то обязательно применяйте поэлементный способ создания нужного фрагмента.
Синтаксис создания HTML элемента:
Он имеет 2 параметра. Первый параметр ( html ) является обязательным. В нём указывается строка, описывающая HTML элемент, который необходимо создать. Например для создания элемнта div , она описывается как «
Cоздадим элемент используя синтаксис jQuery для создания HTML элемента:
Cоздадим HTML фрагмент, используя поэлементый способ создания:
С методом append познакомимся ниже. Он в этом коде используется чтобы добавить элементы img и figcaption в элемент figure .
Как вставить элементы на страницу?
В jQuery все методы для добавления элементов на страницу можно разбить на три большие группы.
Первая группа – это методы, предназначенные для вставки новых элементов внутрь других. К ним относится append, appendTo, prepend, prependTo, html и text.
Метод append
Метод append предназначен для вставки контента в конец каждого элемента набора, к которому он применяется.
Синтаксис метода append (2 варианта):
В качестве значения параметр content может принимать DOM-элемент, текстовый узел, массив элементов и текстовых узлов, HTML-строку или объект jQuery.
Метод append (1 вариант) может принимать на вход не один, а любое количество аргументов content . Используется это когда вам нужно вставить не один, а несколько элементов.
Вторая реализация метода append позволяет принимать в качестве аргумента функцию.
Функция в результате своего выполнения должна возвращать HTML-строку, элемент(ы) DOM, текстовый узел(ы) или объект jQuery. Другими словами, определять контент, который необходимо вставить в конец каждого элемента текущего набора. В качестве аргументов на вход функция получает индекс текущего элемента в наборе и его HTML код. Внутри функции ключевое слово this указывает на текущий элемент набора.
Пример, в котором с помощью метода append будем добавлять в конец элемента .info новый элемент div , содежащий текущее время:
Метод appendTo
Метод appendTo выполняет ту же задачу что и метод append . Отличие между ними в основном сводится к синтаксису, а именно в различии мест, в которых нужно размещать контент (что нужно вставить) и цель (куда нужно вставить). В случае с методом append цель предшествует контенту. Контент указывается в круглых скобках этого метода. В методе appendTo наоборот контент предшествует цели.
Синтаксис метода appendTo:
Параметр target является обязательным. В качестве значения он может принимать селектор, DOM-элемент, HTML-строку, массив элементов или объект jQuery. Этот параметр определяет цель, в которую будет вставлен соответствующий набор элементов.
Пример, в котором рассмотрим как с помощью метода append можно добавить элемент внутрь каждого элемента li :
Методы prepend и prependTo
Методы prepend и prependTo полностью аналогичны методам append и appendTo . Но, в отличии от них они вставляют новые элементы не в конец других элементов, а в их начало (т.е. перед всеми элементами расположенными в каждом из них).
Синтаксис метода prepend (2 варианта):
Синтаксис метода prependTo :
Пример, в котором добавим текст «Внимание!» перед содержимым элемента .message :
Методы text и html
Методы text и html подробно описаны в этой статье. Они применяются, когда нужно установить новое содержимое для каждого элемента текущего набора. Метод text используется, когда требуется установить текстовый контент, а html – когда HTML фрагмент. Кроме этого, данные методы применяются также для получения содержимого элементов.
Вторая группа – это методы, предназначенные для вставки новых элементов за пределами существующих элементов, т.е. перед или после них. К ним относятся after, insertAfter, before и insertBefore.
Метод after
Метод after применяется, когда вам нужно вставить некоторый контент после каждого элемента текущего набора.
Синтаксис метода after (2 варианта):
Назначение параметров и данные, которые они могут принимать такие же как у метода append. Перейти к описанию параметров метода append .
Пример, в котором добавим кнопку «Закрыть» после текста сообщения (элемента .message__text ):
Метод insertAfter
Метод insertAfter выполняет ту же функцию что и метод after . Их основное отличие заключается в том, что контент (что нужно вставить) и цель (куда нужно вставить) размещены наоборот. Т.е. в after цель располагается перед ним, а контент передаётся как аргумент этого метода (в круглых скобках). В insertAfter цель задаётся как аргумент этого метода (в круглых скобках), а контент указывается перед ним.
Синтаксис метода insertAfter :
Пример, в котором вставим после каждого элемента p элемент div с текстовым контентом «Это новый элемент»:
Методы before и insertBefore
Методы before и insertBefore полностью аналогичны методам after и insertAfter . Но, в отличии от них они вставляют новые элементы не после цели, а перед ней.
Пример, в котором добавим перед всеми элементами p элемент div с текстовым содержимым «Это новый элемент»:
Третью группу представляют методы, которые могут применяться, когда вам нужно вставить новый контент таким образом чтобы он был обернут относительно существующих. К этой группе относятся методы wrap, wrapAll и wrapInner.
Метод wrap
Метод wrap используется, когда вам нужно указанную HTML-структуру обернуть вокруг каждого элемента текущего набора.
Синтаксис метода wrap :
В качестве параметра wrappingElement можно указывать селектор, HTML-строку, DOM-элемент или объект jQuery, определяющий структуру, которая будет оборачивать соответствующие элементы. Когда вы передаете коллекцию jQuery, содержащую более одного элемента, или селектор, соответствующий нескольким элементам, будет использоваться первый элемент.
Во втором варианте реализации метода wrap в качестве аргумента может использоваться функция.
Функция должна возвращать в качестве результата HTML-строку или объект jQuery. Этот результат будет определять HTML-структуру, которая будет обарачиваться вокруг каждого элемента текущего набора. В качестве аргумента функция получает индекс элемента в наборе. Внутри функции this указавает на текущий элемент в наборе.
Обернём каждый элемент p в текущем наборе вокруг двух элементов div :
Метод wrapAll
Метод wrapAll применяется, когда нужно указанную HTML-структуру обернуть вокруг всех элементов текущего набора.
Данный метод не оборачивает каждый элемент набора, поэтому его имеет смысл использовать, когда все элементы набора имеют одного родителя или, другими словами, являются по отношению друг к другу соседями.
HTML-структура может иметь несколько уровней в глубину, но внутренний элемент в ней должен быть только один.
Параметр wrappingElement может принимать в качестве значения селектор, HTML-строку, DOM-элемент или объект jQuery. Данный параметр задаёт HTML-структуру, которая будет использоваться для оборачивания всех выбранных элементов.
Во втором варианте реализации метода wrapAll в качестве аргумента можно использовать функцию обратного вызова.
Данная функция в качестве результата должна возвращать HTML-строку или объект jQuery. Этот результат будет определять HTML-структуру, с помощью которой будут обёрнуты чтобы все текущие элементы. Внутри функции this указывает на первый элемент набора.
Обернём все элементы p вокруг HTML конструкции, состоящей из двух элементов div вложенных друг в друга:
Метод wrapInner
Метод wrapInner применяется, когда нужно обернуть содержимое каждого элемента набора в заданную HTML-структуру.
Параметр wrappingElement в этом методе принимает такие же значения как у метода wrap . Тоже касается, когда мы используем в качестве аргумента функцию.
Пример, в котором обернём содержимое каждого элемента li вокруг DOM-элемента b .
Как скопировать элемент в jQuery?
Копирование одного или нескольких элементов в jQuery осуществляется с помощью метода clone .
Синтаксис метода clone :
Параметры withDataAndEvents и deepWithDataAndEvents являются необязательными. По умолчанию первый параметр равен false , а второй равен значению первого.
Первый параметр withDataAndEvents указывает, следует ли копировать обработчики событий и данные вместе с элементами.
Второй параметр делает аналогичные действия, но не для самого клонированного элемента, а для всех его дочерних элементов.
Примеры использования метода clone.
1. При нажатии на элемент будем его клонировать, после чего вставлять скопированный элемент в конец.
Немного усовершенствуем скрипт. Укажем, что при клонировании элемента нужно копировать и его события. Для этого установим параметру withDataAndEvents значение true .
2. Пример, в котором будем копировать элемент, содержащий другие элементы, на один из которых «повешен» обработчик события.
Как заменить элемент в jQuery?
Замена каждого из выбранных элементов на другой в jQuery осуществляется с помощью метода replaceAll .
Синтаксис метода replaceAll :
Под параметром target понимается цель, т.е. те элементы которые нужно заменить. Указать на эти элементы можно посредством селектора, jQuery, массива или DOM-элемента.
При замене элементов метод replaceAll удаляет data и обработчики событий, связанные с удаляемыми узлами.
Например, заменим все элементы a на странице на элемент span с текстом «здесь была ссылка».
Ещё в jQuery есть метод replaceWith .
Данный метод работает наоборот. Здесь мы сначала выбираем элементы, которые хотим заменить, а затем в круглых скобках метода replaceWith указываем то, на что их хотим заменить.
Синтаксис метода replaceWith :
В качестве параметра этому методу можно передать новый контент в виде html-строки, DOM-элемента, массива или jQuery, а также определить его посредством функции.
Пример. При нажатию на кнопку button заменим её на элемент span с текстом, который был у кнопки.
Как удалить элемент в jQuery?
В jQuery имеется несколько методов для удаления элементов из DOM.
Первый метод – это detach .
Данный метод позволяет удалить все или часть элементов из выбранного набора.
Синтаксис метода detach :
Параметр selector является не обязательным. Он используется для указания селектора, в соответствии с которым будут удаляться не все элементы из набора, а только те которые ему соответствуют.
Например, удалим все элементы с классом info на странице:
Метод detach при удалении элементов не удаляет связанные с ними данные jQuery и обработчики событий. Таким образом при восстановлении элементов, удалённых с помощью метода detach , они будут связаны со всеми своими данными jQuery и обработчиками событий.
Рассмотрим это на примере:
Второй метод – это empty .
Это метод предназначен для удаления все дочерних узлов у каждого элемента из текущего набора.
Синтаксис метода empty :
Пример, в котором удалим все дочерние узлы у элемента с идентификатором «message»:
Пример, в котором при нажатии на кнопку, получим элемент в котором она находится по селектору .content и удалим его содержимое:
Чтобы избежать утечек памяти, jQuery удаляет другие конструкции, такие как данные и обработчики событий, из дочерних элементов перед удалением самих элементов.
Если вы хотите удалить элементы, не уничтожая их данные или обработчики событий (чтобы их можно было добавить позже), используйте вместо empty метод detach .
Третий метод – это remove .
Он используется для удаления выбранных элементов из DOM.
Синтаксис метода remove:
Параметр selector является не обязательным. Его нужно использовать, когда вам нужно удалить из набора не все элементы, а только те которые соответствуют селектору.
Метод remove похож на empty , но в отличии от него он удаляет не только все дочерние узлы, но и сам элемент. В дополнение вместе с элементами удаляются все связанные с ними события и данные jQuery. Если вам нужно удалить элементы без удаления данных и событий, то используйте метод detach .
Пример, в котором будем удалять кнопку при нажатии на неё.
Четвёртый метод для удаления элементов из DOM – это unwrap .
Метод unwrap применяется для удаления только родительских элементов у каждого элемента из текущего набора оставляя при этом соответствующие элементы на месте.
Синтаксис метода unwrap :
Метод unwrap имеет один необязательный параметр selector . В качестве данного параметра задаётся селектор, который будет использоваться для проверки родительского элемента. Если родительский элемент не соответствует селектору, то он не будет убран из DOM.
Пример использования метода unwrap для удаления оборачиваемых элементов у каждого элемента текущего набора:
С использованием selector . Например будем удалять только те оборачиваемые элементы, которые соответсвуют селектору «.container-1»:
Как переместить элемент в jQuery
Если вам нужно именно переместить элемент, а не скопировать, то в jQuery это можно выполнить посредством использования нескольких методов.
Как в этом примере осуществляется перемещение? Сначала мы получаем элемент, который мы хотим переместить, в данном случае «#move». После этого вызываем метод detach , который удалит элемент из текущего места. В качестве результата он нам возвратит удалённый элемент. Далее удалённый элемент с помощью метода appendTo вставляем в нужное место.
В этом примере использовался метод detach , потому что мы хотели сохранить все связанные с ним данные jQuery и обработчики событий. Если это не нужно, то вместо метода detach можно использовать метод remove .
Используем функцию append()
Создание новых элементов на jQuery можно осуществить несколькими путями. Самый простой из них, это использовать функцию append() (прибавить). Предположим, что у нас есть некий DIV, внутри которого тоже есть пара элементов, и необходимо создать ещё один, третий.
Если необходимо создать пустой DIV:
Если необходимо создать элемент с заданными атрибутами или текстом:
Поскольку в родительском контейнере уже есть несколько элементов, то новый элемент будет в конец родителя, то есть после second:
Используем функцию appendTo()
Можно пойти и другим путём, использовав немножко другую функцию, которая называется appendTo() (добавить к). Её отличие в том, что она вызывается не с родительского элемента, а с того, который будет добавлен. То есть эта функция как бы противоположна предыдущей. Результат выполнения следующего кода будет полностью идентичен предыдущему:
В чём же отличия, спросите Вы? Разница между append() и appendTo() заключается в логике цепочки вызовов. Многие функции jQuery возвращают объект типа jQuery для того, чтобы можно было удобно и компактно продолжить выполнять действия над ними. Взгляните на следующие 2 случая:
В первом случае функция append() вернёт объект с >appendTo() будет возвращать новосозданный элемент, и CSS-свойство будет применено только к нему.
Имейте ввиду, что описанными выше функциями можно не только создавать, а и перемещать уже существующие элементы, например, от одного родителя к другому. Пусть есть следующий HTML:
Если мы хотим переместить 4-й элемент внутрь третьего, выполнить следующий код:
Функции prepend() и prependTo()
Как мы выяснили, используя 2 предыдущие функции, можно создать элемент А и поместить его внутрь элемента Б, при этом А помещается в конец Б и становиться его последним дочерним элементом. Функции prepend() и prependTo() поступают наоборот: они делают элемент А первым из дочерних элементов родителя Б, то есть помещают его в начало Б. Если у нас есть такой HTML-код:
Выполним такой JavaScript:
Создаём и перемещаем элементы с помощью функций before() , after() , insertAfter() , insertBefore()
Функции, рассмотрены ранее, создают или перемещают элементы либо в начало, либо в конец родительского контейнера. Если необходимо поместить объект в заданное место, перед или после другого объекта, тогда можно использовать такие функции:
- цель.before(объект) — вставляет объект перед целью и возвращает цель.
- цель.after(объект) — вставляет объект после цели и возвращает цель.
- объект.insertBefore(цель) — вставляет объект перед целью и возвращает объект.
- объект.insertAfter(цель) — вставляет объект после цели и возвращает объект.
Пусть имеется такой HTML:
Если мы хотим создать какой-либо элемент и поместить его после first и перед second, а затем, к примеру, раскрасить его в зелёный цвет, тогда можно пойти двумя идентичными путями:
Если требуется создать объект, например, перед first и затем раскрасить first в зеленый цвет:
Я думаю, логика понятна, ничего сложного нет.
Как создавать элементы более удобно
Если новосозданному элементу необходимо задать несколько свойств или «повесить» на него несколько обработчиков событий, то более удобным синтаксисом для создания элементов может оказаться следующий:
Рекомендуем к прочтению
Насколько drag and drop удобны. Техника Drag-n-Drop с использованием jQuery
Для библиотеки VCL фирмой Borland реализована собственная версия интерфейса Drag&Drop (переводится как «перетащить»). Интерфейс этот внутренний — передавать и принимать можно любые управляющие элементы Delphi внутри формы» (кроме самой формы). Он реализован без использования соответствующих функций API Windows — их нужно применять при организации общения с другими задачами путем перетаскивания.
Нажав левую кнопку мыши над элементом управления, мы можем «перетащить» его на любой другой элемент. С точки зрения программиста это означает, что в моменты перетаскивания и отпускания клавиши генерируются определенные события, которыми передается вся необходимая информация — указатель на перетаскиваемый объект, текущие координаты курсора и др. Получателем событий является тот элемент, на котором в данный момент находится курсор. Обработчик такого события должен сообщить системе, принимает ли данньш элемент управления «посылку» или нет. При отпускании кнопки над принимающим элементом управления генерируется еще одно или два события, в зависимости от готовности приемника.
CancelDrag
Отменяет текущую drag-and-drop или drag-and-dock операцию.
Функция
FindDragTarget
(const
Pos:
TPoint
;AllowDisabled:
Boolean
):
TControl
;
Функция возвращает объект базового класса
TControl
, к которому относится позиция экрана с координатами, определенными параметром Pos. Данная функция используется для определения потенциального получателя drag-and-drop или drag-and-dock операции. Если для указанной позиции не существует никакого оконного средства управления, то функция возвращает
nil
. Параметр AllowDisabled определяет, будут ли учитываться заблокированные (disabled) объекты.
Функция
IsDragObject
(Sender:
TObject
):
Boolean
;
Функция определяет, является ли объект, определенный в параметре Sender, потомком класса
TDragObject
. Данную функцию можно использовать в качестве параметра Source в обработчиках событий OnDragOver и OnDockOver для того, чтобы определить будет ли принят перетаскиваемый объект. Также функцию
IsDragObject
можно использовать в качестве параметра Source в обработчиках событий OnDragDrop и OnDockDrop для того, чтобы правильно интерпретировать перетаскиваемый объект.
Свойства DragMode, DragCursor, методы BeginDrag, OnDragOver, OnDragDrop, OnEndDrag, OnStartDrag, параметр Accept
Процесс перетаскивания с помощью мыши информации из одного объекта в другой широко используется в Widows.Можно перемещать файлы между папками, перемещать сами папки и др.
Все свойства, методы и события, связанные с процессом перетаскивания, определены в классе TControl, являющегося прародителем всех визуальных компонентов Delphi. Поэтому они являются общими для всех компонентов.
Начало перетаскивания определяется свойством DragMode, которое может устанавливаться в процессе проектирования или программно равным dmManual или dmAutomatic. Значение dmAutomatic (автоматическое) определяет автоматическое начало процесса перетаскивания при нажатии пользователем кнопки мыши над компонентом. Однако в этом случае событие OnMouseDown, связанное с нажатием пользователем кнопки мыши, для этого компонента вообще не наступает.
Интерфейс переноса и приема компонентов появился достаточно давно. Он обеспечивает взаимодействие двух элементов управления во время выполнения приложения. При этом могут выполняться любые необходимые операции. Несмотря на простоту реализации и давность разработки, многие программисты (особенно новички) считают этот механизм малопонятным и экзотическим. Тем не менее использование Drag-and-Drop может оказаться очень полезным и простым в реализации. Сейчас мы в этом убедимся.
Для того чтобы механизм заработал, требуется настроить соответствующим образом два элемента управления. Один должен быть источником (Source), второй — приемником (Target). При этом источник никуда не перемещается, а только регистрируется в качестве такового в механизме.
Поверьте, достаточно просто преобразовать X,Y координаты, передаваемые в параметрах событий OnDragOver и OnDragDrop, в координаты формы.
Работайте со свойствами Left и Top компонента, над которым перемещается курсор. Приведу простой пример. Поместите на форму компонент Memo и присвойте свойству Align значение alTop. Поместите на форму панель, также присвойсте свойству Align значение alTop и задайте небольшое значение свойству Height, скажем 6 или 7 пикселей. Установите DragMode на dmAutomatica и DragCursor на crVSplit. Поместите другой Memo-компонент и установите Align на alClient. Одновременно выберите оба Memo-компонента, панель и создайте общий обработчик события OnDragOver как показано ниже:
Где элементы GUI реализованы при помощи псевдографики) при помощи манипулятора «мышь » или сенсорного экрана .
Способ реализуется путём «захвата» (нажатием и удержанием главной (первой
, чаще левой) кнопки мыши) отображаемого на экране компьютера объекта, программно доступного для подобной операции, и перемещении его в другое место (для изменения расположения) либо «бросания» его на другой элемент (для вызова соответствующего, предусмотренного программой, действия). По отношению к окнам (также способным к перемещению подобным способом) данный термин обычно не употребляется.
Базовыми действиями и самыми простыми примерами drag-and-drop действий являются: перемещение объекта, перемещение объекта в из панели в панель, хотя в современных операционных системах drag-and-drop получил широкое применение и является одним из главных способов взаимодействия с компьютером в графическом интерфейсе пользователя.
Объектами для перемещения могут быть следующие элементы интерфейса : значки (иконки) Рабочего стола , плавающие панели инструментов , ярлыки программ в Панели задач (начиная с Win XP), элементы TreeView , текстовая строка, ячейка DataGridView., также элементы OLE . Перемещаться объекты могут как в пределах некоторой определённой области, в пределах одного окна , между панелями одного окна, так и между разными окнами.
Событие перетаскивания должно инициироваться каким-либо действием пользователя. Чаще всего этим действием является нажатие левой кнопки мыши на элементе (событие это называется MouseDown), который может быть перемещен в своем контейнере. Некоторые компоненты обладают собственными событиями начала drag-n-drop — например, TreeView имеет событие ItemDrag.
Wikimedia Foundation
.
2010
.
Смотреть что такое «Drag-and-drop» в других словарях:
Drag and drop
— 〈[ dræg ənd drɔ̣p] n.; ; unz.; EDV〉 das Anklicken eines Objektes, das auf dem Computerbildschirm (in eine andere Datei bzw. an eine andere Stelle) verschoben u. dort wieder losgelassen wird [<engl. drag „ziehen“ + and „und“ + drop „fallen… … Universal-Lexikon
Форма выполнения каких либо действий в графических интерфейсах пользователя, подразумевающая использование компьютерной мыши. В переводе с английского означает буквально: тащи и бросай. Действие выполняется путем оперирования видимыми на экране… … Словарь бизнес-терминов
drag and drop
— (computing) To move an icon, file, etc across the screen using a mouse and release it in a different place (dragˈ and dropˈ adjective) Main Entry: drag … Useful english dictionary
drag and drop
— IT to move something from one area of a computer screen to another using the mouse: »The software allows you to drag and drop elements for the page images, text, etc. anywhere you want. Main Entry: drag … Financial and business terms
drag-and-drop
— UK US verb n.; Gen.: ; Pl.: unz.; EDV〉 das Anklicken eines Objektes, das auf dem Computerbildschirm (in eine andere Datei bzw. an eine andere Stelle) verschoben u. dort wieder losgelassen wird .name. Что делать с полученными данными, определяет разработчик, в данном случае просто формируется список полученных файлов.
После обработки событие блокируется и не распространяется. Это необходимо, чтобы браузер не занимался самодеятельностью и не вмешивался в процесс обработки полученной информации.
DnD и внешние данные
Загрузка изображений на сервер в «drag and drop» — обычная практика применения этой технологии. Как правило, разработчик создает форму для загрузки файла (1), которая работает обычным образом (2). Посетитель может в обычном режиме выбирать файлы и загружать их.
Однако если посетитель на определенное место формы сделает «drag and drop», то поле имени файла (файлов) заполнится автоматически.
Это хорошее решение. Допустить, что на компьютере нет мышки, конечно, очень трудно. Но лучше разработать интерфейс пользователя в обычном варианте и в DnD-реализации.
DnD и внутренние данные
Забота об интересах посетителя всегда важна, но проблемы разработчика также имеют значение. Реализовать «drag and drop» можно не только стандартными средствами, но и посредством обработки событий мышки на элементах страницы.
Задача расчета значений координат тегов и их размеров возникает постоянно. Ручной расчет — хорошая практика, но интерактивный вариант более удобен. Все теги всегда имеют прямоугольную форму и, отслеживая «мышиные» события на сторонах элементов, можно создать возможность автоматического перемещения элементов в нужное место страницы, либо изменения их.
Обработка события нажатия кнопки мышки — запоминание координат места клика, например, одной из сторон элемента. Перемещение мышки — сторона перемещается в нужном направлении. Отпускание кнопки мышки — сторона останавливается, а ее координаты изменяются. Так можно изменить положение элемента или его размер.
Формально это не «drag and drop», но эффект аналогичный и практичный. Сделав универсальные обработчики для любого элемента страницы, можно получить хороший интерактивный результат, ускорить разработку и упростить код.
Визуальное и ручное программирование
Мышка на компьютере и пальцы на смартфоне — совершенно разные подходы к реализации интерфейса пользователя (посетитель, разработчик). Является вполне естественным и современным требование кроссбраузерности.
Все это в совокупности усложняет создание страниц, но применяя идею «drag and drop» в ее стандартной форме, используя ее события, совмещая эту идею с обычными событиями на элементах, можно реализовать механизм, при котором создание страницы будет происходить визуально.
Сейчас давайте рассмотрим выбор элемента или элементов. Факт выбора — появление контекстного меню, например, цель — выравнивание выбранного (слева, справа, по центру), или распределение элементов по вертикали или горизонтали с одинаковым шагом, или изменение их размеров (по минимальному, по максимальному).
Автоматический перерасчет координат и размеров предпочтительнее ручного. Меньше ошибок — быстрее достигается цель. Кроме того, можно сделать станицу в одном браузере, сохранить положение и размеры элементов. Открыв эту страницу на смартфоне, можно поправить значения координат и размеров и запомнить их для конкретной модели смартфона или версии браузера.
Так одна и та же страница без ручного соблюдения требования кроссбраузерности будет иметь различные данные для отображения на различных устройствах и в различных браузерах.
Если позволить посетителю выполнять эти процедуры самостоятельно, а также выбирать нужные элементы страницы из числа предусмотренных разработчиком, можно обеспечить кроссбраузерность и требуемую функциональность страницы с учетом мнения пользователя.
182
В этом примере мы выбираем элемент div и делаем его перемещаемым путем вызова для него метода draggable()
. Как показано на рисунке ниже, в открывшемся документе элемент занимает свою обычную позицию, но после этого его можно переместить с помощью указателя мыши в любое место в окне браузера:
Возможность перетаскивания элементов полезна уже сама по себе, но она приносит еще больше пользы, если применяется в сочетании с взаимодействием Droppable, которое описано далее.
Взаимодействие Draggable реализуется исключительно за счет использования специфической HTML-разметки и CSS-стилей. Это означает, что данная функциональность будет работать практически в любом браузере, но наделенные ею элементы не смогут работать с аналогичными собственными средствами Drag-and-drop операционных систем.
Определяемые спецификацией HTML5 операции Drag-and-drop обычно реализуются с использованием собственных механизмов операционных систем. Если вы используете механизм Drag-and-drop jQuery UI, то во избежание возникновения конфликтных ситуаций эквивалентные средства HTML5 лучше отключить. С этой целью установите для атрибута draggable элемента body документа значение false.
Настройка взаимодействия Draggable
Существует множество опций настройки для взаимодействия Draggable. Наиболее важные свойства, рассмотрению которых посвящены следующие разделы, приведены в таблице ниже:
Свойство | Описание |
---|---|
axis | Ограничивает возможности перемещения определенными направлениями. Значение по умолчанию — false, оно означает отсутствие ограничений, но можно также указать значение «x» (перемещение только вдоль оси X) или «y» (перемещение только вдоль оси Y) |
containment | Ограничивает местоположение перемещаемого элемента определенной областью экрана. Типы поддерживаемых значений описаны в таблице ниже, при рассмотрении соответствующего примера. Значение по умолчанию — false, оно означает отсутствие ограничений |
delay | Определяет время, в течение которого должно осуществляться перетаскивание элемента, прежде чем он переместится. Значение по умолчанию — 0, оно означает отсутствие задержки |
distance | Определяет расстояние, на которое пользователь должен перетащить элемент из его начальной позиции, прежде чем он действительно переместится. Значение по умолчанию — 1 пиксель |
grid | Осуществляет принудительную привязку перемещаемого элемента к ячейкам сетки. Значение по умолчанию — false, оно означает отсутствие привязки |
Ограничение направлений перемещения
Существуют несколько способов, с помощью которых можно ограничить перемещение элемента определенными направлениями. Первый из них заключается в использовании опции axis, позволяющей ограничить направление перемещения осью X или Y. Соответствующий пример приведен ниже:
…
Перетащить по вертикали
Перетащить по горизонтали
Манипуляции с DOM на чистом JavaScript JavaScript DOM
Как правило, когда нужно выполнить какие-либо действия с DOM, разработчики используют jQuery. Однако практически любую манипуляцию с DOM можно сделать и на чистом JavaScript с помощью его DOM API.
Рассмотрим этот API более подробно:
В конце вы напишете свою простенькую DOM-библиотеку, которую можно будет использовать в любом проекте.
DOM-запросы
В материале представлены основы JavaScript DOM API. Все подробности и детали доступны на Mozilla Developer Network.
DOM-запросы осуществляются с помощью метода .querySelector()
, который в качестве аргумента принимает произвольный СSS-селектор.
const myElement = document.querySelector('#foo > div.bar')
Он вернёт первый подходящий элемент. Можно и наоборот — проверить, соответствует ли элемент селектору:
myElement.matches('div.bar') === true
Если нужно получить все элементы, соответствующие селектору, используйте следующую конструкцию:
const myElements = document.querySelectorAll('.bar')
Если же вы знаете, на какой родительский элемент нужно сослаться, можете просто проводить поиск среди его дочерних элементов, вместо того чтобы искать по всему коду:
const myChildElemet = myElement.querySelector('input[type="submit"]')
// Вместо:
// document.querySelector('#foo > div.bar input[type="submit"]')
Возникает вопрос: зачем тогда использовать другие, менее удобные методы вроде .getElementsByTagName()
? Есть маленькая проблема — результат вывода .querySelector()
не обновляется, и когда мы добавим новый элемент (смотрите раздел 5), он не изменится.
const elements1 = document.querySelectorAll('div')
const elements2 = document.getElementsByTagName('div')
const newElement = document.createElement('div')
document.body.appendChild(newElement)
elements1.length === elements2.length // false
Также querySelectorAll()
собирает всё в один список, что делает его не очень эффективным.
Как работать со списками?
Вдобавок ко всему у .querySelectorAll()
есть два маленьких нюанса. Вы не можете просто вызывать методы на результаты и ожидать, что они применятся к каждому из них (как вы могли привыкнуть делать это с jQuery). В любом случае нужно будет перебирать все элементы в цикле. Второе — возвращаемый объект является списком элементов, а не массивом. Следовательно, методы массивов не сработают. Конечно, есть методы и для списков, что-то вроде .forEach()
, но, увы, они подходят не для всех случаев. Так что лучше преобразовать список в массив:
// Использование Array.from()
Array.from(myElements).forEach(doSomethingWithEachElement)
// Или прототип массива (до ES6)
Array.prototype.forEach.call(myElements, doSomethingWithEachElement)
// Проще:
[].forEach.call(myElements, doSomethingWithEachElement)
У каждого элемента есть некоторые свойства, ссылающиеся на «семью».
myElement.children
myElement.firstElementChild
myElement.lastElementChild
myElement.previousElementSibling
myElement.nextElementSibling
Поскольку интерфейс элемента (Element
) унаследован от интерфейса узла (Node
), следующие свойства тоже присутствуют:
myElement.childNodes
myElement.firstChild
myElement.lastChild
myElement.previousSibling
myElement.nextSibling
myElement.parentNode
myElement.parentElement
Первые свойства ссылаются на элемент, а последние (за исключением .parentElement
) могут быть списками элементов любого типа. Соответственно, можно проверить и тип элемента:
myElement.firstChild.nodeType === 3 // этот элемент будет текстовым узлом
Добавление классов и атрибутов
Добавить новый класс очень просто:
myElement.classList.add('foo')
myElement.classList.remove('bar')
myElement.classList.toggle('baz')
Добавление свойства для элемента происходит точно так же, как и для любого объекта:
// Получение значения атрибута
const value = myElement.value
// Установка атрибута в качестве свойства элемента
myElement.value = 'foo'
// Для установки нескольких свойств используйте .Object.assign()
Object.assign(myElement, {
value: 'foo',
id: 'bar'
})
// Удаление атрибута
myElement.value = null
Можно использовать методы .getAttibute()
, .setAttribute()
и .removeAttribute()
. Они сразу же поменяют HTML-атрибуты элемента (в отличие от DOM-свойств), что вызовет браузерную перерисовку (вы сможете увидеть все изменения, изучив элемент с помощью инструментов разработчика в браузере). Такие перерисовки не только требуют больше ресурсов, чем установка DOM-свойств, но и могут привести к непредвиденным ошибкам.
Хакатон «Финансы, Банкинг, Страхование»
3–5 сентября, Москва, Санкт-Петербург, Екатеринбург, Нижний Новгород, Волгоград, Саратов, Новосибирск, Уфа, Великий Новгород, Беcплатно
tproger.ru
Как правило, их используют для элементов, у которых нет соответствующих DOM-свойств, например colspan
. Или же если их использование действительно необходимо, например для HTML-свойств при наследовании (смотрите раздел 9).
Добавление CSS-стилей
Добавляют их точно так же, как и другие свойства:
myElement.style.marginLeft = '2em'
Какие-то определённые свойства можно задавать используя .style
, но если вы хотите получить значения после некоторых вычислений, то лучше использовать window.getComputedStyle()
. Этот метод получает элемент и возвращает CSSStyleDeclaration, содержащий стили как самого элемента, так и его родителя:
window.getComputedStyle(myElement).getPropertyValue('margin-left')
Изменение DOM
Можно перемещать элементы:
// Добавление element1 как последнего дочернего элемента element2
element1.appendChild(element2)
// Вставка element2 как дочернего элемента element1 перед element3
element1.insertBefore(element2, element3)
Если не хочется перемещать, но нужно вставить копию, используем:
// Создание клона
const myElementClone = myElement.cloneNode()
myParentElement.appendChild(myElementClone)
Метод .cloneNode()
принимает булевое значение в качестве аргумента, при true
также клонируются и дочерние элементы.
Конечно, вы можете создавать новые элементы:
const myNewElement = document.createElement('div')
const myNewTextNode = document.createTextNode('some text')
А затем вставлять их как было показано выше. Удалить элемент напрямую не получится, но можно сделать это через родительский элемент:
myParentElement.removeChild(myElement)
Можно обратиться и косвенно:
myElement.parentNode.removeChild(myElement)
Методы для элементов
У каждого элемента присутствуют такие свойства, как .innerHTML
и .textContent
, они содержат HTML-код и, соответственно, сам текст. В следующем примере изменяется содержимое элемента:
// Изменяем HTML
myElement.innerHTML = `
<div>
<h3>New content</h3
<p>beep boop beep boop</p>
</div>
`
// Таким образом содержимое удаляется
myElement.innerHTML = null
// Добавляем к HTML
myElement.innerHTML += `
<a href="foo.html">continue reading...</a>
<hr/>
На самом деле изменение HTML — плохая идея, т. к. теряются все изменения, которые были сделаны ранее, а также перегружаются обработчики событий. Лучше использовать такой способ только полностью отбросив весь HTML и заменив его копией с сервера. Вот так:
const link = document.createElement('a')
const text = document.createTextNode('continue reading...')
const hr = document.createElement('hr')
link.href = 'foo.html'
link.appendChild(text)
myElement.appendChild(link)
myElement.appendChild(hr)
Однако это повлечёт за собой две перерисовки в браузере, в то время как .innerHTML
приведёт только к одной. Обойти это можно, если сначала добавить всё в DocumentFragment, а затем добавить нужный вам фрагмент:
const fragment = document.createDocumentFragment()
fragment.appendChild(text)
fragment.appendChild(hr)
myElement.appendChild(fragment)
Обработчики событий
Один из самых простых обработчиков:
myElement.onclick = function onclick (event) {
console.log(event.type + ' got fired')
}
Но, как правило, его следует избегать. Здесь .onclick
— свойство элемента, и по идее вы можете его изменить, но вы не сможете добавлять другие обработчики используя ещё одну функцию, ссылающуюся на старую.
Для добавления обработчиков лучше использовать .addEventListener()
. Он принимает три аргумента: тип события, функцию, которая будет вызываться всякий раз при срабатывании, и объект конфигурации (к нему мы вернёмся позже).
myElement.addEventListener('click', function (event) {
console.log(event.type + ' got fired')
})
myElement.addEventListener('click', function (event) {
console.log(event.type + ' got fired again')
})
Свойство event.target
обращается к элементу, за которым закреплено событие.
А так вы сможете получить доступ ко всем свойствам:
// Свойство `forms` — массив, содержащий ссылки на все формы
const myForm = document.forms[0]
const myInputElements = myForm.querySelectorAll('input')
Array.from(myInputElements).forEach(el => {
el.addEventListener('change', function (event) {
console.log(event.target.value)
})
})
Предотвращение действий по умолчанию
Для этого используется метод .preventDefault()
, который блокирует стандартные действия. Например, он заблокирует отправку формы, если авторизация на клиентской стороне не была успешной:
myForm.addEventListener('submit', function (event) {
const name = this.querySelector('#name')
if (name.value === 'Donald Duck') {
alert('You gotta be kidding!')
event.preventDefault()
}
})
Метод .stopPropagation()
поможет, если у вас есть определённый обработчик события, закреплённый за дочерним элементом, и второй обработчик того же события, закреплённый за родителем.
Как говорилось ранее, метод .addEventListener()
принимает третий необязательный аргумент в виде объекта с конфигурацией. Этот объект должен содержать любые из следующих булевых свойств (по умолчанию все в значении false
):
- capture: событие будет прикреплено к этому элементу перед любым другим элементом ниже в DOM;
- once: событие может быть закреплено лишь единожды;
- passive:
event.preventDefault()
будет игнорироваться (исключение во время ошибки).
Наиболее распространённым свойством является .capture
, и оно настолько распространено, что для этого существует краткий способ записи: вместо того чтобы передавать его в объекте конфигурации, просто укажите его значение здесь:
myElement.addEventListener(type, listener, true)
Обработчики удаляются с помощью метода .removeEventListener()
, принимающего два аргумента: тип события и ссылку на обработчик для удаления. Например свойство once
можно реализовать так:
myElement.addEventListener('change', function listener (event) {
console.log(event.type + ' got triggered on ' + this)
this.removeEventListener('change', listener)
})
Наследование
Допустим, у вас есть элемент и вы хотите добавить обработчик событий для всех его дочерних элементов. Тогда бы вам пришлось прогнать их в цикле, используя метод myForm.querySelectorAll('input')
, как было показано выше. Однако вы можете просто добавить элементы в форму и проверить их содержимое с помощью event.target
.
myForm.addEventListener('change', function (event) {
const target = event.target
if (target.matches('input')) {
console.log(target.value)
}
})
И ещё один плюс данного метода заключается в том, что к новым дочерним элементам обработчик будет привязываться автоматически.
Анимация
Проще всего добавить анимацию используя CSS со свойством transition
. Но для большей гибкости (например для игры) лучше подходит JavaScript.
Вызывать метод window.setTimeout()
, пока анимация не закончится, — не лучшая идея, так как ваше приложение может зависнуть, особенно на мобильных устройствах. Лучше использовать window.requestAnimationFrame()
для сохранения всех изменений до следующей перерисовки. Он принимает функцию в качестве аргумента, которая в свою очередь получает метку времени:
const start = window.performance.now()
const duration = 2000
window.requestAnimationFrame(function fadeIn (now)) {
const progress = now - start
myElement.style.opacity = progress / duration
if (progress < duration) {
window.requestAnimationFrame(fadeIn)
}
}
Таким способом достигается очень плавная анимация. В своей статье Марк Браун рассуждает на данную тему.
Пишем свою библиотеку
Тот факт, что в DOM для выполнения каких-либо операций с элементами всё время приходится перебирать их, может показаться весьма утомительным по сравнению с синтаксисом jQuery $('.foo').css({color: 'red'})
. Но почему бы не написать несколько своих методов, облегчающую данную задачу?
const $ = function $ (selector, context = document) {
const elements = Array.from(context.querySelectorAll(selector))
return {
elements,
html (newHtml) {
this.elements.forEach(element => {
element.innerHTML = newHtml
})
return this
},
css (newCss) {
this.elements.forEach(element => {
Object.assign(element.style, newCss)
})
return this
},
on (event, handler, options) {
this.elements.forEach(element => {
element.addEventListener(event, handler, options)
})
return this
}
}
}
Теперь у вас есть своя маленькая библиотека, в которой находится всё, что вам нужно.
Здесь находится ещё много таких помощников.
Пример использования
Заключение
Теперь вы знаете, что для реализации простого модального окна или навигационного меню не обязательно прибегать к помощи сторонних фреймворков. Ведь в DOM API это уже всё есть, но, конечно, у данной технологии есть и свои минусы. Например всегда приходится вручную обрабатывать списки элементов, в то время как в jQuery это происходит по щелчку пальцев.
Перевод статьи «The Basics of DOM Manipulation in Vanilla JavaScript (No jQuery)»
Element.animate () — веб-API | MDN
Элемент
интерфейса animate () метод
— это метод быстрого доступа, который создает новую Анимацию
, применяет ее к
элемент, затем воспроизводит анимацию. Возвращает созданный Animation
экземпляр объекта.
Примечание. К элементам можно применить несколько анимаций. Вы можете получить список
анимации, которые влияют на элемент, вызывая Element.getAnimations ()
.
var animation = element.animate (ключевые кадры, параметры);
Параметры
-
ключевых кадров
Либо массив объектов ключевого кадра, или объект ключевого кадра,
Свойства — это массивы значений, которые нужно перебирать. См. Ключевой кадр
Форматы для более подробной информации.-
варианты
- Либо целое число , представляющее продолжительность анимации (в
миллисекунды), или Объект, содержащий один или несколько таймингов
недвижимость: -
id Дополнительно
- Свойство, уникальное для
animate ()
:DOMString
для ссылки на анимацию.
-
задержка
Дополнительно - Количество миллисекунд для задержки начала анимации. По умолчанию 0.
-
направление
Дополнительно - Идет ли анимация вперед (
нормальный
), назад (обратный
), переключает направление после каждой итерации (альтернативно
) или идет назад и меняет направление после каждой итерации (альтернативно-обратное
). По умолчанию«нормальный»
. -
продолжительность
Дополнительно - Количество миллисекунд, необходимое для завершения каждой итерации анимации. По умолчанию 0. Хотя это технически необязательно, имейте в виду, что ваша анимация не будет запускаться, если это значение равно 0.
-
easing
Дополнительно - Скорость изменения анимации с течением времени. Принимает предопределенные значения
«линейный»
,«легкость»
,«легкость входа»
,«легкость выхода»
и«легкость входа»
или пользовательский. кубик Безье "
значение как" кубик Безье (0.42, 0, 0,58, 1) "
. По умолчанию" линейный "
. -
endDelay
Дополнительно - Количество миллисекунд задержки после окончания анимации. Это в первую очередь используется при создании последовательности анимаций на основе времени окончания другой анимации. По умолчанию 0.
-
заполнить
Дополнительно - Указывает, должны ли эффекты анимации отражаться элементом (ами) до воспроизведения (
«назад»,
), сохраняться после завершения воспроизведения анимации («вперед»
), илиоба
.По умолчанию«нет»
. -
итерация Старт
Необязательно - Описывает, в какой момент итерации должна начинаться анимация. 0,5 будет означать начало на полпути через первую итерацию, например, и с этим установленным значением анимация с 2 итерациями будет заканчиваться на полпути через третью итерацию. По умолчанию 0,0.
-
итераций
Дополнительно - Количество повторов анимации. По умолчанию
1
, а также может принимать значениеInfinity
, чтобы оно повторялось, пока существует элемент.
-
Вы также можете включить составную операцию или составную операцию итерации в свой
список опций:
-
композитный Дополнительно
- Определяет, как значения объединяются между этой анимацией и другими, отдельными
анимации, которые не определяют свою собственную конкретную составную операцию. По умолчанию
заменяет
.-
add
диктует аддитивный эффект, при котором каждая последующая итерация
строится на последнем.Например, с преобразованием
translateX (-200px)
не отменяет более раннюю
повернуть (20deg) значение
, но результат
translateX (-200px) rotate (20deg)
. -
Накопить
аналогично, но немного умнее:размытие (2)
иразмытия (5)
становится размытием(7)
, а не
размытие (2) размытие (5)
. -
заменить
перезаписывает предыдущее значение новым.
-
-
итерация Композитный Необязательно
- Определяет, как значения строятся от итерации к итерации в этой анимации. Может быть
установить нанакопить
илизаменить
(см. выше). По умолчанию
назаменить
.
Возвращаемое значение
В демонстрации Вниз по
Rabbit Hole (с API веб-анимации) мы используем удобный
animate ()
для немедленного создания и воспроизведения анимации на
#tunnel
элемент, чтобы заставить его течь вверх бесконечно.Обратите внимание на массив
объекты, переданные как ключевые кадры, а также блок параметров синхронизации.
document.getElementById ("туннель"). Animate ([
{transform: 'translateY (0px)'},
{transform: 'translateY (-300px)'}
], {
продолжительность: 1000,
итерации: Бесконечность
});
Неявно в / из ключевых кадров
В более новых версиях браузера вы можете установить начальное или конечное состояние для
только анимацию (т.е. один ключевой кадр), и браузер определит другой конец
анимация, если есть возможность.Например, рассмотрим это
простая анимация — объект Keyframe выглядит так:
пусть rotate360 = [
{преобразование: 'поворот (360 градусов)'}
];
Мы указали только конечное состояние анимации, а начальное состояние —
подразумевается.
Таблицы BCD загружаются только в браузер.
Функции jQuery для перемещения элементов вверх и вниз. · GitHub
jQuery-функции для перемещения элементов вверх и вниз. · GitHub
Мгновенно делитесь кодом, заметками и фрагментами.
Функции jQuery для перемещения элементов вверх и вниз.
/ * http://stackoverflow.com/questions/11098257/jquery-move-dom-element-inside-parent * / | |
$ .fn.moveUp = функция () { | |
$.каждый (это, функция () { | |
$ (это) .after ($ (это) .prev ()); | |
}); | |
}; | |
$ .fn.moveDown = функция () { | |
$ .each (this, function () { | |
$ (это) .before ($ (this) .next ()); | |
}); | |
}; | |
$ («div: eq (2)»).moveUp (); // Переместим привет 3 вверх на | |
$ («div: eq (0)»). MoveDown (); // Переместил бы hello 1 вниз |
Вы не можете выполнить это действие в настоящее время.
Вы вошли в систему с другой вкладкой или окном. Перезагрузите, чтобы обновить сеанс.
Вы вышли из системы на другой вкладке или в другом окне. Перезагрузите, чтобы обновить сеанс.
jQuery против JavaScript: уход от jQuery
Мэтт Мьютон, Front-End разработчик
С момента своего создания в 2006 году jQuery стала одной из самых популярных библиотек JavaScript.Фактически, это стало настолько популярным, что некоторые разработчики учатся писать сценарии на jQuery, прежде чем научатся писать аналогичные команды на JavaScript. Одна из основных причин этого — простой синтаксис библиотеки, благодаря которому ее относительно легко освоить. Кроме того, преимущества библиотеки подключаемых модулей jQuery могут ускорить время разработки, позволяя разработчикам повторно использовать существующие идеи и писать минимальный собственный код. Однако в последнее время я все меньше и меньше полагаюсь на jQuery в наших проектах.Вот несколько причин, по которым я думаю, что это происходит:
Манипуляции с DOM
Недавно я столкнулся с загадкой, работая над проектом RSR. Я использую элемент jQuery или элемент объектной модели документа? После долгих споров я обнаружил, что использование DOM намного проще и эффективнее. Моя проблема заключалась в том, что мне нужен был способ получить все элементы класса, найти идентификатор каждого из этих элементов и выполнить итерацию по ним соответственно для выполнения действия.
Если бы я использовал jQuery, я мог бы попробовать сделать что-нибудь вроде «$ (‘ body ’).find (‘. foo’). » Эта строка кода создает элемент jQuery, но это не совсем то, что мне нужно. После того, как элемент был преобразован как элемент jQuery, он теряет доступ к некоторым свойствам и методам DOM. Это означает, что мне может потребоваться написать дополнительные методы и функции через jQuery, чтобы обойти тот факт, что у нас больше нет доступа к базовому элементу DOM. Это может сделать наш код более раздутым и, в некоторых случаях, его труднее читать и поддерживать.
Если мы напишем «var element = document.getElementsByClassName (‘ foo ’)», а затем вызовем «element», мы получим четыре элемента DOM.Затем мы можем использовать цикл JavaScript «for» для перебора каждого объекта и получения идентификатора примерно так: «element.id». Просто, эффективно и легко получить контроль над элементами, которыми мы хотим манипулировать.
Преимущества кроссбраузерности
Хотя одним из преимуществ jQuery является кроссбраузерная стандартизация, у него нет ответа на все вопросы. Предположим, я хочу отключить кнопку формы. «$ (‘ Button ’). Attr (‘ disabled, ‘disabled’) »работает не во всех браузерах; но «документ.
Переходы CSS3
Еще два или три года назад много интерактивной веб-анимации выполнялось с помощью различных команд jQuery.Такие методы, как «slideDown», «animate» и другие стали повсеместными, и какое-то время это было одним из основных применений библиотеки jQuery. Теперь язык CSS эволюционировал, чтобы обеспечить большую гибкость при создании этих типов анимации, и большинство современных браузеров начали включать эти новые свойства CSS3. Теперь меньше причин использовать jQuery для анимации меню вверх и вниз, например, когда то же самое можно сделать в файле CSS. Поскольку переходы CSS3 уже очень популярны, я подозреваю, что это не займет много времени, пока подавляющее большинство интерфейсных разработчиков не будет полагаться исключительно на CSS3 вместо jQuery для простых анимаций и эффектов.
Это, очевидно, небольшие примеры, и здесь есть много концепций, которые можно изучить дальше. Пока я сохраню jQuery, мне нравится работать с чистым JavaScript. Мало того, что мой код стал более эффективным, я больше узнаю о браузерах и лучше понимаю суть языка. Я возьму обоснованное предположение и скажу, что это только поможет мне в развитии моих навыков по мере продвижения вперед. Поэтому в следующий раз, когда вы обнаружите, что используете селектор jQuery, выполните быстрый поиск его эквивалента в JavaScript.Вы, наверное, будете рады, что сделали.
Перемещение вещей с помощью Javascript — Learn.co
Перемещение вещей с помощью JavaScript
- Объясните, как обновить позицию элемента на странице
- Попрактикуйтесь в обновлении позиции элемента на странице
- Попрактикуйтесь в перемещении элемента в ответ на событие браузера
Введение
Вспомните первую видеоигру, в которую вы играли. (Если вы никогда не играли в видеоигры, попробуйте эту.)
Наверное, было завораживающе думать о том, как работает игра. Он отвечал на ваши прихоти с помощью набора понятных и простых в использовании взаимодействий. Он втянул вас в свою историю, дав вам окно в свой мир и способ взаимодействия с этим миром — даже его формирования.
Программирование означает, что вы можете создать такой мир для других людей. Конечно, пройдет некоторое время, прежде чем вы будете готовы создать что-то вроде Braid или даже Don’t Look Back, но мы можем начать с небольших шагов.Давайте узнаем, как перемещать объекты на странице.
Обновление позиции элемента
Откройте index.html
в своем любимом браузере (мы будем использовать Chrome). Откройте консоль, и давайте разберемся с тем, что мы называем «ловкачом»:
var dodger = document.getElementById ('ловкач')
Отлично. Теперь изменим его цвет:
dodger.style.backgroundColor = "# 000000"
Эй, куда оно делось? Итак, мы изменили цвет на «# 000000», что является другим способом сказать «черный».Так что он просто сливается с фоном.
Давайте изменим его на что-нибудь более заметное.
dodger.style.backgroundColor = '# FF69B4'
Отлично.
Что мы здесь делали? Итак, мы получили доступ к свойству style
элемента dodger
. Это позволяет нам изменять такие вещи, как backgroundColor
, высоту
, ширину
и т. Д.
Оказывается, мы также можем изменить положение элемента на странице.
Для начала давайте зачитаем координаты элемента — мы будем читать их так, как если бы нижний левый угол черного ящика находился в координате (0, 0).
dodger.style.left // "180px"
dodger.style.bottom // "0px"
Итак, нижний левый край плутовки в настоящее время находится на (180, 0). (Имейте в виду, что эти координаты относятся к черному ящику.)
Начнем с перемещения элемента вверх.
dodger.style.bottom = '100px'
Ух ты!
Обратите внимание на раздражающую вещь в этом: хотя мы говорим о числовых координатах , нам нужно переместить ловкач, присвоив ему другую строку.Вернемся туда, откуда мы начали:
dodger.style.bottom = '0px'
Так лучше.
Перемещение в ответ на событие
Помните слушателей событий? Оказывается, мы можем использовать их, чтобы отреагировать на событие и переместить ловкача.
Допустим, мы хотим переместить ловкача влево. Сначала мы должны определить числовое значение клавиши со стрелкой влево. Мы могли бы найти его, но мы программисты — давайте изучим!
документ.addEventListener ('keydown', function (e) {
console.log (например)
})
Введя вышеизложенное в нашу консоль, если мы теперь щелкнем по окну (где визуализируется ловкач) и нажмем клавишу со стрелкой влево, мы должны увидеть в нашей консоли:
(не волнуйтесь, если вы видите только 37
:)).
Круто, поэтому мы знаем, что нам нужно искать 37
, чтобы вызвать движение влево. Тогда давайте начнем двигаться налево:
document.addEventListener ('keydown', function (e) {
если (е.который === 37) {
var leftNumbers = dodger.style.left.replace ('px', '')
var left = parseInt (leftNumbers, 10)
dodger.style.left = `$ {left - 1} px`
}
})
Так что мы здесь делаем? Что ж, если мы поймем клавишу со стрелкой влево вниз, мы переместим ловкача на 1 пиксель влево. (Мы должны проанализировать пиксели как целые числа, а затем преобразовать их обратно в строку пикселей.) В противном случае (если это не клавиша со стрелкой влево), мы выполняем zilch.
Но вы заметите, что, несмотря на то, что в настоящее время мы движемся по одному пикселю за раз, в конечном итоге наш ловкач исчезнет (ну, условно говоря) прямо из поля зрения.
Как мы можем этого предотвратить? Что ж, мы хотим проверить, где находится левый край обвеса, и мы хотим предотвратить его выход за левый край черного экрана.
Вроде пора выделить движение ловкача в отдельную функцию. Во-первых, давайте обновим страницу и код с чистого листа.
Тогда давай снова возьмем ловкач
var dodger = document.getElementById ('ловкач')
и работайте над этой функцией:
function moveDodgerLeft () {
var leftNumbers = ловкач.style.left.replace ('пикс', '')
var left = parseInt (leftNumbers, 10)
if (left> 0) {
dodger.style.left = `$ {left - 1} px`
}
}
По сути, мы делаем то же самое, что и выше, но сначала проверяем, что левый край ловкача не выходит за левый край его контейнера. (Помните, положение относительно контейнера.)
Давайте подключим это
document.addEventListener ('keydown', function (e) {
if (e.which === 37) {
moveDodgerLeft ()
}
})
Теперь попробуйте переместить плут за левый край.Нет, ничего не поделаешь!
Ваша очередь!
Хотя это не тестировалось, и это было задумано как код вместе, мы еще не реализовали перемещение ловкача вправо. Ты можешь сделать это?
Подумайте, что нужно изменить, чтобы сделать moveDodgerRight () функцией
. Нам понадобится еще e., а это
в прослушивателе событий, и вместо того, чтобы перемещать плут $ {left - 1} px
, мы будем перемещать его на $ {left + 1} px
(или $). {справа - 1} пикс.
, если хотите).Чтобы плут не ускользнул с правой стороны, вы можете убедиться, что dodger.style.right
всегда больше, чем 0px
.
ресурсов
js Dom и jquery для перемещения содержимого формы около
js Dom и jquery для перемещения содержимого формы вокруг
Двигаться влево и вправо // Создание клона
const myElementClone = myElement.cloneNode()
myParentElement.appendChild(myElementClone)
Двигаться влево и вправо const myNewElement = document.createElement('div')
const myNewTextNode = document.createTextNode('some text')
<script>
function dragstart_handler(ev) {
ev.dataTransfer.setData("text/plain", ev.target.id);
}
window.addEventListener('DOMContentLoaded', () => {
const element = document.getElementById("p1");
element.addEventListener("dragstart", dragstart_handler);
});
</script>
<p draggable="true">Данный элемент является перетаскиваемым. </p>
Здесь нет ничего важного, просто обратите внимание на метод добавления — это перемещение элемента
вместо использования метода добавления
Вначале я использовал добавление
и обнаружил, что можно перемещать только значение.Если вы удалите его после перемещения, вы должны написать метод.
Тогда его нельзя будет удалить, если он будет перемещен в обратном направлении;
У учителя нет возможности использовать эти два метода, есть два совершенно разных метода выше
Создание анимации на основе прокрутки с использованием jQuery и CSS3
Создание движения — отличный способ обеспечить интересный и интерактивный опыт для ваших зрителей. Поскольку современные сайты обеспечивают большую интерактивность, все чаще ожидается, что даже простые веб-сайты будут предлагать определенный уровень анимации / движения для привлечения посетителей.
Сегодня я опишу технику, которую вы можете адаптировать к своим веб-проектам — запуск анимации при прокрутке в заранее заданную область. Эти анимации будут созданы с использованием преобразований CSS и переходов CSS. Мы также будем использовать jQuery, чтобы определять, когда элементы видны, и добавлять / удалять соответствующие классы.
Для тех, кто хочет увидеть примеры этого в действии, вы можете сразу перейти к демонстрациям.
Зачем запускать анимацию при прокрутке?
Основная причина, по которой мы хотели бы запускать анимацию при прокрутке, состоит в том, чтобы они активировались так же, как пользователь прокручивает элемент в поле зрения.
Нам может потребоваться постепенное появление элементов или предоставление интересного преобразования, и это будет иметь смысл только тогда, когда пользователь действительно может их просмотреть.
Анимация с помощью CSS или jQuery?
У каждого подхода есть свои плюсы и минусы. jQuery (читайте JavaScript) позволяет вам анимировать вещи, которых нет в CSS (например, позицию прокрутки или атрибуты элемента), в то время как CSS-анимация может быть очень привлекательной для разработчиков, которые предпочитают помещать всю свою анимацию и логику представления в CSS. слой.
Я буду использовать преобразования через CSS, однако всегда есть переменные, которые следует учитывать в зависимости от вашей ситуации. Я бы принял во внимание следующие факторы:
Совместимость с браузером
Поскольку наше решение будет основано на преобразованиях, совместимость наших браузеров будет ограничена теми, которые поддерживают либо 2D-преобразования, либо 3D-преобразования.
Все современные браузеры будут поддерживать 3D-преобразования и некоторые старые устаревшие браузеры, такие как Internet Explorer 9 и Opera 11.5 будет поддерживать 2D-преобразования. Общая поддержка как настольных, так и мобильных браузеров является всесторонней.
Метод анимации
jQuery работает в любом (нормальном) браузере при условии, что вы используете версию библиотеки 1.X. В jQuery 2.X удалена поддержка IE8 и ниже, поэтому используйте это только в том случае, если вам не нужно поддерживать устаревшие браузеры (удачно вам!).
Скорость
Нам нужна быстрая и плавная анимация, особенно когда речь идет о мобильных устройствах. Таким образом, всегда лучше использовать переходы и преобразования, где это возможно.
В примерах будут использоваться 3D-преобразования с 2D-откатом для старых браузеров. Мы хотим принудительно использовать аппаратное ускорение для повышения скорости, поэтому 3D-преобразование является обязательным (мы будем использовать translate3d
вместе с другими функциями, которые вызывают рендеринг с ускорением на GPU).
Метод jQuery animate
значительно медленнее, чем преобразование с помощью графического процессора, поэтому мы будем использовать jQuery только для обработки / вычислений событий, а не для самой анимации (поскольку мы хотим, чтобы они были как можно более плавными).
Боковое примечание
Все мы знаем, что jQuery! == JavaScript
, верно? Что ж, оказывается, использование ванильного JS для анимации может быть не такой уж плохой идеей. Хотя это выходит за рамки данного руководства, вот две отличные статьи на эту тему для тех, кто хочет узнать больше:
А теперь вернемся к спектаклю…
Обнаружение элементов анимации на виде
Общая цель этой техники состоит в том, чтобы просмотреть все наши элементы, которые мы пометили как анимированные, а затем определить, находятся ли они в настоящее время в области просмотра.Давайте рассмотрим, как этого добиться:
Кэширование селектора
Прокрутка — дело дорогое. Если вы прикрепите прослушиватель событий к событию scroll
, он будет срабатывать много раз всякий раз, когда пользователь прокручивает страницу. Поскольку мы будем вызывать наши функции измерения / вычисления всякий раз, когда пользователь прокручивает, рекомендуется хранить элементы, возвращаемые нашими селекторами, в переменных. Это называется кэшированием селектора и позволяет нам не запрашивать DOM снова и снова.
В нашем скрипте мы будем ссылаться как на объект window
, так и на коллекцию элементов, которые мы хотим анимировать.
var $ animation_elements = $ ('. элемент-анимации');
var $ window = $ (окно);
Обратите внимание на знак доллара перед переменными. Это соглашение, указывающее, что они содержат объект jQuery или коллекцию объектов.
Подключение к событию прокрутки
Затем мы создаем обработчик событий, который прослушивает событие scroll
.Это сработает, когда мы прокручиваем страницу. Мы передаем ему ссылку на нашу функцию check_if_in_view
(к которой мы вернемся через минуту). Эта функция будет выполняться каждый раз, когда запускается событие прокрутки.
$ window.on ('прокрутка', check_if_in_view);
Обработка изменения размера
Поскольку мы вычисляем высоту и ширину, нам необходимо учитывать изменения ориентации наряду с общим изменением размера.
Мы можем обновить наш обработчик событий для прослушивания событий scroll
и resize
.Это позволит нашей функции обнаружения работать, когда мы изменяем размер или ориентацию.
$ window.on ('изменение размера прокрутки', check_if_in_view);
Кроме того, мы также используем метод jQuery trigger
для запуска события scroll
, как только DOM будет готов. Мы делаем это так, чтобы, если какой-либо из элементов, которые должны быть анимированы, находятся в области просмотра, они будут обнаружены как видимые, а анимация будет применена, как если бы мы прокручивали.
$ окошко.триггер ('прокрутка');
Обнаружение положения прокрутки
Фактическая часть обнаружения в этом примере исходит из следующего сценария.
function check_if_in_view () {
var window_height = $ window.height ();
var window_top_position = $ window.scrollTop ();
var window_bottom_position = (window_top_position + window_height);
$ .each ($ animation_elements, function () {
var $ element = $ (это);
var element_height = $ element.outerHeight ();
var element_top_position = $ element.смещение (). верх;
var element_bottom_position = (element_top_position + element_height);
if ((нижнее_элементное положение> = верхнее_окно) &&
(element_top_position <= window_bottom_position)) {
$ element.addClass ('в поле зрения');
} еще {
$ element.removeClass ('в поле зрения');
}
});
}
Давайте разберемся, что здесь происходит.
Функция check_if_in_view
вызывается сначала, когда DOM готова, а затем каждый раз, когда мы изменяем размер или прокручиваем.
Мы получаем текущую высоту окна вместе с его верхним и нижним положением, поэтому мы знаем, на какую область мы смотрим.
Мы просматриваем и ищем все элементы, в которых будет выполняться анимация (сохранены в переменной $ animation_elements
). Для каждого из этих элементов мы собираем его высоту вместе с его верхним и нижним положением (чтобы мы знали, где он находится на странице).
Мы сравниваем каждый элемент, чтобы увидеть, не превышает ли его нижнее положение верхнее положение окна, а также то, что верхнее положение элемента меньше нижнего положения окна.
Вот наглядный пример
Расчет высоты и ширины
В нашей функции обнаружения нам нужно получить высоту и положение различных элементов для правильного расчета. Именно здесь мы использовали функции jQuery height
. Важно получить подробную информацию о том, как работают эти функции высоты.
высота () и ширина ()
Функции height ()
и width ()
возвращают высоту или ширину элемента.Они исключают все отступы, границы и поля.
Для полной разбивки обратитесь к документации по высоте или ширине.
innerHeight () и innerWidth ()
Функции innerHeight ()
и innerWidth ()
возвращают высоту или ширину элемента, включая его дополнительное заполнение (однако оно исключает как границы, так и поля)
Для полной разбивки посетите документацию innerHeight или innerWidth.
outerHeight () и outerWidth ()
Функции outerHeight ()
и outerWidth ()
возвращают высоту или ширину элемента и включают его отступ и границу.
Кроме того, вы также можете указать включение его полей, передав в функцию значение true
.
Для полной разбивки обратитесь к документации outerHeight или outerWidth
Ниже приведены серии анимаций, в которых используются основы того, что мы обсуждали. Эти примеры будут искать элементы анимации и применять активный класс in-view
, когда они находятся в области просмотра.
Элементы, которые вы хотите переместить, должны иметь стандартный класс, такой как animation-element
, который устанавливает свое положение как относительное или абсолютное.Кроме того, если вы собираетесь создать несколько эффектов, вы можете создать соответствующие классы, такие как slide-left
, которые можно комбинировать с классом in-view
. Затем вы должны применить преобразование к классу, например animation-element.slide-left.inview
Вставить слева
В нашем первом примере мы будем сдвигать элементы слева, когда они входят в область просмотра. Мы достигаем этого, используя translate3d
на оси x наших элементов.
См. CSS-анимацию пера при прокрутке - вставьте слева от SitePoint (@SitePoint) на CodePen.
В этом примере мы использовали его для отображения профилей сотрудников, но вы можете повторно использовать ту же функциональность для вставки любых элементов, которые вам нужны.
Переход снизу
На этот раз мы будем размывать наши элементы снизу вверх по мере того, как пользователь прокручивает. Мы достигаем этого с помощью translate3d
на оси y элемента.
В этом примере я перечислил информацию курса по темам в виде сетки.Когда пользователь прокручивает страницу вниз, каждая карта в поле зрения будет исчезать и двигаться вверх, отображая информацию о курсе.
См. CSS-анимацию пера при прокрутке - постепенное исчезновение снизу вверх по SitePoint (@SitePoint) на CodePen.
Многоступенчатая подпрыгивающая анимация
В нашем последнем примере мы будем использовать многоступенчатую анимацию. Для этого мы определим пользовательские анимации ключевых кадров
, которые объединят вращения
с трансляцией
. Этот тип анимации может помочь продемонстрировать области вашего веб-сайта (в этом примере мы демонстрируем профили сотрудников).
См. CSS-анимацию пера при прокрутке - многоступенчатое перемещение по SitePoint (@SitePoint) на CodePen.
Куда отсюда?
Отсюда вы можете взять изученные концепции и применить их в своих проектах.
Теперь, когда вы можете определять, когда элемент находится в поле зрения, вы можете связать дополнительные преобразования или эффекты для создания интерактивных интерфейсов. Например, когда элемент попадает в область просмотра (и после его преобразования), вы можете преобразовать дополнительные элементы, такие как затухание в заголовке, масштабирование изображения и т. Д.
Вы уже используете эти эффекты в своих проектах? Или вы думаете, что анимациями злоупотребляют и отвлекают от взаимодействия с пользователем? В любом случае, я хотел бы услышать ваше мнение в комментариях.
Поднимите свои навыки CSS на новый уровень с помощью нашей книги «Мастер CSS, 2-е издание» Тиффани Б. Браун, в которой рассматриваются CSS-анимации, переходы, преобразования и многое другое.
Краткое введение в jQuery animate ()
Метод jQuery animate ()
выполняет настраиваемые анимации для указанных свойств CSS.Он принимает ряд аргументов. Первый аргумент - это объект, содержащий изменения CSS, которые необходимо внести. Второй аргумент может обрабатывать несколько параметров, таких как продолжительность и функция обратного вызова.
Найдите свой учебный лагерь Match
- Карьера Карма подойдет вам с лучшими техническими учебными курсами
- Получите эксклюзивные стипендии и подготовительные курсы
Для animate ()
доступно большое количество опций.Это введение будет ограничено начальным учебником. Мы рассмотрим синтаксис jQuery animate, а также пример кода. В нашем примере кода будет показано, как развернуть
animate ()
.Зачем использовать jQuery animate ()?
Существует множество вариантов использования jQuery animate ()
. Проще говоря, вы можете использовать этот метод в любое время, когда вашему приложению требуется анимация во внешнем интерфейсе. Этот метод обеспечивает динамичное и комплексное решение.
Анимация стала стандартной практикой во фронтенд-разработке.При достаточной практике использования animate ()
вы сможете в кратчайшие сроки внедрить анимацию во внешний интерфейс вашего проекта. Давайте начнем с изучения синтаксиса.
Карьера Карма вошла в мою жизнь, когда я больше всего в ней нуждалась, и быстро помогла мне пройти тренировочный лагерь. Через два месяца после выпуска я нашла работу своей мечты, которая соответствовала моим ценностям и целям в жизни!
Venus, инженер-программист Rockbot
Найдите свой матч на учебном лагере
Синтаксис jQuery animate ()
Найдите свой учебный лагерь Match
- Карьера Карма подойдет вам с лучшими техническими учебными курсами
- Получите эксклюзивные стипендии и подготовительные курсы
Как мы вкратце обсуждали, animate ()
принимает аргумент объекта CSS.Это объект, содержащий новые значения выбранных свойств CSS. Лучше всего использовать animate ()
только для элемента, на который есть ссылка в таблице стилей.
Как и все методы jQuery, animate ()
должен быть прикреплен к выбранному элементу. Оттуда вызовите animate ()
и передайте объект свойств CSS со значениями желаемого окончательного вида. Здесь важно отметить, что animate ()
работает только с числовыми свойствами CSS.Такие атрибуты, как цвета или тип шрифта, не будут прочитаны animate ()
.
jQuery animate () в действии
Давайте разберем приведенное выше объяснение на код, чтобы сделать его более понятным, начнем с простого HTML-рендеринга кнопки и
HTMLСмотри на меня!
Оба элемента имеют атрибуты id. Это то, что мы будем использовать для их выбора с помощью jQuery. Теперь давайте посмотрим, как можно стилизовать
animate ()
.CSS div { цвет фона: светло-голубой; ширина: 100 пикселей; граница: 1 пиксель сплошного синего цвета; }
Здесь мы стилизовали
animate ()
объект атрибутов CSS. Эти атрибуты будут отражать окончательные изменения, которые мы хотим видеть.$ ('# click'). Click (function () { $ ('# block'). animate ({ ширина: '70% ', fontSize: '3em', borderWidth: '10px' }) })
Если мы разберем jQuery, мы увидим, что мы выбрали кнопку по атрибуту id для click.Затем мы вызываем метод jQuery click ()
, чтобы присоединить обработчик событий, ожидающий получения щелчка. Как только click ()
получит событие щелчка, он выполнит функцию обратного вызова.
Чтобы освежить вашу память, функция обратного вызова - это функция, переданная другой функции, которая будет выполнена позже. В этом случае это происходит после обнаружения события клика. Узнайте больше о jQuery click ()
здесь.
Перейдя внутрь функции обратного вызова, мы выбираем наш
animate ()
дляОбратите внимание, как fontSize и borderWidth отличаются от способа их объявления в CSS. Вот так jQuery принимает свойства CSS, которые обычно переносятся через дефис.
Значения в нашем CSS-объекте - это то, что мы хотим визуализировать после завершения анимации. Теперь, когда мы нажмем кнопку, мы увидим анимацию
Сработало! Мы видим, как все содержимое
Заключение
В этом учебнике для начинающих по jQuery animate ()
мы узнали, что animate ()
выполняет анимацию для объекта CSS. Этот объект CSS передается методу с окончательными отображаемыми значениями. Следует повторить, что animate ()
считывает только числовые значения CSS. Такие свойства, как цвет фона и тип шрифта, считываться не будут.
С jQuery animate ()
можно охватить гораздо больше вопросов, поэтому, когда это введение имеет смысл, щелкните здесь.Всегда полезно читать официальную документацию и практиковаться с включенными примерами. jQuery animate ()
поначалу может показаться довольно сложным, но при регулярной практике вы освоите анимацию раньше, чем вы думаете!
.
2024 © Все права защищены.
Добавить комментарий