transition-timing-function | htmlbook.ru
Internet Explorer | Chrome | Opera | Safari | Firefox | Android | iOS | |||
10.0+ | 4.0+ | 26.0+ | 10.5+ | 12.10+ | 3.0+ | 4.0+ | 16.0+ | 4.0 | 2.0+ |
Краткая информация
Значение по умолчанию | ease |
---|---|
Наследуется | Нет |
Применяется | Ко всем элементам, к псевдоэлементам ::before и ::after |
Ссылка на спецификацию | http://dev.w3.org/csswg/css3-transitions/#transition-timing-function |
Версии CSS
CSS 1 | CSS 2 | CSS 2.1 | CSS 3 |
---|---|---|---|
Описание
Устанавливает, насколько быстро должно изменяться значение стилевого свойство для которого применяется эффект перехода.
transition-timing-function представляет собой математическую функцию, показывающую, как быстро по времени меняется указанное через transition-property значение свойства. Начальная точка имеет координаты 0.0, 0.0, конечная — 1.0, 1.0, при этом функция по оси ординат может превышать эти значения в большую или меньшую сторону (рис. 1).
Рис. 1. Вид функции
Синтаксис
transition-timing-function: ease|ease-in|ease-out|ease-in-out|linear|step-start|step-end|steps|cubic-bezier
Значения
- ease
- Анимация начинается медленно, затем ускоряется и к концу движения опять замедляется. Аналогично cubic-bezier(0.25,0.1,0.25,1).
- ease-in
- Анимация медленно начинается, к концу ускоряется. Аналогично cubic-bezier(0.42,0,1,1).
- ease-out
- Анимация начинается быстро, к концу замедляется. Аналогично cubic-bezier(0,0,0.58,1).
- ease-in-out
- Анимация начинается и заканчивается медленно. Аналогично cubic-bezier(0.42,0,0.58,1).
- linear
- Одинаковая скорость от начала и до конца.
- step-start
- Как таковой анимации нет. Стилевые свойства сразу же принимают конечное значение.
- step-end
- Как таковой анимации нет. Стилевые свойства находятся в начальном значении заданное время, затем сразу же принимают конечное значение.
- steps
- Ступенчатая функция, имеющая заданное число шагов.
- Здесь: <число> — целое число больше нуля; start — задаёт полунепрерывную снизу функцию; end — задаёт полунепрерывную сверху функцию.
- cubic-bezier
- Задаёт функцию движения в виде кривой Безье.
ease
ease-in
ease-out
ease-in-out
linear
step-start
step-end
steps(2, start)
Чтобы посмотреть результат действия разных значений, наведите курсор на поле ниже. Время эффект перехода установлено как 3s.
ease
ease-in
ease-out
ease-in-out
linear
step-start
step-end
steps(5, end)
cubic-bezier(0.1, -0.6, 0.2, 0)
Пример
HTML5CSS3IE 10+CrOpSaFx
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>transition-timing-function</title> <style> . progress { background: #333; /* Фон */ border: 2px solid #333; /* Рамка */ height: 20px; /* Высота */ position: relative; /* Относительное позиционирование */ } .progress:hover::before{ width: 100%; } .progress::before{ transition-timing-function: linear; transition-duration: 5s; content: ''; position: absolute; /* Абсолютное позиционирование */ height: 100%; width: 0; background: #FFA600; /* Фон */ } </style> </head> <body> <div></div> </body> </html>
Объектная модель
[window.]document.getElementById(«elementID»).style.transitionTimingFunction
Браузеры
Chrome до версии 26.0, Safari и iOS поддерживают нестандартное свойство -webkit-transition-timing-function.
Opera до версии 12.10 поддерживает нестандартное свойство -o-transition-timing-function.
Firefox до версии 16.0 поддерживает нестандартное свойство -moz-transition-timing-function.
Safari поддерживает значение steps только с версии 5.1.
Анимация
CSS по теме
- transition-timing-function
Статьи по теме
Рецепты CSS
функций | Документация Kotlin
Функции Kotlin объявляются с использованием ключевого слова fun
:
fun double(x: Int): Int { возврат 2 * х }
Использование функции
Функции вызываются с использованием стандартного подхода:
val result = double(2)
Stream().read() // создаем экземпляр класса Stream и call read()
Параметры
Параметры функции определены с использованием нотации Паскаля — имя : тип . Параметры разделяются запятыми, и каждый параметр должен быть явно введен:
fun powerOf(number: Int, exponent: Int): Int { /*…*/ }
Вы можете использовать запятую при объявлении функции параметры:
удовольствие powerOf( номер: инт, показатель степени: Int, // запятая в конце ) { /*. ..*/ }
Аргументы по умолчанию
Параметры функции могут иметь значения по умолчанию, которые используются при пропуске соответствующего аргумента. Это уменьшает количество перегрузок:
прикольно читать( б: массив байтов, выкл.: Int = 0, len: Int = b.size, ) { /*…*/ }
Значение по умолчанию устанавливается добавлением =
к типу.
Переопределяющие методы всегда используют значения параметров базового метода по умолчанию. При переопределении метода, который имеет значения параметров по умолчанию, значения параметров по умолчанию должны быть исключены из подписи:
open class A { open fun foo(i: Int = 10) { /*…*/ } } класс Б: А () { override fun foo(i: Int) { /*…*/ } // Значение по умолчанию не допускается. }
Если параметр по умолчанию предшествует параметру без значения по умолчанию, значение по умолчанию можно использовать только путем вызова функции с именованными аргументами:
fun foo( бар: Int = 0, баз: инт, ) { /*. ..*/ } foo(baz = 1) // Используется значение по умолчанию bar = 0
Если последним аргументом после параметров по умолчанию является лямбда, вы можете передать его либо как именованный аргумент, либо за скобками:
fun foo( бар: Int = 0, баз: Инт = 1, qux: () -> Единица измерения, ) { /*…*/ } foo(1) { println(«hello») } // Использует значение по умолчанию baz = 1 foo(qux = { println(«hello») }) // Используются оба значения по умолчанию bar = 0 и baz = 1 foo { println(«hello») } // Используются оба значения по умолчанию: bar = 0 и baz = 1
Именованные аргументы
Вы можете назвать один или несколько аргументов функции при ее вызове. Это может быть полезно, когда у функции много аргументов и трудно связать значение с аргументом, особенно если это логическое значение или значение null
.
Когда вы используете именованные аргументы в вызове функции, вы можете свободно менять порядок, в котором они перечислены. Если вы хотите использовать их значения по умолчанию, вы можете просто вообще исключить эти аргументы.
Рассмотрим функция переформатирования()
, которая имеет 4 аргумента со значениями по умолчанию.
весело переформатировать( ул: Строка, normalizeCase: Boolean = истина, upperCaseFirstLetter: Boolean = истина, разделитьByCamelHumps: Boolean = ложь, разделитель слов: символ = ‘ ‘, ) { /*…*/ }
При вызове этой функции вам не нужно называть все ее аргументы:
переформатировать( «Нить!», ЛОЖЬ, upperCaseFirstLetter = ложь, разделитьByCamelHumps = правда, ‘_’ )
Можно пропустить все со значениями по умолчанию:
переформатировать («Это длинная строка!»)
Вы также можете пропустить определенные аргументы со значениями по умолчанию, а не опускать их все. Однако после первого пропущенного аргумента вы должны назвать все последующие аргументы:
переформатировать(«Это короткая строка!», upperCaseFirstLetter = false, wordSeparator = ‘_’)
Вы можете передавать переменное количество аргументов ( vararg
) с именами, использующими оператор spread
:
fun foo(vararg strings: String) { /*. ..*/ } foo(strings = *arrayOf(«a», «b», «c»))
При вызове функций Java на JVM нельзя использовать синтаксис именованных аргументов, поскольку байт-код Java не всегда сохраняет имена параметров функции.
Функции, возвращающие единицы измерения
Если функция не возвращает полезного значения, ее тип возвращаемого значения — Единица измерения
. Unit
— это тип, имеющий только одно значение — Unit
. Это значение не обязательно возвращать явно:
fun printHello(name: String?): Unit { если (имя != ноль) println(«Здравствуйте, $имя») еще println(«Привет!») // `return Unit` или `return` необязательны }
Объявление типа возвращаемого значения Unit
также является необязательным. Приведенный выше код эквивалентен:
fun printHello(name: String?) { … }
Функции с одним выражением
Когда функция возвращает одно выражение, фигурные скобки можно опустить, а тело указать после a =
символ:
fun double(x: Int): Int = x * 2
Явное объявление возвращаемого типа является необязательным, если это может быть определено компилятором:
fun double(x: Int) = x * 2
Явные возвращаемые типы
Функции с телом блока всегда должны явно указывать типы возвращаемых значений, если только они не предназначены для возврата Unit
, в этом случае указание возвращаемого типа необязательный.
Kotlin не выводит возвращаемые типы для функций с блочными телами, потому что такие функции могут иметь сложный поток управления в теле, и тип возвращаемого значения будет неочевидным для читателя (а иногда даже для компилятора).
Переменное количество аргументов (varargs)
Параметр функции (обычно последний) можно пометить модификатором vararg
:
fun
В этом случае вы можете передать функции переменное количество аргументов:
val list = asList(1, 2, 3)
Внутри функции vararg
-параметр типа T
виден как массив T
, как в примере выше, где переменная ts
имеет тип Array
.
Только один параметр может быть помечен как vararg
. Если параметр vararg
не является последним в списке, значения для последующих параметров могут быть переданы с использованием синтаксиса именованного аргумента или, если параметр имеет тип функции, путем передачи лямбда-выражения вне круглых скобок.
Когда вы вызываете vararg
-функцию, вы можете передавать аргументы по отдельности, например asList(1, 2, 3)
. Если у вас уже есть массив и вы хотите передать его содержимое в функцию, используйте оператор spread (перед массивом *
):
val a = arrayOf(1, 2, 3) val list = asList(-1, 0, *a, 4)
Если вы хотите передать массив примитивного типа в vararg
, вам нужно преобразовать его в обычный (типизированный) массив с помощью
function:
val a = intArrayOf(1, 2, 3) // IntArray — массив примитивного типа val list = asList(-1, 0, *a.toTypedArray(), 4)
Инфиксная нотация
Функции, помеченные ключевым словом инфиксная
, также могут быть вызваны с использованием инфиксной нотации (без точки и круглых скобок для вызов). Инфиксные функции должны соответствовать следующим требованиям:
Они должны быть функциями-членами или функциями расширения.
У них должен быть один параметр.
Параметр не должен принимать переменное количество аргументов и не должен иметь значения по умолчанию.
инфикс fun Int.shl(x: Int): Int { … } // вызов функции с использованием инфиксной записи 1 шл 2 // такой же как 1.shl(2)
Инфиксные вызовы функций имеют более низкий приоритет, чем арифметические операторы, приведения типов и оператор rangeTo
. Следующие выражения эквивалентны:
1 Shl 2 + 3
эквивалентен1 Shl (2 + 3)
0 до n * 2
эквивалентен0. union ys as Set<*>
эквивалентенxs union (ys as Set<*>)
С другой стороны, приоритет вызова инфиксной функции выше, чем у логических операторов &&
и ||
, это
— и в
-чеки и некоторые другие операторы. Эти выражения также эквивалентны:
Обратите внимание, что инфиксные функции всегда требуют указания как получателя, так и параметра. Когда вы вызываете метод текущего получателя с использованием инфиксной нотации, явно используйте this
. Это необходимо для обеспечения однозначного синтаксического анализа.
класс MyStringCollection { infix fun add(s: String) { /*…*/ } забавная сборка () { это добавить «abc» // Правильно добавить(«abc») // Правильно //добавляем «abc» // Неверно: должен быть указан получатель } }
Область действия функции
Функции Kotlin могут быть объявлены на верхнем уровне в файле, что означает, что вам не нужно создавать класс для хранения функции, что требуется в таких языках, как Java, C# и Scala ( определение верхнего уровня доступно, начиная с Scala 3). В дополнение к функциям верхнего уровня функции Kotlin также могут быть объявлены локально как функции-члены и функции расширения.
Локальные функции
Kotlin поддерживает локальные функции, которые являются функциями внутри других функций:
весело dfs (граф: график) {
fun dfs (текущий: Vertex, посещенный: MutableSet
Локальная функция может обращаться к локальным переменным внешних функций (замыкание). В приведенном выше случае посещенных
может быть локальной переменной:
fun dfs(graph: Graph) {
val посещено = HashSet
Функции-члены
Функция-член — это функция, определенная внутри класса или объекта:
class Sample { весело foo() { print(«Foo») } }
Функции-члены вызываются с записью через точку:
Sample(). foo() // создает экземпляр класса Sample и вызывает foo
Дополнительные сведения о классах и переопределяющих членах см. в разделе Классы и наследование.
Общие функции
Функции могут иметь общие параметры, которые указываются с помощью угловых скобок перед именем функции:
fun
Дополнительные сведения об универсальных функциях см. в разделе Универсальные функции.
Функции хвостовой рекурсии
Kotlin поддерживает стиль функционального программирования, известный как хвостовая рекурсия. Для некоторых алгоритмов, которые обычно используют циклы, вы можете вместо этого использовать рекурсивную функцию без риска переполнения стека. Когда функция помечена модификатором tailrec
и соответствует требуемым формальным условиям, компилятор оптимизирует рекурсию, оставляя вместо нее быструю и эффективную версию, основанную на циклах:-15
tailrec fun findFixPoint(x: Double = 1. 0): Double =
if (Math.abs(x — Math.cos(x)) < eps) x else findFixPoint(Math.cos(x))
Этот код вычисляет фиксированную точку
косинуса, которая является математической константой. Он просто вызывает Math.cos
несколько раз, начиная с 1.0
, пока результат не перестанет меняться, давая результат 0.7390851332151611
для указанной точности eps
. Полученный код эквивалентен этому более традиционному стилю: 9-15
приватная забава findFixPoint(): Double {
переменная х = 1,0
пока (правда) {
знач y = Math.cos(x)
если (Math.abs(x — y) < eps) вернуть x
х = Math.cos (х)
}
}
Чтобы иметь право на модификатор tailrec
, функция должна вызывать себя в качестве последней операции, которую она выполняет. Вы не можете использовать хвостовую рекурсию, когда после рекурсивного вызова есть больше кода, в пределах try
/ catch
/ finally
блоков или при открытых функциях. В настоящее время хвостовая рекурсия поддерживается Kotlin для JVM и Kotlin/Native.
См. Также :
Встроенные функции
Функции расширения
Функции высшего порядка и LAMBDAS
LAST MODED FENFORMS и LAMBDAS
: 29000.s. 9000.ships 9000.ship.
BiConsumer | Представляет операцию, которая принимает два входных аргумента и не возвращает результат. |
BiFunction | Представляет функцию, которая принимает два аргумента и возвращает результат. |
BinaryOperator | Представляет собой операцию над двумя операндами одного типа, дающую результат того же типа, что и операнды. |
BiPredicate | Представляет предикат (логическую функцию) двух аргументов. |
Логический поставщик | Представляет поставщика |
Потребитель | Представляет операцию, которая принимает один входной аргумент и не возвращает результат. |
Даблбинариоператор | Представляет операцию над двумя |
Двойной потребитель | Представляет операцию, которая принимает один |
Двойная функция | Представляет функцию, которая принимает аргумент с двойным значением и создает результат. |
Двойной предикат | Представляет предикат (логическую функцию) одного |
Двойной поставщик | Представляет поставщика |
Даблтоинтфункция | Представляет функцию, которая принимает аргумент с двойным значением и создает int-значный результат. |
Даблтолонгфункция | Представляет функцию, которая принимает аргумент с двойным значением и создает долгосрочный результат. |
Двойной унарный оператор | Представляет операцию над одним |
Функция | Представляет функцию, которая принимает один аргумент и возвращает результат. |
Интбинариоператор | Представляет операцию над двумя операндами со значениями |
IntConsumer | Представляет операцию, которая принимает один аргумент со значением |
IntFunction | Представляет функцию, которая принимает аргумент с целочисленным значением и создает результат. |
Интпредикат | Представляет предикат (логическую функцию) одного |
IntSupplier | Представляет поставщика |
Инттодаублефункция | Представляет функцию, которая принимает аргумент с целочисленным значением и создает двузначный результат. |
Инттолонгфункция | Представляет функцию, которая принимает аргумент с целочисленным значением и создает долгосрочный результат. |
IntUnaryOperator | Представляет операцию над одним операндом со значением |
Лонгбинариоператор | Представляет собой операцию над двумя |
Лонгпотребитель | Представляет операцию, которая принимает один аргумент со значением |
Длинная функция | Представляет функцию, которая принимает аргумент с длинным значением и создает результат. |
Длинный предикат | Представляет предикат (логическую функцию) одного |
Длинный поставщик | Представляет поставщика |
LongToDoubleFunction | Представляет функцию, которая принимает аргумент с длинным значением и создает двузначный результат. |
LongToIntFunction | Представляет функцию, которая принимает аргумент с длинным значением и создает int-значный результат. |
Лонгунариоператор | Представляет операцию над одним |
ОбжДублеКонсумер<Т> | Представляет операцию, которая принимает объектное значение и |
ОбжИнтКонсумер | Представляет операцию, которая принимает объектное значение и |
ОбжЛонгКонсумер | Представляет операцию, которая принимает объектное значение и |